<?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>213550</bug_id>
          
          <creation_ts>2020-06-24 03:37:17 -0700</creation_ts>
          <short_desc>[GStreamer][EME][OpenCDM] Implement OpenCDM support</short_desc>
          <delta_ts>2020-07-13 09:19:12 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xabier Rodríguez Calvar">calvaris</reporter>
          <assigned_to name="Xabier Rodríguez Calvar">calvaris</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>agomez</cc>
    
    <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>cturner</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ltilve</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665684</commentid>
    <comment_count>0</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-06-24 03:37:17 -0700</bug_when>
    <thetext>We&apos;re implementing the OpenCDM support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665696</commentid>
    <comment_count>1</comment_count>
      <attachid>402635</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-06-24 04:49:02 -0700</bug_when>
    <thetext>Created attachment 402635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665761</commentid>
    <comment_count>2</comment_count>
      <attachid>402657</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-06-24 09:35:42 -0700</bug_when>
    <thetext>Created attachment 402657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665998</commentid>
    <comment_count>3</comment_count>
      <attachid>402721</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-06-24 23:57:45 -0700</bug_when>
    <thetext>Created attachment 402721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667073</commentid>
    <comment_count>4</comment_count>
      <attachid>402721</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-06-29 06:37:59 -0700</bug_when>
    <thetext>Comment on attachment 402721
Patch

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

&gt; Source/WebCore/platform/SharedBuffer.cpp:126
&gt; +const uint8_t* SharedBuffer::dataAsUInt8Ptr() const

It bothers me that the public API has to change like this, but I don&apos;t know how to make it better. There&apos;s https://en.cppreference.com/w/cpp/language/cast_operator, but that&apos;s probably a little too magical. Shame we can&apos;t overload based on return types :-)

Maybe even an out-of-class function that wraps the static casting.

I find it odd the API returns a signed type for the bytes anyway, AFAICT uint8_t is more natural for this class as a default anyway.

&gt; Source/WebCore/platform/SharedBuffer.h:109
&gt; +    const uint8_t* dataAsUInt8Ptr() const;

Could inline the definition here.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:107
&gt; +    return &quot;[opaque key value]&quot;_s;

When does this happen?

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:127
&gt; +{

This is a default operator=, the compiler will do this for you.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:435
&gt; +void CDMInstanceSessionProxy::getRemovedFromInstanceProxy()

removeFromInstanceProxy

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:49
&gt; +using KeyHandleValueVariant = Variant&lt;

Note that, only when ENABLE(OPENCDM), does this variant make sense. If only 1 out of 2 options make use of a variant, then the variant is unnecessary. Instead, do this,

#if ENABLE(OPENCDM)
using KeyValueType = BoxPtr&lt;OpenCDMSession&gt;
#else
using KeyValueType = Vector&lt;uint8_t&gt;
#endif

and then, all call-sites using this value go back to being simple without requiring (*constructs)-&gt;likethat().

It would be even better if instead of using #if guards, you moved the definition of these types into the classes, and then used templates or inheritance, as you wish, to condition the value of types on the implementation of the CDM.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:128
&gt; +    KeyStore(MergeStrategy mergeStrategy = MergeStrategy::NoOp) { setMergeStrategy(mergeStrategy); }

Use a class initializer for default, then the ctor can be remove (let the compiler do it for you).

I commented this on the last bug without response, but this merge strategy pattern is overkill here IMO. Feel free to ignore again, but for prosperity I repeat :-)

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:175
&gt; +    void setMergeStrategy(KeyStore::MergeStrategy strategy) { m_keyStore.setMergeStrategy(strategy); }

Why do we need this level of runtime configuration? Does the strategy ever change at runtime in practice?

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:246
&gt; +    explicit CDMInstanceProxy(const String&amp; keySystem, KeyStore::MergeStrategy mergeStrategy = KeyStore::MergeStrategy::NoOp)

Ditto, use a class initializer to clean this up. Again though, don&apos;t think we need this complexity.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:299
&gt; +        unsigned openCDMRank = isOpenCDMRanked() ? 300 : 100;

Please add an explanation for this one.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:402
&gt; +    Vector&lt;uint8_t&gt; value;

Nit of year? But I prefer vec to value here :-)

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:403
&gt; +    value.append(data(), size());

I&apos;ve seen this sort of thing enough times now that I propose adding another constructor to Vector, taking a byte array and a size.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:219
&gt; +    if (m_cdmInstance &amp;&amp; !g_strcmp0(g_getenv(&quot;WEBKIT_EME_RELEASE_OPENCDM_WITH_PLAYER_DESTRUCTION&quot;), &quot;yes&quot;))

Why do we use environment variables for this? Seems a bit dodgy.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3518
&gt; +        GST_DEBUG(&quot;scheduling initializationDataEncountered %s event of size %zu&quot;, initData.payloadContainerType().utf8().data()

Something seems odd with the whitespace here

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:59
&gt; +using OpenCDMKeyStatus = KeyStatus;

Why?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:106
&gt; +static RefPtr&lt;JSON::Object&gt; parseJSONObject(const SharedBuffer&amp; buffer)

This function is copied from the ClearKey file. Instead of copying, place it in a common utility file.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:152
&gt; +            ASSERT_NOT_REACHED_WITH_MESSAGE(&quot;No key systems supported on OpenCDM and OpenCDM is preferred. Is Thunder running? Are the plugins built?&quot;);

This message doesn&apos;t make sense to me.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:272
&gt; +    callback(!opencdm_system_set_server_certificate(m_openCDMSystem.get(), const_cast&lt;uint8_t*&gt;(certificate-&gt;dataAsUInt8Ptr()), certificate-&gt;size())

Nit: I&apos;d use a variable to tidy this ?: up.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:286
&gt; +        , const uint16_t challengeLength) {

Nit: I don&apos;t think the commas are supposed to drop down like this? o_O

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:332
&gt; +static std::pair&lt;RefPtr&lt;SharedBuffer&gt;, Optional&lt;WebCore::MediaKeyMessageType&gt;&gt; parseResponseMessage(const RefPtr&lt;SharedBuffer&gt;&amp; buffer)

Nit: I admit this is my personal taste, but I&apos;ve come to find std::pair an abomination. Structs come with lovely names that hide all of the &gt;&gt;&lt;&gt;&lt;&lt;&gt;&lt;&gt;&lt;. They also don&apos;t force you to name your variables first and second.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:335
&gt; +        return std::make_pair(SharedBuffer::create(), WTF::nullopt);

Seems we should return both an optional RefPtr&lt;SharedBuffer&gt; to go with the optional MediaKeyMessageType

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:338
&gt; +    String message(StringImpl::createWithoutCopying(reinterpret_cast&lt;const LChar*&gt;(buffer-&gt;data()), buffer-&gt;size()));

That looks like string could use a new static constructor method.
Maybe StringView::toStringWithoutCopying would help a little.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:340
&gt; +    String requestType(message.characters8(), typePosition != notFound ? typePosition : 0);

I would do this spliting / parsing using a StringView to both make the code&apos;s intent cleaner and avoid unnecessary copies. That should extend to the rest of this method as well I reckon.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:355
&gt; +    // This can be called as a result of e.g. requestLicense() but update() or remove() as well.

Do you mean all three? Or that it&apos;s most common for requestLicence, but can happen for update() and remove() too? I&apos;d simply say &quot;Called as a result of requestLicense(), update() or remove()&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:356
&gt; +    // This called not as a response to API call is also possible.

Doesn&apos;t make any sense.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:364
&gt; +    } else if (!m_sessionChangedCallbacks.isEmpty()) {

Is it intentional that session changed callbacks are not fired if there&apos;s any challenge callbacks fired?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:370
&gt; +            m_client-&gt;sendMessage(static_cast&lt;CDMMessageType&gt;(messageAndRequestType.second.value()), messageAndRequestType.first.releaseNonNull());

This makes me push harder on the nit above, that the std::pair is hindering more than it&apos;s helping. A dedicated struct for the type shared buffer with a helper method for ^ seems a good idea.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:399
&gt; +CDMInstanceSession::KeyStatus CDMInstanceSessionOpenCDM::status(const KeyIDType&amp; keyID) const

In keeping with the other enum helpers, name it toKeyStatus.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:444
&gt; +        m_client-&gt;updateKeyStatuses(m_keyStore.convertToJSKeyStatusVector());

Why must it run only if there&apos;s no callbacks? Please leave a comment since this is weird.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:512
&gt; +        generateChallenge();

Why must be fire these callbacks now? Both conditions are handled in the lambda already. I worry there&apos;s some timing condition hidden here.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:533
&gt; +            if (!buffer) {

buffer is too generally named, i&apos;d call it responseMessage, or responseMessageBuffer if you like types in the names.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:563
&gt; +    m_sessionChangedCallbacks.append([this, callback = WTFMove(callback)](bool success, RefPtr&lt;SharedBuffer&gt;&amp;&amp; buffer) mutable {

ditto about buffer

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:570
&gt; +                // will even be other parts of the spec where not having structured data will be bad.

This is all looking very repetitive. Create a new class to hold a parsed object for the response payloads seems a good idea. E.g parsedReponseMessage should return an object, OpenCDMResponseMessage, which has methods like type() and payload().

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:576
&gt; +                        , messageAndRequestType.first.releaseNonNull()), SuccessValue::Succeeded, SessionLoadFailure::None);

In line with the above, this needs tidying up.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:587
&gt; +            callback(WTF::nullopt, WTF::nullopt, WTF::nullopt, SuccessValue::Failed, sessionLoadFailureFromOpenCDM(response));

Note in particular the WTF::nullopt, WTF::nullopt, WTF::nullopt repitition, that can be factored using another lambda and make this code more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667105</commentid>
    <comment_count>5</comment_count>
      <attachid>402721</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-06-29 08:40:47 -0700</bug_when>
    <thetext>Comment on attachment 402721
Patch

Reset review flag, I accidentally hit it as an informal reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668492</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-02 23:28:43 -0700</bug_when>
    <thetext>(In reply to Charlie Turner from comment #4)
&gt; Comment on attachment 402721 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402721&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.cpp:126
&gt; &gt; +const uint8_t* SharedBuffer::dataAsUInt8Ptr() const
&gt; 
&gt; It bothers me that the public API has to change like this, but I don&apos;t know
&gt; how to make it better. There&apos;s
&gt; https://en.cppreference.com/w/cpp/language/cast_operator, but that&apos;s
&gt; probably a little too magical. Shame we can&apos;t overload based on return types
&gt; :-)
&gt; 
&gt; Maybe even an out-of-class function that wraps the static casting.
&gt; 
&gt; I find it odd the API returns a signed type for the bytes anyway, AFAICT
&gt; uint8_t is more natural for this class as a default anyway.

I agree... But I think any of the solutions is out of the scope of this bug other than giving you a quick function that does the cast for you.

&gt; &gt; Source/WebCore/platform/SharedBuffer.h:109
&gt; &gt; +    const uint8_t* dataAsUInt8Ptr() const;
&gt; 
&gt; Could inline the definition here.

Nope!

  Running check-webkit-style.
  ERROR: Source/WebCore/platform/SharedBuffer.h:109:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:107
&gt; &gt; +    return &quot;[opaque key value]&quot;_s;
&gt; 
&gt; When does this happen?

Good question! This was already there but it&apos;s currently unused so I remove the whole method, anyone can add it if needed.

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:127
&gt; &gt; +{
&gt; 
&gt; This is a default operator=, the compiler will do this for you.

No, I can&apos;t because it is deleted the ThreadSafeRefCountedBase but after rethinking if merge is needed, it looks like it isn&apos;t so copying a key is not needed (I added an ASSERT for this just in case). I removed all the code related to merging.

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:435
&gt; &gt; +void CDMInstanceSessionProxy::getRemovedFromInstanceProxy()
&gt; 
&gt; removeFromInstanceProxy

Done

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:49
&gt; &gt; +using KeyHandleValueVariant = Variant&lt;
&gt; 
&gt; Note that, only when ENABLE(OPENCDM), does this variant make sense. If only
&gt; 1 out of 2 options make use of a variant, then the variant is unnecessary.
&gt; Instead, do this,
&gt; 
&gt; #if ENABLE(OPENCDM)
&gt; using KeyValueType = BoxPtr&lt;OpenCDMSession&gt;
&gt; #else
&gt; using KeyValueType = Vector&lt;uint8_t&gt;
&gt; #endif
&gt; 
&gt; and then, all call-sites using this value go back to being simple without
&gt; requiring (*constructs)-&gt;likethat().
&gt; 
&gt; It would be even better if instead of using #if guards, you moved the
&gt; definition of these types into the classes, and then used templates or
&gt; inheritance, as you wish, to condition the value of types on the
&gt; implementation of the CDM.

I don&apos;t think doing this is a good idea because if I do this I either build OpenCDM or ClearKey. This way I can do both at the same time. I think this is something to remove if we can make ClearKey work with OpenCDM but I don&apos;t see it feasible.
 
&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:128
&gt; &gt; +    KeyStore(MergeStrategy mergeStrategy = MergeStrategy::NoOp) { setMergeStrategy(mergeStrategy); }
&gt; 
&gt; Use a class initializer for default, then the ctor can be remove (let the
&gt; compiler do it for you).
&gt; 
&gt; I commented this on the last bug without response, but this merge strategy
&gt; pattern is overkill here IMO. Feel free to ignore again, but for prosperity
&gt; I repeat :-)

This is already reworked and this constructor is default.

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:175
&gt; &gt; +    void setMergeStrategy(KeyStore::MergeStrategy strategy) { m_keyStore.setMergeStrategy(strategy); }
&gt; 
&gt; Why do we need this level of runtime configuration? Does the strategy ever
&gt; change at runtime in practice?

Not anymore

&gt; &gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:246
&gt; &gt; +    explicit CDMInstanceProxy(const String&amp; keySystem, KeyStore::MergeStrategy mergeStrategy = KeyStore::MergeStrategy::NoOp)
&gt; 
&gt; Ditto, use a class initializer to clean this up. Again though, don&apos;t think
&gt; we need this complexity.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:299
&gt; &gt; +        unsigned openCDMRank = isOpenCDMRanked() ? 300 : 100;
&gt; 
&gt; Please add an explanation for this one.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:402
&gt; &gt; +    Vector&lt;uint8_t&gt; value;
&gt; 
&gt; Nit of year? But I prefer vec to value here :-)

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:403
&gt; &gt; +    value.append(data(), size());
&gt; 
&gt; I&apos;ve seen this sort of thing enough times now that I propose adding another
&gt; constructor to Vector, taking a byte array and a size.

I think this is an improvement that can be tackled later.
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:219
&gt; &gt; +    if (m_cdmInstance &amp;&amp; !g_strcmp0(g_getenv(&quot;WEBKIT_EME_RELEASE_OPENCDM_WITH_PLAYER_DESTRUCTION&quot;), &quot;yes&quot;))
&gt; 
&gt; Why do we use environment variables for this? Seems a bit dodgy.

We have the same problem with libgcrypt in ClearKey so I made it general and not depending on an env var.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3518
&gt; &gt; +        GST_DEBUG(&quot;scheduling initializationDataEncountered %s event of size %zu&quot;, initData.payloadContainerType().utf8().data()
&gt; 
&gt; Something seems odd with the whitespace here

I don&apos;t know what you mean.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:59
&gt; &gt; +using OpenCDMKeyStatus = KeyStatus;
&gt; 
&gt; Why?

Cause unfortunately OpenCDM declares a KeyStatus and it conflicts with the CDMInstanceSession one but I added a comment to make it clear.
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:106
&gt; &gt; +static RefPtr&lt;JSON::Object&gt; parseJSONObject(const SharedBuffer&amp; buffer)
&gt; 
&gt; This function is copied from the ClearKey file. Instead of copying, place it
&gt; in a common utility file.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:152
&gt; &gt; +            ASSERT_NOT_REACHED_WITH_MESSAGE(&quot;No key systems supported on OpenCDM and OpenCDM is preferred. Is Thunder running? Are the plugins built?&quot;);
&gt; 
&gt; This message doesn&apos;t make sense to me.

Improved, I hope.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:272
&gt; &gt; +    callback(!opencdm_system_set_server_certificate(m_openCDMSystem.get(), const_cast&lt;uint8_t*&gt;(certificate-&gt;dataAsUInt8Ptr()), certificate-&gt;size())
&gt; 
&gt; Nit: I&apos;d use a variable to tidy this ?: up.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:286
&gt; &gt; +        , const uint16_t challengeLength) {
&gt; 
&gt; Nit: I don&apos;t think the commas are supposed to drop down like this? o_O

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:332
&gt; &gt; +static std::pair&lt;RefPtr&lt;SharedBuffer&gt;, Optional&lt;WebCore::MediaKeyMessageType&gt;&gt; parseResponseMessage(const RefPtr&lt;SharedBuffer&gt;&amp; buffer)
&gt; 
&gt; Nit: I admit this is my personal taste, but I&apos;ve come to find std::pair an
&gt; abomination. Structs come with lovely names that hide all of the &gt;&gt;&lt;&gt;&lt;&lt;&gt;&lt;&gt;&lt;.
&gt; They also don&apos;t force you to name your variables first and second.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:335
&gt; &gt; +        return std::make_pair(SharedBuffer::create(), WTF::nullopt);
&gt; 
&gt; Seems we should return both an optional RefPtr&lt;SharedBuffer&gt; to go with the
&gt; optional MediaKeyMessageType

Done. If it&apos;s optional, it becomes Ref.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:338
&gt; &gt; +    String message(StringImpl::createWithoutCopying(reinterpret_cast&lt;const LChar*&gt;(buffer-&gt;data()), buffer-&gt;size()));
&gt; 
&gt; That looks like string could use a new static constructor method.
&gt; Maybe StringView::toStringWithoutCopying would help a little.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:340
&gt; &gt; +    String requestType(message.characters8(), typePosition != notFound ? typePosition : 0);
&gt; 
&gt; I would do this spliting / parsing using a StringView to both make the
&gt; code&apos;s intent cleaner and avoid unnecessary copies. That should extend to
&gt; the rest of this method as well I reckon.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:355
&gt; &gt; +    // This can be called as a result of e.g. requestLicense() but update() or remove() as well.
&gt; 
&gt; Do you mean all three? Or that it&apos;s most common for requestLicence, but can
&gt; happen for update() and remove() too? I&apos;d simply say &quot;Called as a result of
&gt; requestLicense(), update() or remove()&quot;
&gt;
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:356
&gt; &gt; +    // This called not as a response to API call is also possible.
&gt; 
&gt; Doesn&apos;t make any sense.

I think the comment does not make sense anymore so I removed it.
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:370
&gt; &gt; +            m_client-&gt;sendMessage(static_cast&lt;CDMMessageType&gt;(messageAndRequestType.second.value()), messageAndRequestType.first.releaseNonNull());
&gt; 
&gt; This makes me push harder on the nit above, that the std::pair is hindering
&gt; more than it&apos;s helping. A dedicated struct for the type shared buffer with a
&gt; helper method for ^ seems a good idea.

Done.
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:399
&gt; &gt; +CDMInstanceSession::KeyStatus CDMInstanceSessionOpenCDM::status(const KeyIDType&amp; keyID) const
&gt; 
&gt; In keeping with the other enum helpers, name it toKeyStatus.

This is not a toKeyStatus method. It gets the status for a key ID.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:512
&gt; &gt; +        generateChallenge();
&gt; 
&gt; Why must be fire these callbacks now? Both conditions are handled in the
&gt; lambda already. I worry there&apos;s some timing condition hidden here.

In some cases the OpenCDM callback is not called and we need to handle them as well, that&apos;s why we force the callback to be called here.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:533
&gt; &gt; +            if (!buffer) {
&gt; 
&gt; buffer is too generally named, i&apos;d call it responseMessage, or
&gt; responseMessageBuffer if you like types in the names.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:563
&gt; &gt; +    m_sessionChangedCallbacks.append([this, callback = WTFMove(callback)](bool success, RefPtr&lt;SharedBuffer&gt;&amp;&amp; buffer) mutable {
&gt; 
&gt; ditto about buffer

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:570
&gt; &gt; +                // will even be other parts of the spec where not having structured data will be bad.
&gt; 
&gt; This is all looking very repetitive. Create a new class to hold a parsed
&gt; object for the response payloads seems a good idea. E.g parsedReponseMessage
&gt; should return an object, OpenCDMResponseMessage, which has methods like
&gt; type() and payload().

Done.
 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:576
&gt; &gt; +                        , messageAndRequestType.first.releaseNonNull()), SuccessValue::Succeeded, SessionLoadFailure::None);
&gt; 
&gt; In line with the above, this needs tidying up.

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/CDMOpenCDM.cpp:587
&gt; &gt; +            callback(WTF::nullopt, WTF::nullopt, WTF::nullopt, SuccessValue::Failed, sessionLoadFailureFromOpenCDM(response));
&gt; 
&gt; Note in particular the WTF::nullopt, WTF::nullopt, WTF::nullopt repitition,
&gt; that can be factored using another lambda and make this code more readable.

No, because the callbacks are CompletionHandlers that would need to be moved into the lambda causing to not be able to used them outside the lambda for the success cases.

And all this, together switching back from BoxPtr to std::shared_ptr and a couple of more improvements with come soon to your screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668585</commentid>
    <comment_count>7</comment_count>
      <attachid>403462</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-03 08:37:39 -0700</bug_when>
    <thetext>Created attachment 403462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668769</commentid>
    <comment_count>8</comment_count>
      <attachid>403519</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-04 03:13:02 -0700</bug_when>
    <thetext>Created attachment 403519
Patch

Trying to fix Apple build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669387</commentid>
    <comment_count>9</comment_count>
      <attachid>403685</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-07 07:20:56 -0700</bug_when>
    <thetext>Created attachment 403685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669399</commentid>
    <comment_count>10</comment_count>
      <attachid>403689</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-07 08:05:42 -0700</bug_when>
    <thetext>Created attachment 403689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669699</commentid>
    <comment_count>11</comment_count>
      <attachid>403689</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-07-08 03:38:14 -0700</bug_when>
    <thetext>Comment on attachment 403689
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:292
&gt; +    const char* value = g_getenv(&quot;WEBKIT_EME_RANK_PRIORITY&quot;);

WEBKIT_GST_...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670408</commentid>
    <comment_count>12</comment_count>
      <attachid>403957</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-10 04:29:17 -0700</bug_when>
    <thetext>Created attachment 403957
Patch

(In reply to Philippe Normand from comment #11)
&gt; Comment on attachment 403689 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403689&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:292
&gt; &gt; +    const char* value = g_getenv(&quot;WEBKIT_EME_RANK_PRIORITY&quot;);
&gt; 
&gt; WEBKIT_GST_...

Done, renamed OpenCDM into Thunder, moved from shared_ptr into the new BoxPtr.

Maybe a final review and we would be good to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670445</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-10 07:58:02 -0700</bug_when>
    <thetext>Committed r264219: &lt;https://trac.webkit.org/changeset/264219&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403957.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670446</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-10 07:59:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/65340424&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670469</commentid>
    <comment_count>15</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-10 09:24:24 -0700</bug_when>
    <thetext>(In reply to EWS from comment #13)
&gt; Committed r264219: &lt;https://trac.webkit.org/changeset/264219&gt;
This seems to have broken gtk api test: /WebKit2Gtk/TestWebKitWebView:/webkit/WebKitWebView/is-playing-audio

EWS also warned about this failure in https://ews-build.webkit.org/#/builders/34/builds/12940</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670479</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-07-10 10:01:01 -0700</bug_when>
    <thetext>https://trac.webkit.org/r264225
https://trac.webkit.org/r264226</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670480</commentid>
    <comment_count>17</comment_count>
      <attachid>403957</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-07-10 10:06:56 -0700</bug_when>
    <thetext>Comment on attachment 403957
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1610
&gt; +    if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_ERROR &amp;&amp; !g_strcmp0(g_getenv(&quot;WEBKIT_CRASH_ON_GSTREAMER_ERROR&quot;), &quot;sync&quot;)) {
&gt; +        GUniqueOutPtr&lt;GError&gt; err;
&gt; +        GUniqueOutPtr&lt;gchar&gt; debug;
&gt; +        gst_message_parse_error(message, &amp;err.outPtr(), &amp;debug.outPtr());
&gt; +        GST_ERROR(&quot;Error %d from %s: %s (url=%s)&quot;, err-&gt;code, GST_MESSAGE_SRC_NAME(message), err-&gt;message, m_url.string().utf8().data());
&gt; +        GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, &quot;webkit-video-sync-error&quot;);
&gt; +        ASSERT_NOT_REACHED();
&gt; +    }

Was this meant for debug purpose or is it useful upstream?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670519</commentid>
    <comment_count>18</comment_count>
      <attachid>403957</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-07-10 12:21:42 -0700</bug_when>
    <thetext>Comment on attachment 403957
Patch

I have added a couple of comments which you may want to address in
a follow-up patch.

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

&gt; Source/cmake/FindThunder.cmake:10
&gt; +#     True if the requested version of gcrypt was found

Surely you meant to do s/gcrypt/Thunder/ here (and in the lines below).

&gt; Source/cmake/FindThunder.cmake:50
&gt; +)

Also, is there any reason why this is not using an imported target?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670964</commentid>
    <comment_count>19</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-12 23:07:57 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #17)
&gt; Comment on attachment 403957 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403957&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1610
&gt; &gt; +    if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_ERROR &amp;&amp; !g_strcmp0(g_getenv(&quot;WEBKIT_CRASH_ON_GSTREAMER_ERROR&quot;), &quot;sync&quot;)) {
&gt; &gt; +        GUniqueOutPtr&lt;GError&gt; err;
&gt; &gt; +        GUniqueOutPtr&lt;gchar&gt; debug;
&gt; &gt; +        gst_message_parse_error(message, &amp;err.outPtr(), &amp;debug.outPtr());
&gt; &gt; +        GST_ERROR(&quot;Error %d from %s: %s (url=%s)&quot;, err-&gt;code, GST_MESSAGE_SRC_NAME(message), err-&gt;message, m_url.string().utf8().data());
&gt; &gt; +        GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, &quot;webkit-video-sync-error&quot;);
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; +    }
&gt; 
&gt; Was this meant for debug purpose or is it useful upstream?

It was meant for debug, but it could be useful upstream. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671020</commentid>
    <comment_count>20</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-13 07:06:41 -0700</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #19)
&gt; (In reply to Philippe Normand from comment #17)
&gt; &gt; Comment on attachment 403957 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=403957&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1610
&gt; &gt; &gt; +    if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_ERROR &amp;&amp; !g_strcmp0(g_getenv(&quot;WEBKIT_CRASH_ON_GSTREAMER_ERROR&quot;), &quot;sync&quot;)) {
&gt; &gt; &gt; +        GUniqueOutPtr&lt;GError&gt; err;
&gt; &gt; &gt; +        GUniqueOutPtr&lt;gchar&gt; debug;
&gt; &gt; &gt; +        gst_message_parse_error(message, &amp;err.outPtr(), &amp;debug.outPtr());
&gt; &gt; &gt; +        GST_ERROR(&quot;Error %d from %s: %s (url=%s)&quot;, err-&gt;code, GST_MESSAGE_SRC_NAME(message), err-&gt;message, m_url.string().utf8().data());
&gt; &gt; &gt; +        GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline.get()), GST_DEBUG_GRAPH_SHOW_ALL, &quot;webkit-video-sync-error&quot;);
&gt; &gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Was this meant for debug purpose or is it useful upstream?
&gt; 
&gt; It was meant for debug, but it could be useful upstream. I&apos;ll fix it.

Done in r264296.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671027</commentid>
    <comment_count>21</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-07-13 08:16:53 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #18)
&gt; Comment on attachment 403957 [details]
&gt; Patch
&gt; 
&gt; I have added a couple of comments which you may want to address in
&gt; a follow-up patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403957&amp;action=review
&gt; 
&gt; &gt; Source/cmake/FindThunder.cmake:10
&gt; &gt; +#     True if the requested version of gcrypt was found
&gt; 
&gt; Surely you meant to do s/gcrypt/Thunder/ here (and in the lines below).

Done in r264300.

&gt; &gt; Source/cmake/FindThunder.cmake:50
&gt; &gt; +)
&gt; 
&gt; Also, is there any reason why this is not using an imported target?

Nope, I just used GCrypt one as template as comment above suggests :) . I guess it can be done later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671047</commentid>
    <comment_count>22</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-07-13 09:19:12 -0700</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #21)
&gt; (In reply to Adrian Perez from comment #18)
&gt; &gt; Comment on attachment 403957 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I have added a couple of comments which you may want to address in
&gt; &gt; a follow-up patch.
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=403957&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/cmake/FindThunder.cmake:10
&gt; &gt; &gt; +#     True if the requested version of gcrypt was found
&gt; &gt; 
&gt; &gt; Surely you meant to do s/gcrypt/Thunder/ here (and in the lines below).
&gt; 
&gt; Done in r264300.

Neat, thanks!

&gt; &gt; &gt; Source/cmake/FindThunder.cmake:50
&gt; &gt; &gt; +)
&gt; &gt; 
&gt; &gt; Also, is there any reason why this is not using an imported target?
&gt; 
&gt; Nope, I just used GCrypt one as template as comment above suggests :) . I
&gt; guess it can be done later.

Sure, we can convert it to use imported targets later on.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402635</attachid>
            <date>2020-06-24 04:49:02 -0700</date>
            <delta_ts>2020-06-24 09:35:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>163618</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlNjA2Yzg2NGViNjcuLjAy
OTdiNzM5ZDQyZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA2LTI0ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA2LTE4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzb21lIHZlc3RpZ2VzIG9mIHRoZSAz
Mi1iaXQgUGx1Z2luIFByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZmZmNzFkY2NkZjYxLi5lNWY2MzYzZGEyYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTcgQEAKKzIwMjAtMDYtMjQgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8
Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXVtFTUVdW09wZW5DRE1d
IEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIEJveFB0ci5oIHRoYXQgaW5jbHVkZXMgQm94UHRyPFQ+
IGFzIGFsaWFzIG9mCisgICAgICAgIEJveDxzdGQ6OnVuaXF1ZV9wdHI8VD4+LiBXZSBkaXNjdXNz
ZWQgYWJvdXQgdGhpcyBjbGFzcyBvbiBidWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OSBhbmQgd2UgYWdyZWVkIG9uCisgICAgICAgIHRoaXMg
YWxpYXMgYmVpbmcgdGhlIGJlc3QgaWRlYS4gQXBhcnQgZnJvbSB0aGUgYWxpYXMgSSdtIGFkZGlu
ZyBhCisgICAgICAgIGNvdXBsZSBvZiBoZWxwZXJzIGxpa2UgYSBjcmVhdGUgZnVuY3Rpb24gYW5k
IHRoZSBvcGVyYXRvcj09LgorCisgICAgICAgIFRoaXMgYWxzbyBpbmNsdWRlcyBzb21lIGJpdHMg
bmVlZGVkIHRvIGJ1aWxkIHRoZSBPcGVuQ0RNIHN1cHBvcnQuCisKKyAgICAgICAgVGVzdHM6IEJv
eFB0ciBBUEkgdGVzdHMgYWRkZWQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQm94UHRyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpC
b3hQdHJEZWxldGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKFdURjo6Y3JlYXRlQm94
UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAgICAgICogd3RmL0NNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5oOgorCisyMDIwLTA1LTI2ICBY
YWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dURl0gSW1wbGVtZW50IG5ldyBCb3hQdHIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8g
aG9sZCBDLWxpa2UgcG9pbnRlciBvYmplY3RzIGluCisgICAgICAgIHNoYXJhYmxlIHdheSB0aGF0
IGFyZSBub3QgcmVmIGNvdW50ZWQgYW5kIHRoYXQgcmVxdWlyZSBhIGN1c3RvbQorICAgICAgICBk
ZWxldGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0JveFB0ci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Qm94UHRyRGVsZXRlcjo6
b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChXVEY6OkJveFB0cjo6Qm94UHRyKToKKyAgICAg
ICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCb3hQdHI6OmdldCBj
b25zdCk6CisgICAgICAgIChXVEY6OkJveFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Qm94UHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvciE9IGNvbnN0
KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV1RG
OjpCb3hQdHI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpCb3hQdHI6OkRh
dGE6OkRhdGEpOgorICAgICAgICAoV1RGOjpCb3hQdHI6OkRhdGE6On5EYXRhKToKKyAgICAgICAg
KFdURjo6Qm94UHRyOjpEYXRhOjpvcGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV1RGOjpCb3hQ
dHI6OkRhdGE6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKwogMjAyMC0wNi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXVEZdIEVuc3VyZSBBU0NJSUxpdGVyYWwgaXMgQVNDSUkgY2hhcmFjdGVycyBh
dCBjb21waWxlIHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDgzZmFjMjk3NzA0OC4uMmQ2NzNjMDhkZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTI1Nyw2ICsyNTcsNyBAQAogCQkwRjhGMkI5MDE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRp
b25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOUIxNzJGMjU5
NDAwN0RCREE1IC8qIENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25N
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMyNzRBMUMxN0Y0QjcwMENG
NjU2NCAvKiBCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2NiAvKiBC
b3hQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94UHRyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTQ5NTgzMUM1NzFDQzkwMDQxM0E0OCAvKiBPcmRl
ck1ha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9yZGVyTWFrZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzEyMENCNEI3NzAwNDc5NjM1IC8q
IERlYnVnSGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z0hlYXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzIyMENCNEI3NzAwNDc5NjM1
IC8qIERlYnVnSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
ZWJ1Z0hlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTUzLDYgKzk1NCw3
IEBACiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJ
CQkJMEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNlLmggKi8sCiAJCQkJ
MEY5MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTBGOTMyNzRBMUMxN0Y0
QjcwMENGNjU2NiAvKiBCb3hQdHIuaCAqLywKIAkJCQk3QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYg
LyogQnJpZ2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVT
b3J0LmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxs
b2NhdG9yLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Cb3hQdHIuaCBiL1NvdXJj
ZS9XVEYvd3RmL0JveFB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uZTRhNTIzNDNlNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQm94UHRy
LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQm94UHRyRGVsZXRlciB7CisgICAgdm9pZCBv
cGVyYXRvcigpKFQqKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCisjZGVm
aW5lIFdURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIodHlwZU5hbWUsIGRlbGV0ZXJGdW5jKSAgICAg
ICAgXAorICAgIHRlbXBsYXRlPD4gc3RydWN0IEJveFB0ckRlbGV0ZXI8dHlwZU5hbWU+ICAgICAg
ICAgIFwKKyAgICB7IFwKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpICh0eXBlTmFtZSogcHRyKSBj
b25zdCBcCisgICAgICAgIHsgXAorICAgICAgICAgICAgZGVsZXRlckZ1bmMocHRyKTsgXAorICAg
ICAgICB9IFwKKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQm94UHRyID0g
Qm94PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj47CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitCb3hQdHI8VD4gY3JlYXRlQm94UHRyKFQqIHB0cikKK3sKKyAgICByZXR1cm4g
Qm94PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj46OmNyZWF0ZShwdHIpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveFB0cjxU
PiYgbGhzLCBjb25zdCBCb3hQdHI8VD4mIHJocykKK3sKKyAgICBpZiAoIWxocyAmJiAhcmhzKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbGhzIHx8ICFyaHMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbGhzLT5nZXQoKSAmJiAhcmhzLT5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWxocy0+Z2V0KCkgfHwgIXJocy0+Z2V0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAqbGhzID09ICpyaHM7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmNyZWF0ZUJveFB0cjsKK3VzaW5nIFdURjo6
Qm94UHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMjRhMDlmMTFhNzEuLmZhNWNmMTBjOGY4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdURl9QVUJMSUNf
SEVBREVSUwogICAgIEJsb29tRmlsdGVyLmgKICAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94
LmgKKyAgICBCb3hQdHIuaAogICAgIEJyaWdhbmQuaAogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1
bXBQb2ludGVyQWxsb2NhdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RW5hYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IGY3MGNmYzBj
NDcxNC4uNDAzMmEyMmJmZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTI1Nyw2ICsy
NTcsMTAgQEAKICNkZWZpbmUgRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSAwCiAjZW5kaWYKIAorI2lm
ICFkZWZpbmVkKEVOQUJMRV9PUEVOQ0RNKQorI2RlZmluZSBFTkFCTEVfT1BFTkNETSAwCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9GQVNUX0pJVF9QRVJNSVNTSU9OUykKICNkZWZpbmUg
RU5BQkxFX0ZBU1RfSklUX1BFUk1JU1NJT05TIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRjODQ2
MWNmMDk1Zi4uMmQ4YzM0MTdlMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgxIEBACisyMDIw
LTA2LTI0ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQgT3BlbkNETSBzdXBw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBs
ZW1lbnRlZCB0aGUgT3BlbkNETSBzdXBwb3J0IGluIHRoZSBDRE1PcGVuQ0RNIGFuZAorICAgICAg
ICBDRE1Qcm94eU9wZW5DRE0gcmVsYXRlZCBjbGFzc2VzLiBDRE1PcGVuQ0RNIGNsYXNzZXMgY2hl
Y2sgZm9yCisgICAgICAgIFdpZGV2aW5lIHN1cHBvcnQgaW4gT3BlbkNETSBhbmQgZ2x1ZXMgdGhl
IEphdmFTY3JpcHQgQVBJIHRvIHRoZQorICAgICAgICBPcGVuQ0RNL1RodW5kZXIgZnJhbWV3b3Jr
LiBCdWlsZGluZyB0aGlzIGlzIG9wdGlvbmFsIGFuZCAtLW9wZW5jZG0KKyAgICAgICAgcGFyYW1l
dGVyIG5lZWRzIHRvIGJlIHBhc3NlZCB0byBidWlsZC13ZWJraXQgdG8gZ2V0IGl0LgorCisgICAg
ICAgIENETVByb3h5IHJlbGF0ZWQgbmVlZGVkIGNoYW5nZXMgYmVjYXVzZSBvZiBzZXZlcmFsIHJl
YXNvbnMuIEZpcnN0CisgICAgICAgIGlzIHRoYXQgS2V5IHdhcyBjb25zaWRlcmluZyBvbmx5IGEg
VmVjdG9yPHVpbnQ4X3Q+IGFzIGEgdHlwZSBhbmQKKyAgICAgICAgT3BlbkNETSBoYXMgc2Vzc2lv
biBvYmplY3RzLiBLZXkgaXMgYWxzbyByZW5hbWVkIHRvIEtleUhhbmRsZSBhcworICAgICAgICB0
aGlzIG5hbWUgcmVmbGVjdHMgaW4gYSBiZXR0ZXIgd2F5IHRoZSBwdXJwb3NlIG9mIHRoZSBjbGFz
cy4gVGhpcworICAgICAgICBibGVlZHMgb3V0IHRvIGFsbCBDRE1Qcm94eSByZWxhdGVkIGNsYXNz
ZXMuIEl0IGFsc28gZ2V0cyBhCisgICAgICAgIGNyZWF0aW9uVGltZSB0byBiZSBhYmxlIHRvIG1l
cmdlIEtleUhhbmRsZXMgdGhhdCB3YXMgbm90CisgICAgICAgIGNvbnNpZGVyZWQuIEtleVN0b3Jl
IGdldHMgc3VwcG9ydCBmb3IgbWVyZ2Ugc3RyYXRlZ2llcworICAgICAgICAoQ2xlYXJLZXkgcmVt
YWlucyBhcyBOb09wIGFuZCBPcGVuQ0RNIGJlY29tZXMKKyAgICAgICAgUmVwbGFjZUlmTmV3ZXIp
LiBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSBnZXRzIHN1cHBvcnQgdG8gcmVtb3ZlCisgICAgICAg
IGl0c2VsZiBmcm9tIHRoZSBDRE1TZXNzaW9uUHJveHkuIFRoZXJlIGlzIGFsc28gdGhlIHN1cHBv
cnQgZm9yIGEKKyAgICAgICAgc2h1dGRvd24gdG8gb3ZlcmNvbWUgYSBsaW1pdGF0aW9uIG9mIE9w
ZW5DRE0gd2l0aCB0aGUgc2Vzc2lvbnMgYXMKKyAgICAgICAgdGhlIGdhcmJhZ2UgY29sbGVjdG9y
IGFycml2ZXMgbGF0ZSBhbmQgT3BlbkNETSBjYW4ndCBoYW5kbGUgc28KKyAgICAgICAgbWFueSBz
ZXNzaW9ucywgd2hpY2ggY2F1c2VzIGZhaWx1cmVzICh0aGlzIGlzIG9wdCBpbiB0aHJ1IGFuIGVu
dgorICAgICAgICB2YXIgc2luY2UgaXQgd291bGQgbWFrZSB0aGUgSlMgb2JqZWN0cyBjcmlwcGxl
ZCBhbmQgY2FuIGNyZWF0ZQorICAgICAgICBpc3N1ZXMgaWYgdGhlIG9iamVjdHMgZ2V0IG1vcmUg
aW50ZXJhY3Rpb25zKS4KKworICAgICAgICBSZWdhcmRpbmcgQ2xlYXJLZXksIHdlIGFkYXB0IHRo
ZSBjaGFuZ2VzIHRvIHRoZSBDRE1Qcm94eSBjbGFzc2VzCisgICAgICAgIGFuZCBkZS1jYWJsZSBw
cm90ZWN0aW9uIHN5c3RlbSBmcm9tIHRoZSBkZWNyeXB0b3JzIGFzIHRoZSBPcGVuQ0RNCisgICAg
ICAgIGRlY3J5cHRvciBjb3VsZCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBzeXN0ZW0uCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBZb3VUdWJlIFRWIDIwMTkgdGVzdHMgYXJlIGdyZWVuLgorCisgICAg
ICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUlu
c3RhbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5
cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OktleUhhbmRsZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlIYW5kbGU6OmNyZWF0aW9uVGltZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleUhhbmRsZTo6dGFrZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5SGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnNl
dE1lcmdlU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5zS2V5
SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eVN0b3JlOjpyZXBsYWNlSWZOZXdlck1lcmdlU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6
a2V5SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9y
S2V5SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFi
bGVVbmxvY2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXlI
YW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmdldE9yV2FpdEZvcktl
eVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5
OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25Qcm94eTo6Z2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5
SGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjpj
cmVhdGlvblRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0YXR1
c0N1cnJlbnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5k
bGU6OktleUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6S2V5U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5U3RvcmU6Om5vT3BNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByb3h5OjpzZXRNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojpz
aHV0ZG93bik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFuY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnNodXRkb3duKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OkNETUluc3RhbmNl
UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlU2Vzc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzaHV0ZG93bik6CisgICAgICAgICog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc09wZW5DRE1SYW5rZWQpOgorICAgICAgICAo
V2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVWZWN0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3Rvcmllcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcDog
QWRkZWQuCisgICAgICAgIChvcGVuQ0RNTGljZW5zZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
aW5pdERhdGFNRDUpOgorICAgICAgICAoV2ViQ29yZTo6c2Vzc2lvbkxvYWRGYWlsdXJlRnJvbU9w
ZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0
b3J5T3BlbkNETTo6Y3JlYXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9y
eU9wZW5DRE06OnN1cHBvcnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNRmFjdG9yeU9wZW5DRE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVz
dG5lc3NlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlz
dGluY3RpdmVJZGVudGlmaWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByaXZhdGVPcGVuQ0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVy
c0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJpdmF0ZU9wZW5DRE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVS
ZXNwb25zZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2Fu
aXRpemVTZXNzaW9uSWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNOjpDRE1JbnN0YW5jZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VP
cGVuQ0RNOjppbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VSZXNwb25zZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2hhbGxlbmdlR2VuZXJhdGVkQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleVVwZGF0ZWRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlzVXBkYXRlRG9uZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmVy
cm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TTo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6c2Vzc2lvbkZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjbG9zZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktleVVzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmguCisgICAgICAg
IChXZWJDb3JlOjpPcGVuQ0RNOjpPQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNy
eXB0aW9uS2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5T3BlbkNETS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlPcGVu
Q0RNOjpnZXREZWNyeXB0aW9uU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eU9wZW5DRE06OmRlY3J5cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGls
aXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXREYXRhOjpJbml0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbml0RGF0YTo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJFTUVVdGlsaXRpZXM6OmlzV2lkZXZpbmVLZXlTeXN0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2Ns
YXNzX2luaXQpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAodHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh0cmFu
c2Zvcm1JblBsYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2luaXQp
OgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAg
ICAgICAgKGNkbVByb3h5QXR0YWNoZWQpOgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0
cmVhbWVyLmg6IEFkZGVkLgorCiAyMDIwLTA2LTIxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb252ZXJ0IG11Y2ggb2YgdGhlIFNWRyBzdHJpbmcgcGFyc2luZyBj
b2RlIHRvIHVzZSBPcHRpb25hbCBiYXNlZCByZXR1cm4gdmFsdWVzIHJhdGhlciB0aGFuIG91dC1w
YXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA5NjNmMGMxYmQ1YmMuLjI2YTA2NmJlYWE5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNjAyLDMgKzE2MDIsNyBAQCBzZXQoV2ViQ29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgJHtXZWJDb3JlX0RFUklWRURfU09VUkNFU19E
SVJ9L1dlYktpdEZvbnRGYW1pbHlOYW1lcy5oCiAgICAgJHtXZWJDb3JlX0RFUklWRURfU09VUkNF
U19ESVJ9L1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaAogKQorCitpZiAoRU5BQkxF
X09QRU5DRE0pCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETU9wZW5DRE1UeXBlcy5oKQorZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCAxNjA5ZTkxYmMwZDQu
LjFmYTQ0NWZmYTFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpA
QCAtMTgwLDYgKzE4MCwyNyBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICAgICAke0xJQkdDUllQVF9MSUJSQVJJRVN9
IC1sZ3BnLWVycm9yCiAgICAgKQorCisgICAgaWYgKEVOQUJMRV9PUEVOQ0RNKQorICAgICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL29wZW5jZG0iCisgICAg
ICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVD
VE9SSUVTCisgICAgICAgICAgICAke09QRU5DRE1fSU5DTFVERV9ESVJTfQorICAgICAgICApCisK
KyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7T1BF
TkNETV9MSUJSQVJJRVN9CisgICAgICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
T3BlbkNETS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlPcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICAgICApCisg
ICAgZW5kaWYgKCkKKwogZW5kaWYgKCkKIAogaWYgKFVTRV9DQUlSTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDI0ZDIwYjY0NjhiYS4uZGRmN2EwNGZkYzA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTEyMyw2ICsx
MjMsMTEgQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICByZXR1
cm4gbV9zZWdtZW50c1swXS5zZWdtZW50LT5kYXRhKCk7CiB9CiAKK2NvbnN0IHVpbnQ4X3QqIFNo
YXJlZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIoKSBjb25zdAoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKCkpOworfQorCiBTaGFyZWRCdWZmZXJEYXRh
VmlldyBTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDBhOGZlNzAxYjE5Yi4uNTFlZTZkNGZjMTU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTA2LDYgKzEwNiw3IEBAIHB1
YmxpYzoKICAgICAvLyBJdGVyYXRlIHRoZSBzZWdtZW50cyB1c2luZyBiZWdpbigpIGFuZCBlbmQo
KSBpbnN0ZWFkLgogICAgIC8vIEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1
bmN0aW9uIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAgICAg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGFBc1VJbnQ4
UHRyKCkgY29uc3Q7CiAKICAgICAvLyBDcmVhdGVzIGFuIEFycmF5QnVmZmVyIGFuZCBjb3BpZXMg
dGhpcyBTaGFyZWRCdWZmZXIncyBjb250ZW50cyB0byB0aGF0CiAgICAgLy8gQXJyYXlCdWZmZXIg
d2l0aG91dCBtZXJnaW5nIHNlZ21lbnRlZCBidWZmZXJzIGludG8gYSBmbGF0IGJ1ZmZlci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3Rh
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5j
ZS5oCmluZGV4IDM1MTc4ZWYzNjA2Zi4uODc2Y2Q2NmFkMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKQEAgLTc1LDYg
Kzc1LDkgQEAgcHVibGljOgogICAgICAgICBDbGVhcktleSwKICAgICAgICAgRmFpclBsYXlTdHJl
YW1pbmcsCiAgICAgICAgIFJlbW90ZSwKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICAgICAgT3Bl
bkNETSwKKyNlbmRpZgogICAgIH07CiAgICAgdmlydHVhbCBJbXBsZW1lbnRhdGlvblR5cGUgaW1w
bGVtZW50YXRpb25UeXBlKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1PcGVuQ0RNVHlwZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETU9wZW5DRE1UeXBlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzBiZTFjNDNkZWQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5
cGVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSA8b3Blbl9jZG0u
aD4KKyNpbmNsdWRlIDx3dGYvQm94UHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitXVEZfREVG
SU5FX0JPWFBUUl9ERUxFVEVSKE9wZW5DRE1TZXNzaW9uLCBvcGVuY2RtX2Rlc3RydWN0X3Nlc3Np
b24pCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShP
UEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNUHJveHkuY3BwCmluZGV4IDFjNDYyZjBiNjU0My4uZDE5YWMwZTdmMTg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTkxLDM1ICs5Miw4MyBAQCBzdGF0aWMgU3RyaW5nIHZlY3RvclRv
SGV4U3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjKQogCiB9IC8vIG5hbWVzcGFjZSB7
fQogCi1TdHJpbmcgS2V5OjppZEFzU3RyaW5nKCkgY29uc3QKK1N0cmluZyBLZXlIYW5kbGU6Omlk
QXNTdHJpbmcoKSBjb25zdAogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9I
ZXhTdHJpbmcobV9pZCksICJdIik7CiB9CiAKLVN0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBj
b25zdAorU3RyaW5nIEtleUhhbmRsZTo6dmFsdWVBc1N0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0b3JUb0hleFN0cmluZyhtX3ZhbHVlKSwgIl0iKTsKKyAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8dWludDhfdD4+KG1fdmFsdWUpKSB7
CisgICAgICAgIGF1dG8ga2V5RGF0YVZhbHVlID0gV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Piht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0b3JUb0hleFN0cmlu
ZyhrZXlEYXRhVmFsdWUpLCAiXSIpOworICAgIH0KKworICAgIHJldHVybiAiW29wYXF1ZSBrZXkg
dmFsdWVdIl9zOworfQorCitTdHJpbmcgS2V5SGFuZGxlOjpjcmVhdGlvblRpbWVBc1N0cmluZygp
IGNvbnN0Cit7CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOworICAgIG1fY3JlYXRpb25U
aW1lLmR1bXAoc3RyZWFtKTsKKyAgICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7Cit9CisKK2Jv
b2wgS2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlhbnQm
JiB2YWx1ZSkKK3sKKyAgICBpZiAobV92YWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICBtX3ZhbHVl
ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgS2V5SGFuZGxlOjpvcGVyYXRvcj0oY29uc3QgS2V5SGFuZGxl
JiBvdGhlcikKK3sKKyAgICBtX2lkID0gb3RoZXIubV9pZDsKKyAgICBtX3ZhbHVlID0gb3RoZXIu
bV92YWx1ZTsKKyAgICBtX3N0YXR1cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fY3JlYXRpb25U
aW1lID0gb3RoZXIubV9jcmVhdGlvblRpbWU7Cit9CisKK3ZvaWQgS2V5U3RvcmU6OnNldE1lcmdl
U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSBzdHJhdGVneSkKK3sKKyAgICBtX21lcmdlU3RyYXRlZ3kg
PSBzdHJhdGVneTsKKyAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7CisgICAgY2FzZSBNZXJnZVN0cmF0
ZWd5OjpOb09wOgorICAgICAgICBtX21lcmdlU3RyYXRlZ3lGdW5jdGlvbiA9IG5vT3BNZXJnZVN0
cmF0ZWd5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lcmdlU3RyYXRlZ3k6OlJlcGxhY2VJ
Zk5ld2VyOgorICAgICAgICBtX21lcmdlU3RyYXRlZ3lGdW5jdGlvbiA9IHJlcGxhY2VJZk5ld2Vy
TWVyZ2VTdHJhdGVneTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotYm9vbCBLZXlT
dG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
Ym9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25z
dAogewotICAgIHJldHVybiBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5
PiYgc3RvcmVkS2V5KSB7CisgICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0
IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICpzdG9yZWRL
ZXkgPT0ga2V5SUQ7CiAgICAgfSkgIT0gV1RGOjpub3RGb3VuZDsKIH0KIAogdm9pZCBLZXlTdG9y
ZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVyKQogeworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5
cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMo
KSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikgewogICAgICAgICAvLyBOT1RF
OiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMg
YSBrZXkgSUQKICAgICAgICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRh
dGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CiAgICAgICAgIC8vIERv
bid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgotICAgICAgICBpZiAobV9r
ZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0
dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgc2l6
ZV90IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAo
Y29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgeyByZXR1cm4gKmtleSA9PSAqc3Rv
cmVkS2V5OyB9KTsKKyAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPT0gV1RG
Ojpub3RGb3VuZCkKICAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxheWVy
cywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgotICAgICAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBkaWZm
ZXJlbnQgZGF0YSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIG1lcmdpbmcga2V5cyB3aXRoIHRoZSBzYW1lIElEIik7CisgICAgICAgICAg
ICBtX21lcmdlU3RyYXRlZ3lGdW5jdGlvbihtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eF0sIGtleSk7CisgICAgICAgIH0KICAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xMjks
MTUgKzE3OCwxNSBAQCB2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIp
CiAjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAogfQogCi1DRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQoKSBjb25zdAorQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFsbEtleXNBcyhDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXMpIGNvbnN0CiB7CiAgICAgQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gY29udmVydFRvSlNLZXlTdGF0
dXNWZWN0b3IoKTsKICAgICBmb3IgKGF1dG8mIGtleVN0YXR1cyA6IGtleVN0YXR1c1ZlY3RvcikK
LSAgICAgICAga2V5U3RhdHVzLnNlY29uZCA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVz
OjpSZWxlYXNlZDsKKyAgICAgICAga2V5U3RhdHVzLnNlY29uZCA9IHN0YXR1czsKICAgICByZXR1
cm4ga2V5U3RhdHVzVmVjdG9yOwogfQogCi1ib29sIEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxS
ZWZQdHI8S2V5Pj4mJiBuZXdLZXlzKQorYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVm
UHRyPEtleUhhbmRsZT4+JiYgbmV3S2V5cykKIHsKICAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdl
ID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBuZXdLZXlzKSB7CkBAIC0xNDcsMTYgKzE5
NiwxOCBAQCBib29sIEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJiBuZXdL
ZXlzKQogICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKIH0KIAotYm9vbCBLZXlTdG9yZTo6
YWRkKFJlZlB0cjxLZXk+JiYga2V5KQorYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXlIYW5k
bGU+JiYga2V5KQogewogICAgIGJvb2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxzZTsKLSAgICBzaXpl
X3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChj
b25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgc2l6ZV90IGtleVdpdGhNYXRjaGlu
Z0tleUlESW5kZXggPSBtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleUhh
bmRsZT4mIHN0b3JlZEtleSkgewogICAgICAgICByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5Owog
ICAgIH0pOwogCiAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggIT0gV1RGOjpub3RG
b3VuZCkgewogICAgICAgICBhdXRvJiBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IG1fa2V5c1trZXlX
aXRoTWF0Y2hpbmdLZXlJREluZGV4XTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2V5V2l0aE1h
dGNoaW5nS2V5SUQtPnZhbHVlKCkgPT0ga2V5LT52YWx1ZSgpLCAiQ2FuIHRoaXMgcmVhbGx5IGhh
cHBlbj8iKTsKKyAgICAgICAgZGlkU3RvcmVDaGFuZ2UgPSBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9
PSBrZXk7CisgICAgICAgIGlmIChkaWRTdG9yZUNoYW5nZSkKKyAgICAgICAgICAgIGtleVdpdGhN
YXRjaGluZ0tleUlEID0ga2V5OwogICAgIH0gZWxzZSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAlcyBnZXR0aW5nIGFkZGVkIHRvIGtleSBzdG9y
ZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsgICAgICAKICAgICAgICAgbV9r
ZXlzLmFwcGVuZChrZXkpOwpAQCAtMTY4LDcgKzIxOSw3IEBAIGJvb2wgS2V5U3RvcmU6OmFkZChS
ZWZQdHI8S2V5PiYmIGtleSkKICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBub3QgYXMgcGF0aG9s
b2dpY2FsIGFzIGl0IG1heSBzZWVtLCBmb3IgYWxsCiAgICAgICAgIC8vIHByYWN0aWNhbCBwdXJw
b3NlcyB0aGUgc3RvcmUgaGFzIGEgbWF4aW11bSBvZiAyIGtleXMuCiAgICAgICAgIHN0ZDo6c29y
dChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVuZCgpLAotICAgICAgICAgICAgW10oY29uc3QgUmVm
UHRyPEtleT4mIGEsIGNvbnN0IFJlZlB0cjxLZXk+JiBiKSB7CisgICAgICAgICAgICBbXShjb25z
dCBSZWZQdHI8S2V5SGFuZGxlPiYgYSwgY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIGIpIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gKmEgPCAqYjsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAg
LTE4Myw3ICsyMzQsNyBAQCB2b2lkIEtleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBL
ZXlTdG9yZSYgb3RoZXIpCiAgICAgICAgIHJlbW92ZShrZXkpOwogfQogCi1ib29sIEtleVN0b3Jl
OjpyZW1vdmUoY29uc3QgUmVmUHRyPEtleT4mIGtleSkKK2Jvb2wgS2V5U3RvcmU6OnJlbW92ZShj
b25zdCBSZWZQdHI8S2V5SGFuZGxlPiYga2V5KQogewogICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0g
ZmFsc2U7CiAKQEAgLTIwNCwxMSArMjU1LDE4IEBAIGJvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25z
dCBSZWZQdHI8S2V5PiYga2V5KQogICAgIHJldHVybiBzdG9yZUNoYW5nZWQ7CiB9CiAKLWNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgS2V5U3RvcmU6OmtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIGNvbnN0Cit2b2lkIEtleVN0b3JlOjpyZXBsYWNlSWZOZXdlck1lcmdlU3RyYXRl
Z3koUmVmUHRyPEtleUhhbmRsZT4mIGRlc3RpbmF0aW9uLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxl
PiYgb3JpZ2luKQoreworICAgIEFTU0VSVCgqZGVzdGluYXRpb24gPT0gKm9yaWdpbik7CisgICAg
aWYgKGRlc3RpbmF0aW9uLT5tX2NyZWF0aW9uVGltZSA8IG9yaWdpbi0+bV9jcmVhdGlvblRpbWUp
CisgICAgICAgIGRlc3RpbmF0aW9uID0gb3JpZ2luOworfQorCitjb25zdCBSZWZQdHI8S2V5SGFu
ZGxlPiYgS2V5U3RvcmU6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAog
ewogICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7CiAgICAgICAgIGlmICgqa2V5
ID09IGtleUlEKQotICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKKyAgICAgICAgICAg
IHJldHVybiBrZXk7CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJr
ZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7CkBAIC0yMzgsMTEgKzI5NiwxMSBA
QCB2b2lkIENETVByb3h5OjpzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSkK
ICAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBDRE1Qcm94
eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK1JlZlB0cjxL
ZXlIYW5kbGU+IENETVByb3h5OjprZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29u
c3QKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKICAgICBBU1NF
UlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7Ci0gICAgcmV0dXJuIG1fa2V5U3Rv
cmUua2V5VmFsdWUoa2V5SUQpOworICAgIHJldHVybiBtX2tleVN0b3JlLmtleUhhbmRsZShrZXlJ
RCk7CiB9CiAKIHZvaWQgQ0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKQEAg
LTI2MSw3ICszMTksNyBAQCB2b2lkIENETVByb3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNv
bnN0CiAgICAgbV9pbnN0YW5jZS0+c3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKIH0KIAotT3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleUlEKSBjb25zdAorT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IENETVByb3h5
Ojp0cnlXYWl0Rm9yS2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAg
ICAgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5n
IHdlIGhhdmUgc3RvcHBlZCB3YWl0aW5nIGZvciBhIGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMg
b25seSBnZXQKQEAgLTI4MSwzMiArMzM5LDQxIEBAIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkKIAog
ICAgIGlmICh3YXNLZXlSZWNlaXZlZCkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJv
eHkgLSBzdWNjZXNzZnVsbHkgd2FpdGVkIGZvciBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmlu
ZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4ga2V5VmFsdWUoa2V5SUQp
OworICAgICAgICBSZWZQdHI8S2V5SGFuZGxlPiBoYW5kbGUgPSBrZXlIYW5kbGUoa2V5SUQpOwor
ICAgICAgICByZXR1cm4gbWFrZU9wdGlvbmFsKGhhbmRsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAg
ICB9CiAgICAgCiAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVzIG5vdCBh
dmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOwogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWJvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZVVu
bG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Citib29sIENETVByb3h5
OjprZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewog
ICAgIHJldHVybiBtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpOwogfQogCi1ib29sIENE
TVByb3h5OjprZXlBdmFpbGFibGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QK
K2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25z
dAogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwogICAgIHJldHVy
biBrZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7CiB9CiAKLU9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdAorT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IENETVByb3h5OjpnZXRPcldhaXRG
b3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsKICAgICBpZiAoIWtl
eUF2YWlsYWJsZShrZXlJRCkpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IGtl
eSBjYWNoZSBkb2VzIG5vdCBjb250YWluIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtl
eUlEKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiB0cnlXYWl0Rm9yS2V5KGtleUlE
KTsKKyAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JLZXlIYW5kbGUoa2V5SUQpOwogICAgIH0KIAot
ICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7CisgICAgUmVmUHRyPEtleUhhbmRsZT4gaGFuZGxl
ID0ga2V5SGFuZGxlKGtleUlEKTsKKyAgICByZXR1cm4gbWFrZU9wdGlvbmFsKGhhbmRsZS5yZWxl
YXNlTm9uTnVsbCgpKTsKK30KKworT3B0aW9uYWw8S2V5SGFuZGxlVmFsdWVWYXJpYW50PiBDRE1Q
cm94eTo6Z2V0T3JXYWl0Rm9yS2V5VmFsdWUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QK
K3sKKyAgICBpZiAoYXV0byBrZXlIYW5kbGUgPSBnZXRPcldhaXRGb3JLZXlIYW5kbGUoa2V5SUQp
KQorICAgICAgICByZXR1cm4gbWFrZU9wdGlvbmFsKCgqa2V5SGFuZGxlKS0+dmFsdWUoKSk7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdGFy
dGVkV2FpdGluZ0ZvcktleSgpCkBAIC0zNjAsNiArNDI3LDE4IEBAIHZvaWQgQ0RNSW5zdGFuY2VQ
cm94eTo6dHJhY2tTZXNzaW9uKGNvbnN0IENETUluc3RhbmNlU2Vzc2lvblByb3h5JiBzZXNzaW9u
KQogICAgIG1fc2Vzc2lvbnMuYWRkKHNlc3Npb24pOwogfQogCitDRE1JbnN0YW5jZVNlc3Npb25Q
cm94eTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoQ0RNSW5zdGFuY2VQcm94eSYgaW5zdGFuY2Up
CisgICAgOiBtX2luc3RhbmNlKG1ha2VXZWFrUHRyKGluc3RhbmNlKSkKK3sKK30KKwordm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6Z2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KCkKK3sK
KyAgICBpZiAoIW1faW5zdGFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luc3RhbmNlLT5y
ZW1vdmVTZXNzaW9uKCp0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IGYyYzNlMzRlZjU5MC4uNmMyZGU0
OTRlNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVByb3h5LmgKQEAgLTM0LDM1ICszNCw2MCBAQAogI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBl
cy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgS2V5IDogcHVibGlj
IFJlZkNvdW50ZWQ8S2V5PiB7Cit1c2luZyBLZXlJRFR5cGUgPSBWZWN0b3I8dWludDhfdD47Cit1
c2luZyBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQgPSBWYXJpYW50PAorICAgIFZlY3Rvcjx1aW50OF90
PgorI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgICwgQm94UHRyPE9wZW5DRE1TZXNzaW9uPgorI2Vu
ZGlmCis+OworCitjbGFzcyBLZXlIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
S2V5SGFuZGxlPiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXM7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0
YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBr
ZXlWYWx1ZSkKKyAgICBzdGF0aWMgUmVmUHRyPEtleUhhbmRsZT4gY3JlYXRlKEtleVN0YXR1cyBz
dGF0dXMsIEtleUlEVHlwZSYmIGtleUlELCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiBrZXlIYW5k
bGVWYWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMs
IFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBLZXlIYW5kbGUoc3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgV1RGTW92ZShrZXlI
YW5kbGVWYWx1ZSkpKTsKICAgICB9CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gaWRBc1NoYXJlZEJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1faWQuZGF0YSgpLCBt
X2lkLnNpemUoKSk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgeyByZXR1
cm4gbV92YWx1ZTsgfQorICAgIGJvb2wgdGFrZVZhbHVlSWZEaWZmZXJlbnQoS2V5SGFuZGxlVmFs
dWVWYXJpYW50JiYpOworCisgICAgY29uc3QgS2V5SURUeXBlJiBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KKyAgICBjb25zdCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CisgICAgY29uc3QgV2FsbFRpbWUmIGNyZWF0aW9uVGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3JlYXRpb25UaW1lOyB9CisgICAgYm9vbCBpc1N0YXR1c0N1cnJlbnRseVZhbGlk
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXR1cyA9PSBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1czo6VXNhYmxlIHx8IG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzOjpPdXRwdXRSZXN0cmljdGVkCisgICAgICAgICAgICB8fCBtX3N0YXR1cyA9PSBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0RG93bnNjYWxlZDsKKyAgICB9CiAKICAg
ICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0OwogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGNyZWF0aW9uVGltZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICB2
b2lkIG9wZXJhdG9yPShjb25zdCBLZXlIYW5kbGUmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBSZWZQdHI8S2V5SGFuZGxlPiYgb3RoZXIpIHsgQVNTRVJUKG90aGVyKTsgKnRoaXMgPSAqb3Ro
ZXI7IH0KIAogICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUg
SUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBr
Mi5tX2lkOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQotICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29u
c3QgS2V5ICZrKSB7IHJldHVybiBrID09IGtleUlEOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEtleSYgazEsIGNvbnN0IEtleSYgazIpCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBLZXlIYW5kbGUgJmsxLCBjb25zdCBLZXlIYW5kbGUgJmsyKSB7IHJldHVybiBr
MS5tX2lkID09IGsyLm1faWQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtl
eUhhbmRsZSAmaywgY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtl
eUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlJRFR5cGUmIGtleUlE
LCBjb25zdCBLZXlIYW5kbGUgJmspIHsgcmV0dXJuIGsgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgS2V5SGFuZGxlJiBrMSwgY29uc3QgS2V5SGFuZGxlJiBrMikK
ICAgICB7CiAgICAgICAgIC8vIEtleSBJRHMgYXJlIGNvbXBhcmVkIGFzIGZvbGxvd3M6IEZvciBr
ZXkgSURzIEEgb2YgbGVuZ3RoIG0gYW5kCiAgICAgICAgIC8vIEIgb2YgbGVuZ3RoIG4sIGFzc2ln
bmVkIHN1Y2ggdGhhdCBtIDw9IG4sIGxldCBBIDwgQiBpZiBhbmQgb25seQpAQCAtODQsMzEgKzEw
OSwzOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG51bVNlc3Npb25SZWZlcmVuY2VzKCkgY29u
c3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNl
czsgfQogICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKIAotICAgIEtleShLZXlTdGF0dXMgc3Rh
dHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUp
Ci0gICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFs
dWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorICAgIEtleUhhbmRsZShLZXlTdGF0dXMgc3RhdHVz
LCBLZXlJRFR5cGUmJiBrZXlJRCwgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiYga2V5SGFuZGxlVmFs
dWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1f
dmFsdWUoV1RGTW92ZShrZXlIYW5kbGVWYWx1ZSkpIHsgfQogCiAgICAgS2V5U3RhdHVzIG1fc3Rh
dHVzOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX3Zh
bHVlOworICAgIEtleUlEVHlwZSBtX2lkOworICAgIEtleUhhbmRsZVZhbHVlVmFyaWFudCBtX3Zh
bHVlOworICAgIFdhbGxUaW1lIG1fY3JlYXRpb25UaW1lIHsgV2FsbFRpbWU6Om5vdygpIH07CiAg
ICAgdW5zaWduZWQgbV9udW1TZXNzaW9uUmVmZXJlbmNlcyB7IDAgfTsKIH07CiAKIGNsYXNzIEtl
eVN0b3JlIHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3IgPSBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1c1ZlY3RvcjsKKyAgICBlbnVtIGNsYXNzIE1lcmdlU3RyYXRlZ3kg
eyBOb09wLCBSZXBsYWNlSWZOZXdlciB9OworICAgIHVzaW5nIE1lcmdlU3RyYXRlZ3lGdW5jdGlv
biA9IEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEtleUhhbmRsZT4mLCBjb25zdCBSZWZQdHI8S2V5SGFu
ZGxlPiYpPjsKIAotICAgIGJvb2wgY29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKLSAgICB2b2lkIG1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Ci0g
ICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIEtl
eVN0b3JlKE1lcmdlU3RyYXRlZ3kgbWVyZ2VTdHJhdGVneSA9IE1lcmdlU3RyYXRlZ3k6Ok5vT3Ap
IHsgc2V0TWVyZ2VTdHJhdGVneShtZXJnZVN0cmF0ZWd5KTsgfQorCisgICAgYm9vbCBjb250YWlu
c0tleUlEKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5
U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CiAg
ICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQotICAgIGJvb2wgYWRk
S2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOwotICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYp
OwotICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgYm9vbCBhZGRLZXlz
KFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJik7CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleUhh
bmRsZT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mKTsKICAg
ICBib29sIGhhc0tleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgpOyB9CiAgICAgdW5z
aWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KLSAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0OwotICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0Owor
ICAgIGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikg
Y29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1cykgY29uc3Q7CiAgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3Rh
dHVzVmVjdG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgc2V0TWVyZ2VTdHJhdGVneShNZXJnZVN0cmF0ZWd5
KTsKIAogICAgIGF1dG8gYmVnaW4oKSB7IHJldHVybiBtX2tleXMuYmVnaW4oKTsgfQogICAgIGF1
dG8gYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMuYmVnaW4oKTsgfQpAQCAtMTIwLDcgKzE1
MiwxMiBAQCBwdWJsaWM6CiAgICAgYXV0byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnJl
bmQoKTsgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gbV9rZXlzOworICAg
IHN0YXRpYyB2b2lkIG5vT3BNZXJnZVN0cmF0ZWd5KFJlZlB0cjxLZXlIYW5kbGU+JiwgY29uc3Qg
UmVmUHRyPEtleUhhbmRsZT4mKSB7IH0KKyAgICBzdGF0aWMgdm9pZCByZXBsYWNlSWZOZXdlck1l
cmdlU3RyYXRlZ3koUmVmUHRyPEtleUhhbmRsZT4mLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYp
OworCisgICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBtX2tleXM7CisgICAgTWVyZ2VTdHJh
dGVneSBtX21lcmdlU3RyYXRlZ3k7CisgICAgTWVyZ2VTdHJhdGVneUZ1bmN0aW9uIG1fbWVyZ2VT
dHJhdGVneUZ1bmN0aW9uOwogfTsKIAogY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKQEAgLTEyOSwy
MSArMTY2LDMwIEBAIGNsYXNzIENETUluc3RhbmNlUHJveHk7CiAvLyBmcm9tIGJhY2tncm91bmQg
dGhyZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4KIGNsYXNzIENETVByb3h5IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPENETVByb3h5PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBTZWNvbmRzIE1heEtleVdhaXRUaW1lU2Vjb25kcyA9IDVfczsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gN19zOwogCiAgICAgdmlydHVhbCB+
Q0RNUHJveHkoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtl
eVN0b3JlJiBuZXdLZXlTdG9yZSk7CiAgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVBy
b3h5Kik7CisgICAgdm9pZCBzZXRNZXJnZVN0cmF0ZWd5KEtleVN0b3JlOjpNZXJnZVN0cmF0ZWd5
IHN0cmF0ZWd5KSB7IG1fa2V5U3RvcmUuc2V0TWVyZ2VTdHJhdGVneShzdHJhdGVneSk7IH0KKwor
ICAgIHZvaWQgc2h1dGRvd24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CisgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OwotICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIGNvbnN0OwotICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiB0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OwotICAg
IE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIFJlZlB0cjxLZXlIYW5kbGU+IGtleUhhbmRsZShj
b25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBLZXlJ
RFR5cGUmKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IEtleUlE
VHlwZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPFJlZjxLZXlIYW5kbGU+PiB0cnlXYWl0Rm9yS2V5
SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPFJlZjxLZXlIYW5k
bGU+PiBnZXRPcldhaXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAg
T3B0aW9uYWw8S2V5SGFuZGxlVmFsdWVWYXJpYW50PiBnZXRPcldhaXRGb3JLZXlWYWx1ZShjb25z
dCBLZXlJRFR5cGUmKSBjb25zdDsKICAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29u
c3Q7CiAgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworICAgIGNvbnN0IENE
TUluc3RhbmNlUHJveHkqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQog
CiBwcml2YXRlOgogICAgIG11dGFibGUgTG9jayBtX2luc3RhbmNlTXV0ZXg7CkBAIC0xNzgsMTkg
KzIyNCwzNCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8Q0RN
UHJveHlGYWN0b3J5Kj4mIHJlZ2lzdGVyZWRGYWN0b3JpZXMoKTsKIH07CiAKK2NsYXNzIENETUlu
c3RhbmNlUHJveHk7CisKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvblByb3h5IDogcHVibGljIENE
TUluc3RhbmNlU2Vzc2lvbiwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vzc2lv
blByb3h5LCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBzaHV0ZG93bigpIHsgbV9pbnN0YW5jZS5jbGVhcigpOyB9CisgICAg
dm9pZCBnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIENE
TUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKKyAgICBjb25zdCBXZWFr
UHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0YW5jZTsgfQorCitwcml2YXRlOgorICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4g
bV9pbnN0YW5jZTsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9uIG1hbmFn
ZW1lbnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKIC8vIGZyb20gInJlYWwg
Q0RNIiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgotY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1Ymxp
YyBDRE1JbnN0YW5jZSB7CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3Rh
bmNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gewogcHVibGljOgot
ICAgIGV4cGxpY2l0IENETUluc3RhbmNlUHJveHkoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisg
ICAgZXhwbGljaXQgQ0RNSW5zdGFuY2VQcm94eShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgS2V5
U3RvcmU6Ok1lcmdlU3RyYXRlZ3kgbWVyZ2VTdHJhdGVneSA9IEtleVN0b3JlOjpNZXJnZVN0cmF0
ZWd5OjpOb09wKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAg
ICAgbV9jZG1Qcm94eSA9IENETVByb3h5RmFjdG9yeTo6Y3JlYXRlQ0RNUHJveHlGb3JLZXlTeXN0
ZW0oa2V5U3lzdGVtKTsKLSAgICAgICAgaWYgKG1fY2RtUHJveHkpCisgICAgICAgIGlmIChtX2Nk
bVByb3h5KSB7CiAgICAgICAgICAgICBtX2NkbVByb3h5LT5zZXRJbnN0YW5jZSh0aGlzKTsKKyAg
ICAgICAgICAgIG1fY2RtUHJveHktPnNldE1lcmdlU3RyYXRlZ3kobWVyZ2VTdHJhdGVneSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9rZXlTdG9yZS5zZXRNZXJnZVN0cmF0ZWd5KG1lcmdlU3RyYXRl
Z3kpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0Owog
CkBAIC0xOTksNyArMjYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20o
Y29uc3QgS2V5U3RvcmUmKTsKIAogICAgIC8vIE1lZGlhIHBsYXllciBxdWVyeSBtZXRob2RzIC0g
bWFpbiB0aHJlYWQgb25seS4KLSAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIGNvbnN0IFJl
ZlB0cjxDRE1Qcm94eT4mIHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBy
ZXR1cm4gbV9jZG1Qcm94eTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JLZXkoKSBj
b25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRvcnNXYWl0
aW5nRm9yS2V5ID4gMDsgfQogICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIp
IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9wbGF5ZXIgPSBwbGF5ZXI7IH0KIApAQCAtMjA3
LDYgKzI2OCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwog
ICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKIAorICAgIHZvaWQgcmVtb3ZlU2Vzc2lv
bihjb25zdCBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikgeyBtX3Nlc3Npb25zLnJl
bW92ZShzZXNzaW9uKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFs
bEtleXMoKTsKKyAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9zZXNzaW9ucykKKyAgICAg
ICAgICAgIHNlc3Npb24uc2h1dGRvd24oKTsKKyAgICAgICAgbV9zZXNzaW9ucy5jbGVhcigpOwor
ICAgICAgICBtX2NkbVByb3h5LT5zaHV0ZG93bigpOworICAgICAgICBtX2NkbVByb3h5ID0gbnVs
bHB0cjsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHRyYWNrU2Vzc2lvbihjb25zdCBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
aW5kZXggNjUzMjJlZDk5ZTk3Li4xNTEwMzQwYjc0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQog
CiAjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkNETVBy
b3h5Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJD
RE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkluaXREYXRhUmVnaXN0cnkuaCIKQEAgLTYzLDcg
KzY0LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25z
dCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpT
T046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRs
ZT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAg
IC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJz
ZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xp
Y2Vuc2UnIGZvcm1hdC4KQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxS
ZWZQdHI8S2V5Pj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QK
ICAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBkZWNvZGVkS2V5czsKKyAg
ICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRG
b3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCks
CiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewogICAgICAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtOTEsMTEgKzkyLDEyIEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29u
c3QgSlNPTjo6T2JqZWN0JiByb290CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3Ry
aW5nKCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgaWYgKCFXVEY6OmJh
c2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVj
b2RlKGtleVZhbHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKKyAgICAgICAgICAgIEtleUlEVHlwZSBr
ZXlJRERhdGE7CisgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SGFuZGxlVmFsdWVEYXRh
OworICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERh
dGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleUhhbmRsZVZhbHVl
RGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRl
Y29kZWRLZXlzLmFwcGVuZChLZXk6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5VmFsdWVEYXRhKSkpOwor
ICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleUhhbmRsZTo6Y3JlYXRlKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RGTW92
ZShrZXlIYW5kbGVWYWx1ZURhdGEpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTUyNCw3ICs1MjYsNyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkLCBMaWNlbnNlVAogICAgICAgICBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+IGNoYW5n
ZWRLZXlzOwogICAgICAgICBpZiAoa2V5c0NoYW5nZWQpIHsKICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25J
ZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlz
RnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAgICAgIHBhcmVudEluc3RhbmNlKCkubWVyZ2VLZXlz
RnJvbShtX2tleVN0b3JlKTsKICAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5j
b252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKQEAgLTUzNCw3ICs1MzYs
NyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0
IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVh
c2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFs
bCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX3BhcmVu
dEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBwYXJlbnRJ
bnN0YW5jZSgpLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAgICAgICBtX2tleVN0
b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NTkyLDcgKzU5NCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNl
c3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtl
eXNBc1JlbGVhc2VkKCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1f
a2V5U3RvcmUuYWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNl
ZCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7CiAgICAgICAgIC8v
IENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9y
bWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQpAQCAtNjIxLDYgKzYyMywxMyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3Ry
aW5nJikKIHsKIH0KIAorQ0RNSW5zdGFuY2VDbGVhcktleSYgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnBhcmVudEluc3RhbmNlKCkgY29uc3QKK3sKKyAgICBhdXRvIGluc3RhbmNlID0gY2Rt
SW5zdGFuY2VQcm94eSgpOworICAgIEFTU0VSVChpbnN0YW5jZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENETUluc3RhbmNlQ2xlYXJLZXkmPigqaW5zdGFuY2UpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmgKaW5kZXggOGJmMzYyNzJhZGI2Li4xMDc5MDg2MDgwZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NE
TUNsZWFyS2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgT3B0
aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5h
bDsKIH07CiAKLWNsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5z
dGFuY2VQcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsK
K2NsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94
eSB7CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNE
TUluc3RhbmNlQ2xlYXJLZXkoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiBjbGFzcyBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Np
b25Qcm94eSB7CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoQ0RNSW5z
dGFuY2VDbGVhcktleSYgcGFyZW50KQotICAgICAgICA6IG1fcGFyZW50SW5zdGFuY2UocGFyZW50
KSB7IH0KKyAgICAgICAgOiBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShwYXJlbnQpIHsgfQogICAg
IHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXRE
YXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlw
ZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOwog
ICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CkBAIC0xMTYsOCArMTE2LDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5z
ZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBzdG9y
ZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmluYWw7CiBwcml2YXRlOgorICAgIENE
TUluc3RhbmNlQ2xlYXJLZXkmIHBhcmVudEluc3RhbmNlKCkgY29uc3Q7CisKICAgICBTdHJpbmcg
bV9zZXNzaW9uSUQ7Ci0gICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsK
ICAgICBLZXlTdG9yZSBtX2tleVN0b3JlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cAppbmRleCA4YWM5YWIzMThlNmYuLmYyYjEwNzRjNjBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5jcHAKQEAgLTUwLDYgKzUwLDkgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CiAjaW5jbHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNpZiBFTkFC
TEUoT1BFTkNETSkKKyNpbmNsdWRlICJXZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgi
CisjZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMjc1LDYgKzI3OCwxNCBA
QCBib29sIGluaXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiYgb3B0
aW9ucykKICAgICByZXR1cm4gaXNHU3RyZWFtZXJJbml0aWFsaXplZDsKIH0KIAorI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorYm9vbCBpc09wZW5DRE1SYW5r
ZWQoKQoreworICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZ19nZXRlbnYoIldFQktJVF9FTUVfUkFO
S19QUklPUklUWSIpOworICAgIHJldHVybiB2YWx1ZSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KHZhbHVlLCAiT3BlbkNETSIpOworfQorI2VuZGlmCisKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1l
ckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogewogICAgIGlmICghaW5pdGlhbGl6ZUdTdHJl
YW1lcigpKQpAQCAtMjgzLDcgKzI5NCwxMSBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZs
YWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQotICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0
Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9DS19E
RUNSWVBUKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdGNs
ZWFya2V5IiwgR1NUX1JBTktfUFJJTUFSWSArIDIwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVD
UllQVCk7CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgICAgIHVuc2lnbmVkIG9wZW5DRE1SYW5r
ID0gaXNPcGVuQ0RNUmFua2VkKCkgPyAzMDAgOiAxMDA7CisgICAgICAgIGdzdF9lbGVtZW50X3Jl
Z2lzdGVyKG51bGxwdHIsICJ3ZWJraXRvcGVuY2RtIiwgR1NUX1JBTktfUFJJTUFSWSArIG9wZW5D
RE1SYW5rLCBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQpOworI2VuZGlmCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0zODIsNiArMzk3LDEzIEBAIFJlZjxT
aGFyZWRCdWZmZXI+IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlU2hhcmVkQnVmZmVyKCkKICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKnRoaXMpOwogfQogCitWZWN0b3I8dWludDhfdD4g
R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVWZWN0b3IoKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2
YWx1ZTsKKyAgICB2YWx1ZS5hcHBlbmQoZGF0YSgpLCBzaXplKCkpOworICAgIHJldHVybiB2YWx1
ZTsKK30KKwogYm9vbCBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZShjb25zdCBjaGFyKiBuYW1l
KQogewogICAgIEdSZWZQdHI8R3N0UGx1Z2luPiBwbHVnaW4gPSBhZG9wdEdSZWYoZ3N0X3JlZ2lz
dHJ5X2ZpbmRfcGx1Z2luKGdzdF9yZWdpc3RyeV9nZXQoKSwgbmFtZSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5oCmluZGV4IGExZTU2MjQ0YjE3ZS4uMDJhMDJjMDU3NzYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lckNvbW1vbi5oCkBAIC03Myw2ICs3Myw5IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4mJiA9IFdURjo6bnVsbG9wdCk7CiBib29sIGluaXRpYWxp
emVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiB1bnNpZ25lZCBnZXRHc3RQ
bGF5RmxhZyhjb25zdCBjaGFyKiBuaWNrKTsKIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUo
Y29uc3QgTWVkaWFUaW1lJik7CisjaWYgRU5BQkxFKE9QRU5DRE0pCitib29sIGlzT3BlbkNETVJh
bmtlZCgpOworI2VuZGlmCiAKIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29u
c3QgTWVkaWFUaW1lICZtZWRpYVRpbWUpCiB7CkBAIC04MSw2ICs4NCwxMSBAQCBpbmxpbmUgR3N0
Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogCiBj
bGFzcyBHc3RNYXBwZWRCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R3N0TWFw
cGVkQnVmZmVyPiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+
IGNyZWF0ZShjb25zdCBHUmVmUHRyPEdzdEJ1ZmZlcj4mIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxh
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlci5nZXQoKSwgZmxhZ3MpOwor
ICAgIH0KKwogICAgIHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoR3N0QnVm
ZmVyKiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQogICAgIHsKICAgICAgICAgR3N0TWFwSW5m
byBpbmZvOwpAQCAtMTA2LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9CiAgICAgYm9v
bCBpc1NoYXJhYmxlKCkgY29uc3QgeyByZXR1cm4gIShtX2luZm8uZmxhZ3MgJiBHU1RfTUFQX1dS
SVRFKTsgfQogICAgIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1ZmZlcigpOworICAg
IFZlY3Rvcjx1aW50OF90PiBjcmVhdGVWZWN0b3IoKTsKIAogcHJpdmF0ZToKICAgICBHc3RNYXBw
ZWRCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdE1hcEluZm8mJiBpbmZvKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA4NzAxYWE2NTY4
ZDMuLmIyOTE2MzlkMDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTIxNSw2ICsyMTUsMTEgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJEaXNwb3NpbmcgcGxheWVyIik7CiAgICAgbV9pc1BsYXllclNodXR0
aW5nRG93bi5zdG9yZSh0cnVlKTsKIAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVO
QUJMRShPUEVOQ0RNKQorICAgIGlmIChtX2NkbUluc3RhbmNlICYmICFnX3N0cmNtcDAoZ19nZXRl
bnYoIldFQktJVF9FTUVfUkVMRUFTRV9PUEVOQ0RNX1dJVEhfUExBWUVSX0RFU1RSVUNUSU9OIiks
ICJ5ZXMiKSkKKyAgICAgICAgbV9jZG1JbnN0YW5jZS0+c2h1dGRvd24oKTsKKyNlbmRpZgorCiAg
ICAgZm9yIChhdXRvJiB0cmFjayA6IG1fYXVkaW9UcmFja3MudmFsdWVzKCkpCiAgICAgICAgIHRy
YWNrLT5kaXNjb25uZWN0KCk7CiAKQEAgLTM1MTAsNyArMzUxNSw4IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0
YSYmIGluaXRECiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRl
cmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOworICAg
ICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQg
JXMgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5wYXlsb2FkQ29udGFpbmVyVHlwZSgpLnV0
ZjgoKS5kYXRhKCkKKyAgICAgICAgICAgICwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOwog
ICAgICAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhcyIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGluaXREYXRhLnBheWxvYWQoKS0+ZGF0YSgpKSwgaW5pdERhdGEucGF5bG9hZCgp
LT5zaXplKCkpOwogICAgICAgICB3ZWFrVGhpcy0+bV9wbGF5ZXItPmluaXRpYWxpemF0aW9uRGF0
YUVuY291bnRlcmVkKGluaXREYXRhLnBheWxvYWRDb250YWluZXJUeXBlKCksIGluaXREYXRhLnBh
eWxvYWQoKS0+dHJ5Q3JlYXRlQXJyYXlCdWZmZXIoKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAppbmRleCAwZjlhNjhkMmNkNmQuLjM3ZTg0NzA2
ZTA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCkBAIC0z
MywxNyArMzMsMjkgQEAKIAogI2luY2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKIAorI2lmIEVO
QUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHZvaWQgQ0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3Rvcmll
cyhWZWN0b3I8Q0RNRmFjdG9yeSo+JiBmYWN0b3JpZXMpCiB7CiAgICAgZmFjdG9yaWVzLmFwcGVu
ZCgmQ0RNRmFjdG9yeUNsZWFyS2V5OjpzaW5nbGV0b24oKSk7CisjaWYgRU5BQkxFKE9QRU5DRE0p
CisgICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsK
KyNlbmRpZgogfQogCiBWZWN0b3I8Q0RNUHJveHlGYWN0b3J5Kj4gQ0RNUHJveHlGYWN0b3J5Ojpw
bGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKCkKIHsKICAgICBWZWN0b3I8Q0RNUHJveHlGYWN0b3J5
Kj4gZmFjdG9yaWVzOworI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgIGZhY3Rvcmllcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDIpOworICAgIGZhY3Rvcmllcy51bmNoZWNrZWRBcHBlbmQoJkNETUZh
Y3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24oKSk7CisjZWxzZQogICAgIGZhY3Rvcmllcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworI2VuZGlmCiAgICAgZmFjdG9yaWVzLnVuY2hlY2tlZEFwcGVu
ZCgmQ0RNUHJveHlGYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKICAgICByZXR1cm4gZmFj
dG9yaWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi42YTk0OWI0NzUyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3Bw
CkBAIC0wLDAgKzEsNjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
RE1PcGVuQ0RNLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BF
TkNETSkKKworI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRl
ICJDRE1Qcm94eU9wZW5DRE0uaCIKKyNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKKyNpbmNs
dWRlICJDRE1TZXNzaW9uVHlwZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUtleU1lc3NhZ2VUeXBlLmgi
CisjaW5jbHVkZSAiTWVkaWFLZXlTdGF0dXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiAoIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RF
QlVHKSkKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdl
YmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9E
RUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5CisjZW5kaWYKKwor
bmFtZXNwYWNlIHsKKwordXNpbmcgT3BlbkNETUtleVN0YXR1cyA9IEtleVN0YXR1czsKKworfQor
CitzdGF0aWMgTGljZW5zZVR5cGUgb3BlbkNETUxpY2Vuc2VUeXBlKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbjo6TGljZW5zZVR5cGUgbGljZW5zZVR5cGUpCit7CisgICAgc3dpdGNoIChsaWNl
bnNlVHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNl
VHlwZTo6VGVtcG9yYXJ5OgorICAgICAgICByZXR1cm4gVGVtcG9yYXJ5OworICAgIGNhc2UgV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6UGVyc2lzdGVudFVzYWdlUmVj
b3JkOgorICAgICAgICByZXR1cm4gUGVyc2lzdGVudFVzYWdlUmVjb3JkOworICAgIGNhc2UgV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6UGVyc2lzdGVudExpY2Vuc2U6
CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50TGljZW5zZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFRlbXBvcmFyeTsKKyAgICB9
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICghZGVmaW5lZChHU1RfRElTQUJMRV9H
U1RfREVCVUcpKQorU3RyaW5nIGluaXREYXRhTUQ1KGNvbnN0IEluaXREYXRhJiBpbml0RGF0YSkK
K3sKKyAgICBXVEY6Ok1ENSBtZDU7CisgICAgbWQ1LmFkZEJ5dGVzKGluaXREYXRhLnBheWxvYWQo
KS0+ZGF0YUFzVUludDhQdHIoKSwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOworCisgICAg
V1RGOjpNRDU6OkRpZ2VzdCBkaWdlc3Q7CisgICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAg
ICByZXR1cm4gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRpZ2VzdFswXSwgV1RGOjpNRDU6Omhhc2hT
aXplKTsKK30KKyNlbmRpZgorCitzdGF0aWMgQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9h
ZEZhaWx1cmUgc2Vzc2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0oY29uc3QgU3RyaW5nJiBsb2Fk
U3RhdHVzKQoreworICAgIGlmIChsb2FkU3RhdHVzID09ICJOb25lIikKKyAgICAgICAgcmV0dXJu
IENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lOworICAgIGlmIChs
b2FkU3RhdHVzID09ICJTZXNzaW9uTm90Rm91bmQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGE7CisgICAgaWYgKGxv
YWRTdGF0dXMgPT0gIk1pc21hdGNoZWRTZXNzaW9uVHlwZSIpCisgICAgICAgIHJldHVybiBDRE1J
bnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6TWlzbWF0Y2hlZFNlc3Npb25UeXBl
OworICAgIGlmIChsb2FkU3RhdHVzID09ICJRdW90YUV4Y2VlZGVkIikKKyAgICAgICAgcmV0dXJu
IENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpRdW90YUV4Y2VlZGVkOwor
ICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6T3RoZXI7
Cit9CisKK3N0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3Qg
U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdo
b3NlIHNpemUgZG9lc24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorICAg
IHNpemVfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9v
dCBvYmplY3QgKGlmIGFueSkuCisgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitDRE1GYWN0
b3J5T3BlbkNETSYgQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENETUZhY3RvcnlPcGVuQ0RNPiBzX2ZhY3Rvcnk7CisgICAgcmV0dXJu
IHNfZmFjdG9yeTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENETVByaXZhdGU+IENETUZhY3RvcnlP
cGVuQ0RNOjpjcmVhdGVDRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCit7CisgICAgQVNTRVJU
KHN1cHBvcnRzS2V5U3lzdGVtKGtleVN5c3RlbSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPENE
TVByaXZhdGVPcGVuQ0RNPihrZXlTeXN0ZW0pOworfQorCitSZWZQdHI8Q0RNUHJveHk+IENETUZh
Y3RvcnlPcGVuQ0RNOjpjcmVhdGVDRE1Qcm94eShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sK
KyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDRE1Qcm94eU9wZW5DRE0oa2V5U3lzdGVtKSk7Cit9CisKK2NvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0
Cit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGVtcHR5U3RyaW5nOworICAgICAgICAvLyBZ
ZXMsIHRoaXMgaXMgcmlnaHQsIDAgbWVhbnMgc3VwcG9ydGVkLCBoZW5jZSBzb21ldGhpbmcgZWxz
ZSBtZWFucyBub3Qgc3VwcG9ydGVkLgorICAgICAgICBpZiAoIW9wZW5jZG1faXNfdHlwZV9zdXBw
b3J0ZWQoR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX1dpZGV2aW5lS2V5U3lzdGVtLCBlbXB0eVN0
cmluZy5jX3N0cigpKSkKKyAgICAgICAgICAgIHN1cHBvcnRlZEtleVN5c3RlbXMuYXBwZW5kKEdT
dHJlYW1lckVNRVV0aWxpdGllczo6c19XaWRldmluZUtleVN5c3RlbSk7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICBpZiAoc3VwcG9ydGVkS2V5U3lzdGVtcy5pc0VtcHR5KCkgJiYgaXNPcGVuQ0RN
UmFua2VkKCkpCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJO
byBrZXkgc3lzdGVtcyBzdXBwb3J0ZWQgb24gT3BlbkNETSBhbmQgT3BlbkNETSBpcyBwcmVmZXJy
ZWQuIElzIFRodW5kZXIgcnVubmluZz8gQXJlIHRoZSBwbHVnaW5zIGJ1aWx0PyIpOworI2VuZGlm
CisgICAgfSk7CisgICAgcmV0dXJuIHN1cHBvcnRlZEtleVN5c3RlbXM7Cit9CisKK2Jvb2wgQ0RN
RmFjdG9yeU9wZW5DRE06OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVt
KQoreworICAgIHJldHVybiBDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9uKCkuc3VwcG9ydGVk
S2V5U3lzdGVtcygpLmNvbnRhaW5zKGtleVN5c3RlbSk7Cit9CisKK1ZlY3RvcjxBdG9tU3RyaW5n
PiBDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydGVkSW5pdERhdGFUeXBlcygpIGNvbnN0Cit7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBWZWN0b3I8QXRv
bVN0cmluZz4gc3VwcG9ydGVkSW5pdERhdGFUeXBlczsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
RmxhZywgW10geworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoMyk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMudW5jaGVja2VkQXBw
ZW5kKEF0b21TdHJpbmcoImtleWlkcyIpKTsKKyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBl
cy51bmNoZWNrZWRBcHBlbmQoQXRvbVN0cmluZygiY2VuYyIpKTsKKyAgICAgICAgc3VwcG9ydGVk
SW5pdERhdGFUeXBlcy51bmNoZWNrZWRBcHBlbmQoQXRvbVN0cmluZygid2VibSIpKTsKKyAgICB9
KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkSW5pdERhdGFUeXBlczsKK30KKworYm9vbCBDRE1Qcml2
YXRlT3BlbkNETTo6c3VwcG9ydHNDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5c3RlbUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBhdWRpb0Nh
cGFiaWxpdHkgOiBjb25maWd1cmF0aW9uLmF1ZGlvQ2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGlm
IChvcGVuY2RtX2lzX3R5cGVfc3VwcG9ydGVkKG1fa2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIGF1
ZGlvQ2FwYWJpbGl0eS5jb250ZW50VHlwZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB2aWRlb0NhcGFiaWxpdHkgOiBjb25m
aWd1cmF0aW9uLnZpZGVvQ2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGlmIChvcGVuY2RtX2lzX3R5
cGVfc3VwcG9ydGVkKG1fa2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIHZpZGVvQ2FwYWJpbGl0eS5j
b250ZW50VHlwZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxBdG9tU3RyaW5nPiBDRE1Qcml2YXRl
T3BlbkNETTo6c3VwcG9ydGVkUm9idXN0bmVzc2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4geyBl
bXB0eUF0b20oKSB9OworfQorCitDRE1SZXF1aXJlbWVudCBDRE1Qcml2YXRlT3BlbkNETTo6ZGlz
dGluY3RpdmVJZGVudGlmaWVyc1JlcXVpcmVtZW50KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3Vy
YXRpb24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdAoreworICAgIHJldHVybiBDRE1S
ZXF1aXJlbWVudDo6T3B0aW9uYWw7Cit9CisKK0NETVJlcXVpcmVtZW50IENETVByaXZhdGVPcGVu
Q0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QKK3sKKyAgICByZXR1cm4gQ0RN
UmVxdWlyZW1lbnQ6Ok9wdGlvbmFsOworfQorCitib29sIENETVByaXZhdGVPcGVuQ0RNOjpkaXN0
aW5jdGl2ZUlkZW50aWZpZXJzQXJlVW5pcXVlUGVyT3JpZ2luQW5kQ2xlYXJhYmxlKGNvbnN0IENE
TUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworUmVmUHRyPENETUluc3RhbmNlPiBDRE1Qcml2YXRlT3BlbkNETTo6Y3JlYXRlSW5zdGFuY2Uo
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VPcGVuQ0RNKG1fa2V5U3lz
dGVtKSk7Cit9CisKK3ZvaWQgQ0RNUHJpdmF0ZU9wZW5DRE06OmxvYWRBbmRJbml0aWFsaXplKCkK
K3sKKyAgICAvLyBOby1vcC4KK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNT
ZXJ2ZXJDZXJ0aWZpY2F0ZXMoKSBjb25zdAoreworICAgIC8vIFNlcnZlciBjZXJ0aWZpY2F0ZXMg
YXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENETVByaXZh
dGVPcGVuQ0RNOjpzdXBwb3J0c1Nlc3Npb25zKCkgY29uc3QKK3sKKyAgICAvLyBTZXNzaW9ucyBh
cmUgc3VwcG9ydGVkLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgY29u
c3QgU2hhcmVkQnVmZmVyJiBpbml0RGF0YSkgY29uc3QKK3sKKyAgICAvLyBWYWxpZGF0ZSB0aGUg
aW5pdERhdGEgYnVmZmVyIGFzIGFuIEpTT04gb2JqZWN0IGluIGtleWlkcyBjYXNlLgorICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJrZXlpZHMiKSAm
JiBwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgQ0VOQyBpbml0RGF0YS4gRklYTUU6
IFZhbGlkYXRlIGl0IGlzIGFjdHVhbGx5IENFTkMuCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSAmJiAhaW5pdERhdGEuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBi
dWZmZXIgYXMgV2ViTSBpbml0RGF0YS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaW5pdERhdGFUeXBlLCAid2VibSIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8U2hhcmVk
QnVmZmVyPiBDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZShjb25zdCBTaGFyZWRC
dWZmZXImIHJlc3BvbnNlKSBjb25zdAoreworICAgIHJldHVybiByZXNwb25zZS5jb3B5KCk7Cit9
CisKK09wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplU2Vzc2lvbklk
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAoreworICAgIHJldHVybiBzZXNzaW9uSWQ7
Cit9CisKK0NETUluc3RhbmNlT3BlbkNETTo6Q0RNSW5zdGFuY2VPcGVuQ0RNKGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShrZXlTeXN0ZW0sIEtleVN0b3Jl
OjpNZXJnZVN0cmF0ZWd5OjpSZXBsYWNlSWZOZXdlciksIG1fb3BlbkNETVN5c3RlbShvcGVuY2Rt
X2NyZWF0ZV9zeXN0ZW0oa2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCkpKQorICAgICwgbV9rZXlTeXN0
ZW0oa2V5U3lzdGVtKQoreworfQorCit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6aW5pdGlhbGl6
ZVdpdGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mLCBBbGxv
d0Rpc3RpbmN0aXZlSWRlbnRpZmllcnMsIEFsbG93UGVyc2lzdGVudFN0YXRlCisgICAgLCBTdWNj
ZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhTdWNjZWVkZWQpOworfQor
Cit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6c2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiBjZXJ0aWZpY2F0ZSwgIFN1Y2Nlc3NDYWxsYmFjayYmIGNhbGxiYWNrKQorewor
ICAgIGNhbGxiYWNrKCFvcGVuY2RtX3N5c3RlbV9zZXRfc2VydmVyX2NlcnRpZmljYXRlKG1fb3Bl
bkNETVN5c3RlbS5nZXQoKSwgY29uc3RfY2FzdDx1aW50OF90Kj4oY2VydGlmaWNhdGUtPmRhdGFB
c1VJbnQ4UHRyKCkpLCBjZXJ0aWZpY2F0ZS0+c2l6ZSgpKQorICAgICAgICA/IFN1Y2NlZWRlZCA6
IEZhaWxlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTdG9yYWdlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETShDRE1JbnN0YW5j
ZU9wZW5DRE0mIGluc3RhbmNlKQorICAgIDogQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoaW5zdGFu
Y2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX29wZW5DRE1TZXNzaW9u
Q2FsbGJhY2tzLnByb2Nlc3NfY2hhbGxlbmdlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24q
LCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhcltdLCBjb25zdCB1aW50OF90IGNoYWxsZW5nZVtd
CisgICAgICAgICwgY29uc3QgdWludDE2X3QgY2hhbGxlbmdlTGVuZ3RoKSB7CisgICAgICAgIEdT
VF9ERUJVRygiR290ICdjaGFsbGVuZ2UnIE9DRE0gbm90aWZpY2F0aW9uIik7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzdGF0aWNfY2FzdDxDRE1JbnN0
YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKSwgYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpjcmVhdGUoY2hhbGxlbmdlCisgICAgICAgICAgICAsIGNoYWxsZW5nZUxlbmd0aCld
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+Y2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2so
V1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNz
aW9uQ2FsbGJhY2tzLmtleV91cGRhdGVfY2FsbGJhY2sgPSBbXShPcGVuQ0RNU2Vzc2lvbiosIHZv
aWQqIHVzZXJEYXRhLCBjb25zdCB1aW50OF90IGtleUlERGF0YVtdLCBjb25zdCB1aW50OF90IGtl
eUlETGVuZ3RoKSB7CisgICAgICAgIEdTVF9ERUJVRygiR290ICdrZXkgdXBkYXRlZCcgT0NETSBu
b3RpZmljYXRpb24iKTsKKyAgICAgICAgS2V5SURUeXBlIGtleUlEOworICAgICAgICBrZXlJRC5h
cHBlbmQoa2V5SUREYXRhLCBrZXlJRExlbmd0aCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVu
Q0RNKj4odXNlckRhdGEpKSwga2V5SUQgPSBXVEZNb3ZlKGtleUlEKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBzZXNzaW9uLT5rZXlVcGRhdGVkQ2FsbGJhY2soV1RGTW92ZShrZXlJRCkpOworICAgICAg
ICB9KTsKKyAgICB9OworICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3Mua2V5c191cGRhdGVk
X2NhbGxiYWNrID0gW10oY29uc3QgT3BlbkNETVNlc3Npb24qLCB2b2lkKiB1c2VyRGF0YSkgewor
ICAgICAgICBHU1RfREVCVUcoIkdvdCAnYWxsIGtleXMgdXBkYXRlZCcgT0NETSBub3RpZmljYXRp
b24iKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0
YXRpY19jYXN0PENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpXSgpIHsKKyAg
ICAgICAgICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBzZXNzaW9uLT5rZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAg
IH07CisgICAgbV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcy5lcnJvcl9tZXNzYWdlX2NhbGxiYWNr
ID0gW10oT3BlbkNETVNlc3Npb24qLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhciBtZXNzYWdl
W10pIHsKKyAgICAgICAgR1NUX0VSUk9SKCJHb3QgJ2Vycm9yJyBPQ0RNIG5vdGlmaWNhdGlvbjog
JXMiLCBtZXNzYWdlKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VX
ZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkp
LCBidWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlCisgICAgICAg
ICAgICAsIHN0cmxlbihtZXNzYWdlKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNl
c3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+ZXJy
b3JDYWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworfQorCitS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Np
b24oKQoreworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNPiBuZXdTZXNzaW9u
ID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0oKnRoaXMpKTsKKyAgICBB
U1NFUlQobmV3U2Vzc2lvbik7CisgICAgdHJhY2tTZXNzaW9uKCpuZXdTZXNzaW9uKTsKKyAgICBy
ZXR1cm4gbmV3U2Vzc2lvbjsKK30KKworc3RhdGljIHN0ZDo6cGFpcjxSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4+IHBhcnNlUmVzcG9u
c2VNZXNzYWdlKGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpCit7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSgpLCBXVEY6Om51bGxvcHQpOworCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlN
ZXNzYWdlVHlwZT4gbWVzc2FnZVR5cGU7CisgICAgU3RyaW5nIG1lc3NhZ2UoU3RyaW5nSW1wbDo6
Y3JlYXRlV2l0aG91dENvcHlpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZl
ci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICBzaXplX3QgdHlwZVBvc2l0aW9uID0g
bWVzc2FnZS5maW5kKCI6VHlwZToiKTsKKyAgICBTdHJpbmcgcmVxdWVzdFR5cGUobWVzc2FnZS5j
aGFyYWN0ZXJzOCgpLCB0eXBlUG9zaXRpb24gIT0gbm90Rm91bmQgPyB0eXBlUG9zaXRpb24gOiAw
KTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwdTsKKyAgICBpZiAoIXJlcXVlc3RUeXBlLmlzRW1w
dHkoKSAmJiByZXF1ZXN0VHlwZS5sZW5ndGgoKSAhPSBtZXNzYWdlLmxlbmd0aCgpKQorICAgICAg
ICBvZmZzZXQgPSB0eXBlUG9zaXRpb24gKyA2OworCisgICAgaWYgKHJlcXVlc3RUeXBlLmxlbmd0
aCgpID09IDEpCisgICAgICAgIG1lc3NhZ2VUeXBlID0gbWFrZU9wdGlvbmFsKHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGU+KHJlcXVlc3RUeXBlLnRvSW50KCkpKTsKKwor
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlLmNo
YXJhY3RlcnM4KCkgKyBvZmZzZXQsIG1lc3NhZ2Uuc2l6ZUluQnl0ZXMoKSAtIG9mZnNldCksIG1l
c3NhZ2VUeXBlKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVu
Z2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAg
ICBhdXRvIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZSA9IHBhcnNlUmVzcG9uc2VNZXNzYWdlKGJ1ZmZl
cik7CisKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgYXMgYSByZXN1bHQgb2YgZS5nLiByZXF1
ZXN0TGljZW5zZSgpIGJ1dCB1cGRhdGUoKSBvciByZW1vdmUoKSBhcyB3ZWxsLgorICAgIC8vIFRo
aXMgY2FsbGVkIG5vdCBhcyBhIHJlc3BvbnNlIHRvIEFQSSBjYWxsIGlzIGFsc28gcG9zc2libGUu
CisgICAgaWYgKCFtX2NoYWxsZW5nZUNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9t
ZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QpOworICAgICAgICBt
X25lZWRzSW5kaXZpZHVhbGl6YXRpb24gPSBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuc2Vjb25kID09
IENETUluc3RhbmNlU2Vzc2lvbjo6TWVzc2FnZVR5cGU6OkluZGl2aWR1YWxpemF0aW9uUmVxdWVz
dDsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFs
bGVuZ2VDYWxsYmFja3MpCisgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgICAg
ICBtX2NoYWxsZW5nZUNhbGxiYWNrcy5jbGVhcigpOworICAgIH0gZWxzZSBpZiAoIW1fc2Vzc2lv
bkNoYW5nZWRDYWxsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vzc2lv
bkNoYW5nZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgICAg
ICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKHRydWUsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJz
dC5jb3B5UmVmKCkpOworICAgICAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1lc3NhZ2VBbmRSZXF1ZXN0
VHlwZS5zZWNvbmQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2Fn
ZShzdGF0aWNfY2FzdDxDRE1NZXNzYWdlVHlwZT4obWVzc2FnZUFuZFJlcXVlc3RUeXBlLnNlY29u
ZC52YWx1ZSgpKSwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LnJlbGVhc2VOb25OdWxsKCkp
OworICAgIH0KK30KKworI2lmICFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykgfHwgIUdT
VF9ESVNBQkxFX0dTVF9ERUJVRworc3RhdGljIGNvbnN0IGNoYXIqIHRvU3RyaW5nKENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykKK3sKKyAgICBzd2l0Y2ggKHN0YXR1cykgewor
ICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZToKKyAgICAgICAg
cmV0dXJuICJVc2FibGUiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6
OkV4cGlyZWQ6CisgICAgICAgIHJldHVybiAiRXhwaXJlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ6CisgICAgICAgIHJldHVybiAiUmVsZWFzZWQi
OworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0
ZWQ6CisgICAgICAgIHJldHVybiAiT3V0cHV0UmVzdHJpY3RlZCI7CisgICAgY2FzZSBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0RG93bnNjYWxlZDoKKyAgICAgICAgcmV0dXJu
ICJPdXRwdXREb3duc2NhbGVkIjsKKyAgICBjYXNlIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzOjpTdGF0dXNQZW5kaW5nOgorICAgICAgICByZXR1cm4gIlN0YXR1c1BlbmRpbmciOworICAg
IGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkludGVybmFsRXJyb3I6CisgICAg
ICAgIHJldHVybiAiSW50ZXJuYWxFcnJvciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAidW5rbm93biI7CisgICAgfQorfQorI2Vu
ZGlmCisKK0NETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIENETUluc3RhbmNlU2Vzc2lvbk9w
ZW5DRE06OnN0YXR1cyhjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAoreworICAgIE9wZW5D
RE1LZXlTdGF0dXMgc3RhdHVzID0gbV9zZXNzaW9uICYmICFtX3Nlc3Npb25JRC5pc0VtcHR5KCkg
PyBvcGVuY2RtX3Nlc3Npb25fc3RhdHVzKG1fc2Vzc2lvbi5nZXQoKSwga2V5SUQuZGF0YSgpLCBr
ZXlJRC5zaXplKCkpIDogU3RhdHVzUGVuZGluZzsKKworICAgIHN3aXRjaCAoc3RhdHVzKSB7Cisg
ICAgY2FzZSBVc2FibGU6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6VXNhYmxlOworICAgIGNhc2UgRXhwaXJlZDoKKyAgICAgICAgcmV0dXJuIENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpFeHBpcmVkOworICAgIGNhc2UgUmVsZWFzZWQ6CisgICAg
ICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAg
Y2FzZSBPdXRwdXRSZXN0cmljdGVkOgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQ7CisgICAgY2FzZSBPdXRwdXREb3duc2NhbGVk
OgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dERv
d25zY2FsZWQ7CisgICAgY2FzZSBTdGF0dXNQZW5kaW5nOgorICAgICAgICByZXR1cm4gQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc7CisgICAgY2FzZSBJbnRlcm5h
bEVycm9yOgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Oklu
dGVybmFsRXJyb3I7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxF
cnJvcjsKKyAgICB9Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5VXBk
YXRlZENhbGxiYWNrKEtleUlEVHlwZSYmIGtleUlEKQoreworICAgIEdTVF9NRU1EVU1QKCJ1cGRh
dGVkIGtleSIsIGtleUlELmRhdGEoKSwga2V5SUQuc2l6ZSgpKTsKKworICAgIGF1dG8ga2V5U3Rh
dHVzID0gc3RhdHVzKGtleUlEKTsKKyAgICBHU1RfREVCVUcoInVwZGF0ZWQgd2l0aCB3aXRoIGtl
eSBzdGF0dXMgJXMiLCB0b1N0cmluZyhrZXlTdGF0dXMpKTsKKyAgICBtX2RvZXNLZXlTdG9yZU5l
ZWRNZXJnaW5nIHw9IG1fa2V5U3RvcmUuYWRkKEtleUhhbmRsZTo6Y3JlYXRlKGtleVN0YXR1cywg
V1RGTW92ZShrZXlJRCksIEJveFB0cjxPcGVuQ0RNU2Vzc2lvbj4oKSkpOworfQorCit2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRhdGVEb25lQ2FsbGJhY2soKQoreworICAg
IEdTVF9ERUJVRygidXBkYXRlIGRvbmUiKTsKKyAgICBpZiAobV9kb2VzS2V5U3RvcmVOZWVkTWVy
Z2luZykgeworICAgICAgICBtX2RvZXNLZXlTdG9yZU5lZWRNZXJnaW5nID0gZmFsc2U7CisgICAg
ICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZU9wZW5DRE0oKTsKKyAgICAgICAgaWYgKGlu
c3RhbmNlKQorICAgICAgICAgICAgaW5zdGFuY2UtPm1lcmdlS2V5c0Zyb20obV9rZXlTdG9yZSk7
CisgICAgfQorCisgICAgaWYgKG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuaXNFbXB0eSgpICYm
IG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT51cGRhdGVLZXlTdGF0dXNlcyhtX2tleVN0
b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNoYW5nZWRDYWxsYmFjayh0cnVlLCBudWxs
cHRyKTsKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQg
Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6ZXJyb3JDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYmIG1lc3NhZ2UpCit7CisgICAgR1NUX0VSUk9SKCJDRE0gZXJyb3IiKTsKKyAgICBHU1Rf
TUVNRFVNUCgiZXJyb3IgZHVtcCIsIG1lc3NhZ2UtPmRhdGFBc1VJbnQ4UHRyKCksIG1lc3NhZ2Ut
PnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFsbGVuZ2VDYWxsYmFjayA6IG1fY2hh
bGxlbmdlQ2FsbGJhY2tzKQorICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgIG1fY2hh
bGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25DaGFuZ2Vk
Q2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAgICAgICBzZXNzaW9uQ2hh
bmdlZENhbGxiYWNrKGZhbHNlLCBtZXNzYWdlLmNvcHlSZWYoKSk7CisgICAgbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5D
RE06OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlIGxpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3Ry
aW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGFTaGFyZWRCdWZm
ZXIKKyAgICAsIExpY2Vuc2VDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisKKyAgICAvLyBGSVhNRTogVVVJRCBvciBzeXN0ZW0gSUQ/CisgICAgYXV0
byBpbnN0YW5jZSA9IGNkbUluc3RhbmNlT3BlbkNETSgpOworICAgIEFTU0VSVChpbnN0YW5jZSk7
CisgICAgbV9pbml0RGF0YSA9IEluaXREYXRhKGluc3RhbmNlLT5rZXlTeXN0ZW0oKSwgV1RGTW92
ZShpbml0RGF0YVNoYXJlZEJ1ZmZlcikpOworCisgICAgR1NUX1RSQUNFKCJHb2luZyB0byByZXF1
ZXN0IGEgbmV3IHNlc3Npb24gaWQsIGluaXQgZGF0YSBzaXplICVsdSBhbmQgTUQ1ICVzIiwgbV9p
bml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSwgaW5pdERhdGFNRDUobV9pbml0RGF0YSkudXRmOCgp
LmRhdGEoKSk7CisgICAgR1NUX01FTURVTVAoImluaXQgZGF0YSIsIG1faW5pdERhdGEucGF5bG9h
ZCgpLT5kYXRhQXNVSW50OFB0cigpLCBtX2luaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKwor
ICAgIE9wZW5DRE1TZXNzaW9uKiBzZXNzaW9uID0gbnVsbHB0cjsKKyAgICBvcGVuY2RtX2NvbnN0
cnVjdF9zZXNzaW9uKCZpbnN0YW5jZS0+b3BlbkNETVN5c3RlbSgpLCBvcGVuQ0RNTGljZW5zZVR5
cGUobGljZW5zZVR5cGUpLCBpbml0RGF0YVR5cGUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKQorICAg
ICAgICAsIG1faW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBtX2luaXREYXRh
LnBheWxvYWQoKS0+c2l6ZSgpLCBudWxscHRyLCAwLCAmbV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNr
cywgdGhpcywgJnNlc3Npb24pOworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBHU1RfRVJS
T1IoIkNvdWxkIG5vdCBjcmVhdGUgc2Vzc2lvbiIpOworICAgICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBpbml0RGF0YSA9IG1faW5pdERhdGEucGF5bG9hZCgpOworICAgICAgICBjYWxsYmFjayhp
bml0RGF0YS5yZWxlYXNlTm9uTnVsbCgpLCB7IH0sIGZhbHNlLCBGYWlsZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fc2Vzc2lvbi5yZXNldChzZXNzaW9uKTsKKyAgICBtX3Nlc3Np
b25JRCA9IFN0cmluZzo6ZnJvbVVURjgob3BlbmNkbV9zZXNzaW9uX2lkKG1fc2Vzc2lvbi5nZXQo
KSkpOworCisgICAgYXV0byBnZW5lcmF0ZUNoYWxsZW5nZSA9IFt0aGlzLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbml0RGF0YSA9IG1faW5pdERhdGEu
cGF5bG9hZCgpOworICAgICAgICBpZiAobV9zZXNzaW9uSUQuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBHU1RfRVJST1IoImNvdWxkIG5vdCBjcmVhdGUgc2Vzc2lvbiBpZCIpOworICAgICAgICAg
ICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBmYWxzZSwgRmFpbGVk
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBHU1RfV0FSTklORygiY3JlYXRlZCBpbnZhbGlkIHNlc3Npb24g
JXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGlu
aXREYXRhLnJlbGVhc2VOb25OdWxsKCksIG1fc2Vzc2lvbklELCBmYWxzZSwgRmFpbGVkKTsKKyAg
ICAgICAgICAgIGdldFJlbW92ZWRGcm9tSW5zdGFuY2VQcm94eSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1NUX0RFQlVHKCJjcmVhdGVkIHZhbGlkIHNlc3Np
b24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY2FsbGJhY2sobV9t
ZXNzYWdlLmNvcHlSZWYoKS5yZWxlYXNlTm9uTnVsbCgpLCBtX3Nlc3Npb25JRCwgbV9uZWVkc0lu
ZGl2aWR1YWxpemF0aW9uLCBTdWNjZWVkZWQpOworICAgIH07CisKKyAgICBpZiAobV9zZXNzaW9u
SUQuaXNFbXB0eSgpIHx8IGlzVmFsaWQoKSkKKyAgICAgICAgZ2VuZXJhdGVDaGFsbGVuZ2UoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGdl
bmVyYXRlQ2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6
c2Vzc2lvbkZhaWx1cmUoKQoreworICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
ayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgIHNlc3Npb25DaGFuZ2VkQ2Fs
bGJhY2soZmFsc2UsIG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuY2xl
YXIoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjp1cGRhdGVMaWNlbnNl
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUX1VOVVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7CisKKyAgICBH
U1RfVFJBQ0UoIlVwZGF0aW5nIHNlc3Npb24gJXMiLCBzZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYm
IGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
ICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9rZXlTdG9yZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGNh
bGxiYWNrKGZhbHNlLCBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2luZyBKU09OIHJl
cG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBjbGVhbmVyIHRoYW4gdXNpbmcgc3RyaW5nIHByZWZpeGVz
LCBJIGJlbGlldmUgdGhlcmUKKyAgICAgICAgICAgICAgICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIg
cGFydHMgb2YgdGhlIHNwZWMgd2hlcmUgbm90IGhhdmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBi
ZSBiYWQuCisgICAgICAgICAgICAgICAgYXV0byBtZXNzYWdlQW5kUmVxdWVzdFR5cGUgPSBwYXJz
ZVJlc3BvbnNlTWVzc2FnZShidWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlQW5k
UmVxdWVzdFR5cGUuZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJnb3Qg
bWVzc2FnZSBvZiBzaXplICVsdSIsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC0+c2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlQW5k
UmVxdWVzdFR5cGUuZmlyc3QtPmRhdGFBc1VJbnQ4UHRyKCksIG1lc3NhZ2VBbmRSZXF1ZXN0VHlw
ZS5maXJzdC0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBzdGQ6Om1ha2VfcGFpcihtZXNzYWdlQW5kUmVxdWVz
dFR5cGUuc2Vjb25kLnZhbHVlT3IoTWVkaWFLZXlNZXNzYWdlVHlwZTo6TGljZW5zZVJlcXVlc3Qp
CisgICAgICAgICAgICAgICAgICAgICAgICAsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC5y
ZWxlYXNlTm9uTnVsbCgpKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9FUlJPUigibWVzc2FnZSBvZiBz
aXplICVsdSBpbmNvcnJlY3RseSBmb3JtYXR0ZWQiLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6
IDApOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUigidXBkYXRlIGxpY2Vuc2UgcmVwb3J0ZWQgZXJyb3Igc3RhdGUiKTsKKyAgICAg
ICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBp
ZiAoIW1fc2Vzc2lvbiB8fCBtX3Nlc3Npb25JRC5pc0VtcHR5KCkgfHwgb3BlbmNkbV9zZXNzaW9u
X3VwZGF0ZShtX3Nlc3Npb24uZ2V0KCksIHJlc3BvbnNlLT5kYXRhQXNVSW50OFB0cigpLCByZXNw
b25zZS0+c2l6ZSgpKSkKKyAgICAgICAgc2Vzc2lvbkZhaWx1cmUoKTsKK30KKwordm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxs
YmFjaykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgc2Vzc2lvbklEID09IG1fc2Vz
c2lvbklEKTsKKworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuYXBwZW5kKFt0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1Y2Nlc3MsIFJlZlB0cjxTaGFyZWRC
dWZmZXI+JiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
LCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFVzaW5nIEpTT04gcmVwb25zZSBtZXNzYWdlcyBpcyBtdWNoIGNs
ZWFuZXIgdGhhbiB1c2luZyBzdHJpbmcgcHJlZml4ZXMsIEkgYmVsaWV2ZSB0aGVyZQorICAgICAg
ICAgICAgICAgIC8vIHdpbGwgZXZlbiBiZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3BlYyB3aGVyZSBu
b3QgaGF2aW5nIHN0cnVjdHVyZWQgZGF0YSB3aWxsIGJlIGJhZC4KKyAgICAgICAgICAgICAgICBh
dXRvIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZSA9IHBhcnNlUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdCkgeworICAg
ICAgICAgICAgICAgICAgICBHU1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVz
c2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBH
U1RfTUVNRFVNUCgibWVzc2FnZSIsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC0+ZGF0YUFz
VUludDhQdHIoKSwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgc3RkOjpt
YWtlX3BhaXIobWVzc2FnZUFuZFJlcXVlc3RUeXBlLnNlY29uZC52YWx1ZU9yKE1lZGlhS2V5TWVz
c2FnZVR5cGU6OkxpY2Vuc2VSZXF1ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgLCBtZXNz
YWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QucmVsZWFzZU5vbk51bGwoKSksIFN1Y2Nlc3NWYWx1ZTo6
U3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9FUlJPUigibWVzc2FnZSBvZiBzaXplICVs
dSBpbmNvcnJlY3RseSBmb3JtYXR0ZWQiLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDApOwor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpP
dGhlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYXV0byBidWZmZXJEYXRhID0gYnVmZmVyID8gYnVmZmVyLT5kYXRhKCkg
OiBudWxscHRyOworICAgICAgICAgICAgYXV0byBidWZmZXJTaXplID0gYnVmZmVyID8gYnVmZmVy
LT5zaXplKCkgOiAwOworICAgICAgICAgICAgU3RyaW5nIHJlc3BvbnNlKFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhvdXRDb3B5aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXJE
YXRhKSwgYnVmZmVyU2l6ZSkpOworICAgICAgICAgICAgR1NUX0VSUk9SKCJzZXNzaW9uICVzIG5v
dCBsb2FkZWQsIHJlYXNvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCksIHJlc3BvbnNl
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQsIHNlc3Npb25Mb2Fk
RmFpbHVyZUZyb21PcGVuQ0RNKHJlc3BvbnNlKSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBp
ZiAoIW1fc2Vzc2lvbiB8fCBtX3Nlc3Npb25JRC5pc0VtcHR5KCkgfHwgb3BlbmNkbV9zZXNzaW9u
X2xvYWQobV9zZXNzaW9uLmdldCgpKSkKKyAgICAgICAgc2Vzc2lvbkZhaWx1cmUoKTsKK30KKwor
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5n
JiBzZXNzaW9uSUQsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUX1VOVVNFRChzZXNzaW9uSUQsIG1fc2Vzc2lvbklEID09IHNlc3Npb25JRCk7CisKKyAgICBp
ZiAobV9zZXNzaW9uICYmICFtX3Nlc3Npb25JRC5pc0VtcHR5KCkpCisgICAgICAgIG9wZW5jZG1f
c2Vzc2lvbl9jbG9zZShtX3Nlc3Npb24uZ2V0KCkpOworCisgICAgZ2V0UmVtb3ZlZEZyb21JbnN0
YW5jZVByb3h5KCk7CisKKyAgICBjYWxsYmFjaygpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vz
c2lvbk9wZW5DRE06OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBM
aWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAg
IEFTU0VSVF9VTlVTRUQoc2Vzc2lvbklELCBtX3Nlc3Npb25JRCA9PSBzZXNzaW9uSUQpOworCisg
ICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5hcHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGJvb2wgc3VjY2VzcywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZm
ZXIpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBp
ZiAoc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OlJlbGVhc2VkKSwg
V1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBhdXRvIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZSA9IHBhcnNlUmVz
cG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VBbmRSZXF1
ZXN0VHlwZS5maXJzdCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoInNlc3Npb24g
JXMgcmVtb3ZlZCwgbWVzc2FnZSBsZW5ndGggJWx1IiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEo
KSwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtleVN0YXR1czo6UmVsZWFz
ZWQpLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgU3VjY2Vz
c1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIEdTVF9XQVJOSU5HKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZv
cm1hdHRlZCBhcyBzZXNzaW9uICVzIHJlbW92YWwgYW5zd2VyIiwgYnVmZmVyID8gYnVmZmVyLT5z
aXplKCkgOiAwCisgICAgICAgICAgICAgICAgICAgICAgICAsIG1fc2Vzc2lvbklELnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNB
cyhNZWRpYUtleVN0YXR1czo6SW50ZXJuYWxFcnJvciksIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1Zh
bHVlOjpGYWlsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJjb3VsZCBub3QgcmVtb3ZlIHNlc3Np
b24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNr
KG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpJbnRlcm5hbEVycm9yKSwgV1RG
OjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAg
ICBpZiAoIW1fc2Vzc2lvbiB8fCBtX3Nlc3Npb25JRC5pc0VtcHR5KCkgfHwgb3BlbmNkbV9zZXNz
aW9uX3JlbW92ZShtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgpOwor
CisgICAgZ2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFu
Y2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworT3B0aW9uYWw8Q0RNSW5zdGFuY2VPcGVuQ0RN
Jj4gQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29uc3QK
K3sKKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VQcm94eSgpOworICAgIGlmICghaW5z
dGFuY2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENETUluc3RhbmNlT3BlbkNETSY+KCppbnN0YW5jZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShP
UEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjZmMjQ2NTA1NGU0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5oCkBAIC0wLDAg
KzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlICJDRE1GYWN0b3J5LmgiCisjaW5jbHVk
ZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0RNT3BlbkNETVR5cGVzLmgiCisj
aW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
T3BlbkNETSB7CisKK3N0cnVjdCBPQ0RNU3lzdGVtRGVsZXRlciB7CisgICAgT3BlbkNETUVycm9y
IG9wZXJhdG9yKCkoT3BlbkNETVN5c3RlbSogcHRyKSBjb25zdCB7IHJldHVybiBvcGVuY2RtX2Rl
c3RydWN0X3N5c3RlbShwdHIpOyB9Cit9OworCit1c2luZyBTY29wZWRPQ0RNU3lzdGVtID0gc3Rk
Ojp1bmlxdWVfcHRyPE9wZW5DRE1TeXN0ZW0sIE9DRE1TeXN0ZW1EZWxldGVyPjsKKwordXNpbmcg
U2NvcGVkU2Vzc2lvbiA9IHN0ZDo6dW5pcXVlX3B0cjxPcGVuQ0RNU2Vzc2lvbiwgV1RGOjpCb3hQ
dHJEZWxldGVyPE9wZW5DRE1TZXNzaW9uPj47CisKK30gLy8gbmFtZXNwYWNlIE9wZW5DRE0KKwor
Y2xhc3MgQ0RNRmFjdG9yeU9wZW5DRE0gZmluYWwgOiBwdWJsaWMgQ0RNRmFjdG9yeSwgcHVibGlj
IENETVByb3h5RmFjdG9yeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIENETUZhY3RvcnlPcGVuQ0RNJiBzaW5nbGV0b24oKTsKKworICAgIHZpcnR1
YWwgfkNETUZhY3RvcnlPcGVuQ0RNKCkgPSBkZWZhdWx0OworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENETVByaXZhdGU+IGNyZWF0ZUNETShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBSZWZQdHI8
Q0RNUHJveHk+IGNyZWF0ZUNETVByb3h5KGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIGJvb2wg
c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHN1cHBvcnRlZEtleVN5c3RlbXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q0RNRmFjdG9yeU9wZW5DRE0+OworICAgIENETUZh
Y3RvcnlPcGVuQ0RNKCkgPSBkZWZhdWx0OworfTsKKworY2xhc3MgQ0RNUHJpdmF0ZU9wZW5DRE0g
ZmluYWwgOiBwdWJsaWMgQ0RNUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgQ0RNUHJpdmF0ZU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0p
IDogbV9rZXlTeXN0ZW0oa2V5U3lzdGVtKSB7IH07CisgICAgdmlydHVhbCB+Q0RNUHJpdmF0ZU9w
ZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9ydGVkSW5p
dERhdGFUeXBlcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNDb25maWd1cmF0aW9u
KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IHN1cHBvcnRzQ29uZmlndXJhdGlvbldpdGhSZXN0cmljdGlvbnMoY29uc3QgQ0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29u
c3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29u
ZmlndXJhdGlvbik7CisgICAgfQorICAgIGJvb2wgc3VwcG9ydHNTZXNzaW9uVHlwZVdpdGhDb25m
aWd1cmF0aW9uKGNvbnN0IENETVNlc3Npb25UeXBlJiwgY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbikgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVy
biBzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIFZlY3Rv
cjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRSb2J1c3RuZXNzZXMoKSBjb25zdCBmaW5hbDsKKyAgICBD
RE1SZXF1aXJlbWVudCBkaXN0aW5jdGl2ZUlkZW50aWZpZXJzUmVxdWlyZW1lbnQoY29uc3QgQ0RN
S2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZp
bmFsOworICAgIENETVJlcXVpcmVtZW50IHBlcnNpc3RlbnRTdGF0ZVJlcXVpcmVtZW50KGNvbnN0
IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIGRpc3RpbmN0aXZlSWRlbnRpZmllcnNBcmVVbmlxdWVQZXJPcmln
aW5BbmRDbGVhcmFibGUoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0IGZp
bmFsOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZT4gY3JlYXRlSW5zdGFuY2UoKSBmaW5hbDsKKyAg
ICB2b2lkIGxvYWRBbmRJbml0aWFsaXplKCkgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c1NlcnZl
ckNlcnRpZmljYXRlcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNTZXNzaW9ucygp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNJbml0RGF0YShjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgU2hhcmVkQnVmZmVyJikgY29uc3QgZmluYWw7CisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gc2FuaXRpemVSZXNwb25zZShjb25zdCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsK
KyAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNv
bnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307CisKK2Ns
YXNzIENETUluc3RhbmNlT3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsK
K3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0p
OworICAgIHZpcnR1YWwgfkNETUluc3RhbmNlT3BlbkNETSgpID0gZGVmYXVsdDsKKworICAgIC8v
IENETUluc3RhbmNlCisgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6T3BlbkNETTsgfQorICAg
IHZvaWQgaW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5c3RlbUNvbmZp
Z3VyYXRpb24mLCBBbGxvd0Rpc3RpbmN0aXZlSWRlbnRpZmllcnMsIEFsbG93UGVyc2lzdGVudFN0
YXRlLCBTdWNjZXNzQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCBzZXRTZXJ2ZXJDZXJ0aWZp
Y2F0ZShSZWY8U2hhcmVkQnVmZmVyPiYmLCBTdWNjZXNzQ2FsbGJhY2smJikgZmluYWw7CisgICAg
dm9pZCBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIGNvbnN0
IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0K
KyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7CisK
KyAgICBPcGVuQ0RNU3lzdGVtJiBvcGVuQ0RNU3lzdGVtKCkgY29uc3QgeyByZXR1cm4gKm1fb3Bl
bkNETVN5c3RlbS5nZXQoKTsgfTsKKworICAgIHZvaWQgc2h1dGRvd24oKSBmaW5hbAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQ0RNSW5zdGFuY2VQcm94
eTo6c2h1dGRvd24oKTsKKyAgICAgICAgbV9vcGVuQ0RNU3lzdGVtLnJlc2V0KG51bGxwdHIpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBPcGVuQ0RNOjpTY29wZWRPQ0RNU3lzdGVtIG1fb3BlbkNE
TVN5c3RlbTsKKyAgICBTdHJpbmcgbV9rZXlTeXN0ZW07Cit9OworCitjbGFzcyBDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNIGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblByb3h5IHsK
K3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKENETUluc3RhbmNlT3BlbkNE
TSYpOworCisgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0
cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNl
Q2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYs
IExpY2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2sm
JikgZmluYWw7CisgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lk
IGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmKSBmaW5h
bDsKKyAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBl
LCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgc3RvcmVSZWNv
cmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXNzaW9uICYmIG1fbWVzc2FnZSAmJiAhbV9tZXNzYWdlLT5pc0Vt
cHR5KCk7IH0KKworICAgIHZvaWQgc2V0Q2xpZW50KFdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xpZW50PiYmIGNsaWVudCkgZmluYWwgeyBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsgfQor
ICAgIHZvaWQgY2xlYXJDbGllbnQoKSBmaW5hbCB7IG1fY2xpZW50LmNsZWFyKCk7IH0KKworICAg
IHZvaWQgc2h1dGRvd24oKSBmaW5hbAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CisgICAgICAgIG1fc2Vz
c2lvbi5yZXNldChudWxscHRyKTsKKyAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnNo
dXRkb3duKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE9wdGlvbmFsPENETUluc3RhbmNlT3Bl
bkNETSY+IGNkbUluc3RhbmNlT3BlbkNETSgpIGNvbnN0OworCisgICAgdXNpbmcgTm90aWZpY2F0
aW9uID0gdm9pZCAoQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6KikoUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJik7CisgICAgdXNpbmcgQ2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2sg
PSBGdW5jdGlvbjx2b2lkKCk+OworICAgIHVzaW5nIFNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgPSBG
dW5jdGlvbjx2b2lkKGJvb2wsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpPjsKKworICAgIHZvaWQg
Y2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik7CisgICAg
dm9pZCBrZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYpOworICAgIHZvaWQga2V5c1VwZGF0
ZURvbmVDYWxsYmFjaygpOworICAgIHZvaWQgZXJyb3JDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYmKTsKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXMoY29uc3Qg
S2V5SURUeXBlJikgY29uc3Q7CisgICAgdm9pZCBzZXNzaW9uRmFpbHVyZSgpOworCisgICAgLy8g
RklYTUU6IENoZWNrIGFsbCBvcmlnaW5hbCB1c2VzIG9mIHRoZXNlIGF0dHJpYnV0ZXMuCisgICAg
U3RyaW5nIG1fc2Vzc2lvbklEOworICAgIEtleVN0b3JlIG1fa2V5U3RvcmUgeyBLZXlTdG9yZTo6
TWVyZ2VTdHJhdGVneTo6UmVwbGFjZUlmTmV3ZXIgfTsKKyAgICBib29sIG1fZG9lc0tleVN0b3Jl
TmVlZE1lcmdpbmcgeyBmYWxzZSB9OworICAgIEluaXREYXRhIG1faW5pdERhdGE7CisgICAgT3Bl
bkNETVNlc3Npb25DYWxsYmFja3MgbV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcyB7IH07CisgICAg
T3BlbkNETTo6U2NvcGVkU2Vzc2lvbiBtX3Nlc3Npb247CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9tZXNzYWdlOworICAgIGJvb2wgbV9uZWVkc0luZGl2aWR1YWxpemF0aW9uIHsgZmFsc2Ug
fTsKKyAgICBWZWN0b3I8Q2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2s+IG1fY2hhbGxlbmdlQ2Fs
bGJhY2tzOworICAgIFZlY3RvcjxTZXNzaW9uQ2hhbmdlZENhbGxiYWNrPiBtX3Nlc3Npb25DaGFu
Z2VkQ2FsbGJhY2tzOworICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uQ2xpZW50PiBtX2Ns
aWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DRE1fSU5TVEFOQ0UoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNLCBXZWJDb3JlOjpD
RE1JbnN0YW5jZTo6SW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RNKTsKKworI2VuZGlmIC8vIEVO
QUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFy
S2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHAKaW5kZXggOTFkN2IyMzNhMTVkLi41N2UyOGJjYmY0ZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcApAQCAtMTIyLDExICsxMjIsMTQg
QEAgYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktleShjb25zdCBjZW5j
RGVjcnlwdENvbnRleHQmIGluKQogICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRFZlYzsKICAgICBr
ZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQsIGluLmtleUlEU2l6ZUluQnl0ZXMpOwogCi0gICAgYXV0
byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5KGtleUlEVmVjKTsKKyAgICBhdXRvIGtleURhdGEg
PSBnZXRPcldhaXRGb3JLZXlWYWx1ZShrZXlJRFZlYyk7CiAgICAgaWYgKCFrZXlEYXRhKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRsZSgpLCBrZXlEYXRhLT5kYXRhKCksIGtleURh
dGEtPnNpemUoKSkpIHsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
dWludDhfdD4+KGtleURhdGEudmFsdWUoKSkpOworICAgIGF1dG8mIGtleURhdGFWYWx1ZSA9IFdU
Rjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5RGF0YS52YWx1ZSgpKTsKKworICAgIGlmIChnY3J5
X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoZ0NyeXB0SGFuZGxlKCks
IGtleURhdGFWYWx1ZS5kYXRhKCksIGtleURhdGFWYWx1ZS5zaXplKCkpKSB7CiAjaWYgIUxPR19E
SVNBQkxFRAogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9S
KGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjQ3ZmVkZWNjYjFkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9w
ZW5DRE0uY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkg
JiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8b3Bl
bl9jZG1fYWRhcHRlci5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KKworR1NUX0RFQlVH
X0NBVEVHT1JZX0VYVEVSTih3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRlZ29yeSk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdD
YXRlZ29yeQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE5PVEU6IFlvdVR1YmUgMjAxOSBF
TUUgY29uZm9ybWFuY2UgdGVzdHMgZXhwZWN0IHRoaXMgdG8gYmUgPj01cy4KK2NvbnN0IFdURjo6
U2Vjb25kcyBzX2xpY2Vuc2VLZXlSZXNwb25zZVRpbWVvdXQgPSBXVEY6OlNlY29uZHMoNik7CisK
K0JveFB0cjxPcGVuQ0RNU2Vzc2lvbj4gQ0RNUHJveHlPcGVuQ0RNOjpnZXREZWNyeXB0aW9uU2Vz
c2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYgaW4pIGNvbnN0Cit7CisgICAgYXV0byBtYXBw
ZWRLZXlJRCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGluLmtleUlEQnVmZmVyLCBHU1RfTUFQ
X1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5SUQpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJGYWls
ZWQgdG8gbWFwIGtleSBJRCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgYXV0byBrZXlJRCA9IG1hcHBlZEtleUlELT5jcmVhdGVWZWN0b3IoKTsKKworICAg
IGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGtleUlEKTsKKyAgICBpZiAo
IWtleUhhbmRsZSB8fCAhKCprZXlIYW5kbGUpLT5pc1N0YXR1c0N1cnJlbnRseVZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50IGtleURh
dGEgPSAoKmtleUhhbmRsZSktPnZhbHVlKCk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Qm94UHRyPE9wZW5DRE1TZXNzaW9uPj4oa2V5RGF0YSkpOworCisgICAgYXV0byYga2V5
VmFsdWUgPSBXVEY6OmdldDxCb3hQdHI8T3BlbkNETVNlc3Npb24+PihrZXlEYXRhKTsKKworICAg
IGlmICgha2V5VmFsdWUpIHsKKyAgICAgICAga2V5VmFsdWUgPSBjcmVhdGVCb3hQdHIob3BlbmNk
bV9nZXRfc3lzdGVtX3Nlc3Npb24oJnN0YXRpY19jYXN0PGNvbnN0IENETUluc3RhbmNlT3BlbkNE
TSo+KGluc3RhbmNlKCkpLT5vcGVuQ0RNU3lzdGVtKCksIGtleUlELmRhdGEoKSwga2V5SUQuc2l6
ZSgpCisgICAgICAgICAgICAsIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dC5taWxsaXNlY29u
ZHNBczx1aW50MzJfdD4oKSkpOworICAgICAgICBBU1NFUlQoa2V5VmFsdWUpOworICAgICAgICAo
KmtleUhhbmRsZSktPnRha2VWYWx1ZUlmRGlmZmVyZW50KGtleVZhbHVlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4ga2V5VmFsdWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlPcGVuQ0RNOjpkZWNyeXB0KENE
TVByb3h5T3BlbkNETTo6RGVjcnlwdGlvbkNvbnRleHQmIGlucHV0KQoreworICAgIEJveFB0cjxP
cGVuQ0RNU2Vzc2lvbj4gc2Vzc2lvbiA9IGdldERlY3J5cHRpb25TZXNzaW9uKGlucHV0KTsKKyAg
ICBpZiAoIXNlc3Npb24pIHsKKyAgICAgICAgR1NUX0VSUk9SKCJ0aGVyZSBpcyBubyB2YWxpZCBz
ZXNzaW9uIHRvIGRlY3J5cHQgZm9yIHRoZSBwcm92aWRlZCBrZXkgSUQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9UUkFDRSgiZGVjcnlwdGluZyIpOworICAgIC8v
IERlY3J5cHQgY2lwaGVyLgorICAgIE9wZW5DRE1FcnJvciBlcnJvckNvZGUgPSBvcGVuY2RtX2dz
dHJlYW1lcl9zZXNzaW9uX2RlY3J5cHQoc2Vzc2lvbi0+Z2V0KCksIGlucHV0LmRhdGFCdWZmZXIs
IGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0Lm51bVN1YnNhbXBsZXMKKyAgICAgICAgLCBp
bnB1dC5pdkJ1ZmZlciwgaW5wdXQua2V5SURCdWZmZXIsIDApOworICAgIGlmIChlcnJvckNvZGUp
IHsKKyAgICAgICAgR1NUX0VSUk9SKCJkZWNyeXB0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSAlWCIs
IGVycm9yQ29kZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9w
ZW5DRE0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBjOWMzZDAx
YTY0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVO
Q0RNKQorCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0RNT3Bl
bkNETS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgdGhlIHRocmVhZC1zYWZlIEFQSSB0aGF0IGRlY29k
ZSB0aHJlYWRzIHNob3VsZCB1c2UgdG8gbWFrZSB1c2Ugb2YgYSBwbGF0Zm9ybSBDRE0gbW9kdWxl
LgorY2xhc3MgQ0RNUHJveHlPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETVByb3h5LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlPcGVuQ0RNLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0
aW9uOjpFYWdlcj4geworcHVibGljOgorICAgIENETVByb3h5T3BlbkNETShjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSkKKyAgICAgICAgOiBtX2tleVN5c3RlbShrZXlTeXN0ZW0pIHsgfQorICAgIHZp
cnR1YWwgfkNETVByb3h5T3BlbkNETSgpID0gZGVmYXVsdDsKKworICAgIHN0cnVjdCBEZWNyeXB0
aW9uQ29udGV4dCB7CisgICAgICAgIEdzdEJ1ZmZlcioga2V5SURCdWZmZXI7CisgICAgICAgIEdz
dEJ1ZmZlciogaXZCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciogZGF0YUJ1ZmZlcjsKKyAgICAg
ICAgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyOworICAgICAgICBzaXplX3QgbnVtU3Vic2Ft
cGxlczsKKyAgICB9OworCisgICAgYm9vbCBkZWNyeXB0KERlY3J5cHRpb25Db250ZXh0Jik7Cisg
ICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSB7IHJldHVybiBtX2tleVN5c3RlbTsgfQorCitw
cml2YXRlOgorICAgIEJveFB0cjxPcGVuQ0RNU2Vzc2lvbj4gZ2V0RGVjcnlwdGlvblNlc3Npb24o
Y29uc3QgRGVjcnlwdGlvbkNvbnRleHQmKSBjb25zdDsKKyAgICBTdHJpbmcgbV9rZXlTeXN0ZW07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1l
ckVNRVV0aWxpdGllcy5oCmluZGV4IDhhOTJjYTNiMWVhOC4uMjFlMmQ1NWVkZmUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJl
YW1lckVNRVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKQEAgLTI5LDYgKzI5LDkgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2RlZmluZSBXRUJDT1JFX0dTVFJF
QU1FUl9FTUVfVVRJTElUSUVTX0NMRUFSS0VZX1VVSUQgIjEwNzdlZmVjLWMwYjItNGQwMi1hY2Uz
LTNjMWU1MmUyZmI0YiIKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyNkZWZpbmUgV0VCQ09SRV9HU1RS
RUFNRVJfRU1FX1VUSUxJVElFU19XSURFVklORV9VVUlEICJlZGVmOGJhOS03OWQ2LTRhY2UtYTNj
OC0yN2RjZDUxZDIxZWQiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW5p
dERhdGEgewpAQCAtNDgsNiArNTEsMTIgQEAgcHVibGljOgogICAgICAgICBtX3BheWxvYWQgPSBt
YXBwZWRJbml0RGF0YS0+Y3JlYXRlU2hhcmVkQnVmZmVyKCk7CiAgICAgfQogCisgICAgSW5pdERh
dGEoY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBwYXlsb2Fk
KQorICAgICAgICA6IG1fc3lzdGVtSWQoc3lzdGVtSWQpCisgICAgICAgICwgbV9wYXlsb2FkKFdU
Rk1vdmUocGF5bG9hZCkpCisgICAgeworICAgIH0KKwogICAgIHZvaWQgYXBwZW5kKEluaXREYXRh
JiYgaW5pdERhdGEpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgc29tZSBjb25m
dXNpb24gaGVyZSBhYm91dCBob3cgdG8gZGV0ZWN0IHRoZQpAQCAtNjQsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcGF5bG9hZC0+YXBwZW5kKCppbml0RGF0YS5wYXlsb2FkKCkpOwogICAg
IH0KIAotICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHBheWxvYWQoKSBjb25zdCB7IHJl
dHVybiBtX3BheWxvYWQ7IH0KKyAgICBjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYgcGF5bG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQogICAgIGNvbnN0IFN0cmluZyYgc3lzdGVt
SWQoKSBjb25zdCB7IHJldHVybiBtX3N5c3RlbUlkOyB9CiAgICAgU3RyaW5nIHBheWxvYWRDb250
YWluZXJUeXBlKCkgY29uc3QKICAgICB7CkBAIC0xMTUsMTcgKzEyNCwzMyBAQCBjbGFzcyBHU3Ry
ZWFtZXJFTUVVdGlsaXRpZXMgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBj
b25zdCogc19DbGVhcktleVVVSUQgPSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVfVVRJTElUSUVTX0NM
RUFSS0VZX1VVSUQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX0NsZWFyS2V5
S2V5U3lzdGVtID0gIm9yZy53My5jbGVhcmtleSI7CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAg
c3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX1dpZGV2aW5lVVVJRCA9IFdFQkNPUkVfR1NU
UkVBTUVSX0VNRV9VVElMSVRJRVNfV0lERVZJTkVfVVVJRDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGNoYXIgY29uc3QqIHNfV2lkZXZpbmVLZXlTeXN0ZW0gPSAiY29tLndpZGV2aW5lLmFscGhhIjsK
KyNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgaXNDbGVhcktleUtleVN5c3RlbShjb25zdCBTdHJp
bmcmIGtleVN5c3RlbSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGtleVN5c3RlbSwgc19DbGVhcktleUtleVN5c3RlbSk7CiAgICAgfQogCisjaWYgRU5BQkxF
KE9QRU5DRE0pCisgICAgc3RhdGljIGJvb2wgaXNXaWRldmluZUtleVN5c3RlbShjb25zdCBTdHJp
bmcmIGtleVN5c3RlbSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGtleVN5c3RlbSwgc19XaWRldmluZUtleVN5c3RlbSk7CisgICAgfQorI2VuZGlmCisKICAg
ICBzdGF0aWMgY29uc3QgY2hhcioga2V5U3lzdGVtVG9VdWlkKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQogICAgIHsKICAgICAgICAgaWYgKGlzQ2xlYXJLZXlLZXlTeXN0ZW0oa2V5U3lzdGVtKSkK
ICAgICAgICAgICAgIHJldHVybiBzX0NsZWFyS2V5VVVJRDsKIAorI2lmIEVOQUJMRShPUEVOQ0RN
KQorICAgICAgICBpZiAoaXNXaWRldmluZUtleVN5c3RlbShrZXlTeXN0ZW0pKQorICAgICAgICAg
ICAgcmV0dXJuIHNfV2lkZXZpbmVVVUlEOworI2VuZGlmCisKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCA4
NmI3YzY2ZmFkNGYuLjUxMDNkNGNiOTJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTQyLDYgKzQyLDcg
QEAgc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgewogfTsKIAogc3Rh
dGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rp
b25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CiBzdGF0aWMg
Ym9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYsIGNvbnN0IFJlZlB0cjxDRE1Qcm94eT4mKTsKIHN0YXRpYyBib29sIGRlY3J5cHQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZl
cioga2V5aWQsIEdzdEJ1ZmZlciogc2FtcGxlLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdz
dEJ1ZmZlciogc3ViU2FtcGxlcyk7CiAKQEAgLTgzLDcgKzg0LDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHQKICAgICAgICAgIndlYmtpdGNsZWFya2V5IiwgMCwgIkNsZWFyS2V5IGRlY3J5cHRv
ciIpOwogCiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5j
Q2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKLSAgICBjZW5j
Q2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVh
cktleVVVSUQ7CisgICAgY2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBHU1RfREVCVUdf
RlVOQ1BUUihwcm90ZWN0aW9uU3lzdGVtSWQpOwogICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRh
Y2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFz
cy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5cHQpOwogCkBAIC0xMDYsNiArMTA3
LDExIEBAIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBHU1RfQ0FM
TF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKK3N0YXRp
YyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCopCit7CisgICAgcmV0dXJuIEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVh
cktleVVVSUQ7Cit9CisKIHN0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENETVByb3h5PiYgY2Rt
UHJveHkpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZ
UFQoc2VsZikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggNDdiNTYwZjczOTIw
Li4xNWUxM2FiZmJhZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMTM0LDE0
ICsxMzQsMTQgQEAgc3RhdGljIEdzdENhcHMqIHRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9y
bSogYmFzZSwgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKICAgICAgICAgICAgIC8vIGNhbiBj
YXVzZSBjYXBzIG5lZ290aWF0aW9uIGZhaWx1cmVzIHdpdGggYWRhcHRpdmUgYml0cmF0ZSBzdHJl
YW1zLgogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzKG91dGdvaW5nU3Ry
dWN0dXJlLmdldCgpLCAiYmFzZS1wcm9maWxlIiwgImNvZGVjX2RhdGEiLCAiaGVpZ2h0IiwgImZy
YW1lcmF0ZSIsICJsZXZlbCIsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCAicHJvZmlsZSIsICJyYXRl
IiwgIndpZHRoIiwgbnVsbHB0cik7CiAKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KG91
dGdvaW5nU3RydWN0dXJlLmdldCgpLCAicHJvdGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5H
LCBrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkLAorICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9T
VFJJTkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQoc2VsZiksCiAgICAgICAgICAgICAgICAg
Im9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBnc3Rfc3RydWN0dXJlX2dldF9u
YW1lKGluY29taW5nU3RydWN0dXJlKSwgbnVsbHB0cik7CiAKICAgICAgICAgICAgIC8vIEdTVF9Q
Uk9URUNUSU9OX1VOU1BFQ0lGSUVEX1NZU1RFTV9JRCB3YXMgYWRkZWQgaW4gdGhlIEdTdHJlYW1l
cgogICAgICAgICAgICAgLy8gZGV2ZWxvcGVtZW50IGdpdCBtYXN0ZXIgd2hpY2ggd2lsbCBzaGlw
IGFzIHZlcnNpb24gMS4xNi4wLgogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShv
dXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwKICNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNSwgMCkK
LSAgICAgICAgICAgICAgICAhZ19zdHJjbXAwKGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQsIEdT
VF9QUk9URUNUSU9OX1VOU1BFQ0lGSUVEX1NZU1RFTV9JRCkgPyAiYXBwbGljYXRpb24veC13ZWJt
LWVuYyIgOgorICAgICAgICAgICAgICAgICFnX3N0cmNtcDAoa2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZChzZWxmKSwgR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lEKSA/ICJhcHBs
aWNhdGlvbi94LXdlYm0tZW5jIiA6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAiYXBwbGljYXRp
b24veC1jZW5jIik7CiAgICAgICAgIH0KQEAgLTE3Nyw2ICsxNzcsMTIgQEAgc3RhdGljIEdzdEZs
b3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZm
ZXIqIGJ1ZmZlcikKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKICAgICBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZ
UFRfR0VUX1BSSVZBVEUoc2VsZik7CiAKKyAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlv
bk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9n
ZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOworICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsK
KyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQnVmZmVyICVwIGRvZXMgbm90IGNvbnRh
aW4gcHJvdGVjdGlvbiBtZXRhLCBub3QgZGVjcnlwdGluZyIsIGJ1ZmZlcik7CisgICAgICAgIHJl
dHVybiBHU1RfRkxPV19PSzsKKyAgICB9CisKICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5j
ZG1BdHRhY2htZW50TXV0ZXgpOwogCiAgICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVkcyB0byBi
ZSBuZWdvdGlhdGVkIGJlZm9yZSB3ZSBjYW4gYmVnaW4gZGVjcnlwdGlvbi4KQEAgLTE5MSwxMiAr
MTk3LDYgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJh
bnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgfQogICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFkZHJlc3MgJXAiLCBw
cml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQotCi0gICAgR3N0UHJvdGVjdGlvbk1ldGEqIHBy
b3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9uTWV0YSo+KGdzdF9i
dWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsKLSAgICBpZiAoIXByb3RlY3Rpb25N
ZXRhKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0
UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0gICAgICAgIHJl
dHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgIH0KICAgICBhdXRvIHJlbW92ZVByb3Rl
Y3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFtidWZmZXIsIHByb3RlY3Rpb25NZXRh
XSB7CiAgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuaAppbmRleCBiYjExNjZkMzgwMzMuLmEwNDY1ZmY1M2QwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgKQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0IHsKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdENsYXNzIHsKICAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKLSAg
ICBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQ7CisgICAgY29uc3QgY2hhciogKCpwcm90
ZWN0aW9uU3lzdGVtSWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKICAg
ICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCosIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4mKTsKICAgICBib29sICgqZGVj
cnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXZC
dWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25l
ZCBzdWJzYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcik7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1l
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NzU0NDdkMWI1
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0wLDAg
KzEsMTcyIEBACisvKiBHU3RyZWFtZXIgT3BlbkNETSBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0
b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisg
KiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgU3Vp
dGUgNTAwLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzM1LCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIK
KworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0Uo
R1NUUkVBTUVSKQorCisjaW5jbHVkZSAiQ0RNT3BlbkNETS5oIgorI2luY2x1ZGUgIkNETVByb3h5
T3BlbkNETS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPGdzdC9i
YXNlL2dzdGJ5dGVyZWFkZXIuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBU
X0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0
UHJpdmF0ZSkpCitzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlIHsKKyAg
ICBSZWZQdHI8Q0RNUHJveHlPcGVuQ0RNPiBjZG1Qcm94eTsKK307CisKK3N0YXRpYyB2b2lkIGZp
bmFsaXplKEdPYmplY3QqKTsKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOworc3RhdGljIGJvb2wgY2RtUHJv
eHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgY29uc3QgUmVm
UHRyPENETVByb3h5PiYpOworc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVm
ZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudAorICAgICwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5
cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3Bl
bkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjZW5jRW5jcnlw
dGlvbk1lZGlhVHlwZXNbXSA9IHsgInZpZGVvL21wNCIsICJhdWRpby9tcDQiLCAidmlkZW8veC1o
MjY0IiwgImF1ZGlvL21wZWciLCBudWxscHRyIH07CitzdGF0aWMgY29uc3QgY2hhciogd2VibUVu
Y3J5cHRpb25NZWRpYVR5cGVzW10gPSB7ICJ2aWRlby93ZWJtIiwgImF1ZGlvL3dlYm0iLCAidmlk
ZW8veC12cDkiLCBudWxscHRyIH07CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNU
ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURfU1JD
LAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygKKyAgICAgICAgInZp
ZGVvL3dlYm07ICIKKyAgICAgICAgImF1ZGlvL3dlYm07ICIKKyAgICAgICAgInZpZGVvL21wNDsg
IgorICAgICAgICAiYXVkaW8vbXA0OyAiCisgICAgICAgICJhdWRpby9tcGVnOyAiCisgICAgICAg
ICJ2aWRlby94LWgyNjQ7ICIKKyAgICAgICAgInZpZGVvL3gtdnA5OyAiKSk7CisKKyNkZWZpbmUg
d2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitH
X0RFRklORV9UWVBFKFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQsIHdlYmtpdF9tZWRpYV9vcGVu
Y2RtX2RlY3J5cHQsIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCk7CisKK3N0YXRpYyBH
UmVmUHRyPEdzdENhcHM+IGNyZWF0ZVNpbmtQYWRUZW1wbGF0ZUNhcHMoKQoreworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleVN5c3RlbSA6IENETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0
b24oKS5zdXBwb3J0ZWRLZXlTeXN0ZW1zKCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNl
bmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tpXTsgKytpKSB7CisgICAgICAgICAgICBnc3RfY2Fwc19h
cHBlbmRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlv
bi94LWNlbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGNlbmNFbmNy
eXB0aW9uTWVkaWFUeXBlc1tpXQorICAgICAgICAgICAgICAgICwgInByb3RlY3Rpb24tc3lzdGVt
IiwgR19UWVBFX1NUUklORywgR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQo
a2V5U3lzdGVtKSwgbnVsbHB0cikpOworICAgICAgICB9CisgICAgICAgIGlmIChHU3RyZWFtZXJF
TUVVdGlsaXRpZXM6OmlzV2lkZXZpbmVLZXlTeXN0ZW0oa2V5U3lzdGVtKSkgeworICAgICAgICAg
ICAgLy8gTm8ga2V5IHN5c3RlbSBVVUlEIGZvciB3ZWJtLiBJdCdzIG5vdCBzZXQgaW4gY2FwcyBm
b3IgaXQgYW5kIGl0J3MganVzdCBXaWRldmluZS4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyB3ZWJtRW5jcnlwdGlvbk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgICAgIGdz
dF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFw
cGxpY2F0aW9uL3gtd2VibS1lbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJ
TkcKKyAgICAgICAgICAgICAgICAgICAgLCB3ZWJtRW5jcnlwdGlvbk1lZGlhVHlwZXNbaV0sIG51
bGxwdHIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEdTVF9ERUJV
Rygic2luayBwYWQgdGVtcGxhdGUgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7
CisKKyAgICByZXR1cm4gY2FwczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX29wZW5j
ZG1fZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyoga2xh
c3MpCit7CisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0TWVkaWFPcGVuQ0RNRGVj
cnlwdERlYnVnQ2F0ZWdvcnksICJ3ZWJraXRvcGVuY2RtIiwgMCwgIk9wZW5DRE0gZGVjcnlwdCIp
OworCisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IGZpbmFsaXplOworCisgICAgR3N0RWxl
bWVudENsYXNzKiBlbGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAg
R1JlZlB0cjxHc3RDYXBzPiBnc3RTaW5rUGFkVGVtcGxhdGVDYXBzID0gY3JlYXRlU2lua1BhZFRl
bXBsYXRlQ2FwcygpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxl
bWVudENsYXNzLCBnc3RfcGFkX3RlbXBsYXRlX25ldygic2luayIsIEdTVF9QQURfU0lOSywgR1NU
X1BBRF9BTFdBWVMsIGdzdFNpbmtQYWRUZW1wbGF0ZUNhcHMuZ2V0KCkpKTsKKyAgICBnc3RfZWxl
bWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRf
dGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0
X3N0YXRpY19tZXRhZGF0YShlbGVtZW50Q2xhc3MsICJEZWNyeXB0IGVuY3J5cHRlZCBjb250ZW50
IHVzaW5nIE9wZW5DRE0iLCBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ1JZUFRPUgorICAg
ICAgICAsICJEZWNyeXB0cyBlbmNyeXB0ZWQgbWVkaWEgdXNpbmcgT3BlbkNETS4iLCAiWGFiaWVy
IFJvZHLDrWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiIpOworCisgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjb21tb25DbGFzcyA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOworICAgIGNvbW1vbkNsYXNzLT5wcm90ZWN0
aW9uU3lzdGVtSWQgPSBHU1RfREVCVUdfRlVOQ1BUUihwcm90ZWN0aW9uU3lzdGVtSWQpOworICAg
IGNvbW1vbkNsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJv
eHlBdHRhY2hlZCk7CisgICAgY29tbW9uQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BU
UihkZWNyeXB0KTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0
KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBzZWxm
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQ
cml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX09QRU5D
RE1fREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRl
KiBwcml2ID0gc2VsZi0+cHJpdjsKKyAgICBwcml2LT5+V2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlw
dFByaXZhdGUoKTsKKworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxp
emUsIChvYmplY3QpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1J
ZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktp
dE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1f
REVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsK
KyAgICBBU1NFUlQocHJpdi0+Y2RtUHJveHkpOworICAgIHJldHVybiBHU3RyZWFtZXJFTUVVdGls
aXRpZXM6OmtleVN5c3RlbVRvVXVpZChwcml2LT5jZG1Qcm94eS0+a2V5U3lzdGVtKCkpOworfQor
CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYsIGNvbnN0IFJlZlB0cjxDRE1Qcm94eT4mIGNkbVByb3h5KQoreworICAg
IFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09Q
RU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNl
bGYpKTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlPcGVu
Q0RNKj4oY2RtUHJveHkuZ2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KKwor
c3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZm
ZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291bnQKKyAgICAsIEdzdEJ1ZmZlciogc3Vi
c2FtcGxlc0J1ZmZlcikKK3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01F
RElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJ
REJ1ZmZlciB8fCAhYnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImlu
dmFsaWQgZGVjcnlwdCgpIHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzdWJzYW1wbGVDb3Vu
dCAmJiAhc3Vic2FtcGxlc0J1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJpbnZhbGlkIGRlY3J5cHQoKSBzdWJzYW1wbGVzIHBhcmFtZXRlciIpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENE
TVByb3h5T3BlbkNETTo6RGVjcnlwdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0Lmtl
eUlEQnVmZmVyID0ga2V5SURCdWZmZXI7CisgICAgY29udGV4dC5pdkJ1ZmZlciA9IGl2QnVmZmVy
OworICAgIGNvbnRleHQuZGF0YUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBjb250ZXh0Lm51bVN1YnNh
bXBsZXMgPSBzdWJzYW1wbGVDb3VudDsKKyAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBz
dWJzYW1wbGVDb3VudCA/IHN1YnNhbXBsZXNCdWZmZXIgOiBudWxscHRyOworCisgICAgcmV0dXJu
IHByaXYtPmNkbVByb3h5LT5kZWNyeXB0KGNvbnRleHQpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1l
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTgzMGE3MTdjZTBh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1
NCBAQAorLyogR1N0cmVhbWVyIE9wZW5DRE0gY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisg
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0UoR1NU
UkVBTUVSKQorCisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJl
YW1lci5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfT1BF
TkNETV9ERUNSWVBUICAgICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09Q
RU5DRE1fREVDUllQVCwgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCkpCisjZGVmaW5lIFdFQktJ
VF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRN
ZWRpYU9wZW5DRE1EZWNyeXB0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNE
TV9ERUNSWVBUKG9iaikgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVE
SUFfT1BFTkNETV9ERUNSWVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCkpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYU9wZW5DRE1E
ZWNyeXB0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyAg
IFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRN
ZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0
ZTsKKworR1R5cGUgd2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9nZXRfdHlwZSh2b2lkKTsK
Kworc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0IHsKKyAgICBXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0IHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhT3BlbkNETURl
Y3J5cHRQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0Q2xhc3MgeworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyBw
YXJlbnRDbGFzczsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0CmluZGV4IGYyZGRlMTI0MTg3OS4uNGMxY2UxZjA1MDRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQKQEAgLTI4Miw2ICsyODIsMTIgQEAgc2V0KFBsdWdpblByb2Nlc3NfTElCUkFSSUVTCiAgICAg
V2ViS2l0CiApCiAKK2lmIChFTkFCTEVfRU5DUllQVEVEX01FRElBIEFORCBFTkFCTEVfT1BFTkNE
TSkKKyAgbGlzdChBUFBFTkQgV2ViS2l0X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAg
ICAke09QRU5DRE1fSU5DTFVERV9ESVJTfQorICApCitlbmRpZiAoKQorCiBpZiAoRU5BQkxFX0dS
QVBISUNTX0NPTlRFWFRfR0wpCiAgICAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgd2FudCB0byB1c2Ug
c3lzdGVtLXByb3ZpZGVkIE9wZW5HTCAoRVMpIC8gRUdMIGhlYWRlcnMsCiAgICAgIyB0aGVzZSBp
bmNsdWRlIGRpcmVjdG9yaWVzLCBsaWJyYXJpZXMgb3IgZGVmaW5pdGlvbnMgbmVlZCB0byBiZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCAzZDlkYjI0YzZjYTMuLjU1MWI0MjM2MzEwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAyMC0wNi0yNCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50
IE9wZW5DRE0gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEzNTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIGFjY2VzcyB0byB0aGUgT3BlbkNETSBoZWFk
ZXJzLgorCiAyMDIwLTA2LTIyICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFdlYktpdCBmYWlscyB0byBsZWF2ZSBhdWRpbyByb3V0aW5nIGFyYml0cmF0aW9u
IGR1cmluZyBuYXZpZ2F0aW9uLCBjbG9zaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0Zp
bmRPcGVuQ0RNLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVlZDM4M2NjOTlmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCkBAIC0wLDAgKzEsNjkgQEAK
KyMucnN0CisjIEZpbmRPcGVuQ0RNCisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgRmluZHMgdGhlIE9w
ZW5DRE0gbGlicmFyeS4KKyMKKyMgVGhpcyB3aWxsIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlh
YmxlczoKKyMKKyMgYGBPUEVOQ0RNX0ZPVU5EYGAKKyMgICAgIFRydWUgaWYgdGhlIHJlcXVlc3Rl
ZCB2ZXJzaW9uIG9mIGdjcnlwdCB3YXMgZm91bmQKKyMgYGBPUEVOQ0RNX1ZFUlNJT05gYAorIyAg
ICAgVGhlIHZlcnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9JTkNM
VURFX0RJUlNgYAorIyAgICAgVGhlIGdjcnlwdCBpbmNsdWRlIGRpcmVjdG9yaWVzCisjIGBgT1BF
TkNETV9MSUJSQVJJRVNgYAorIyAgICAgVGhlIGxpbmtlciBsaWJyYXJpZXMgbmVlZGVkIHRvIHVz
ZSB0aGUgZ2NyeXB0IGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1h
eSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisjIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4KKyMgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULAorIyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyMgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZmluZF9saWJyYXJ5KE9QRU5DRE1fTElCUkFSWQorICBOQU1FUyBsaWJvY2RtLnNvCisp
CitmaW5kX3BhdGgoT1BFTkNETV9JTkNMVURFX0RJUgorICBOQU1FUyBvcGVuX2NkbS5oCisgIFBB
VEhfU1VGRklYRVMgIldQRUZyYW1ld29yay9vY2RtLyIKKykKKworaW5jbHVkZShGaW5kUGFja2Fn
ZUhhbmRsZVN0YW5kYXJkQXJncykKKworZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdz
KE9wZW5jZG0KKyAgICBGT1VORF9WQVIgT1BFTkNETV9GT1VORAorICAgIFJFUVVJUkVEX1ZBUlMg
T1BFTkNETV9MSUJSQVJZIE9QRU5DRE1fSU5DTFVERV9ESVIKKykKK2lmIChPUEVOQ0RNX0ZPVU5E
KQorICAgIHNldChPUEVOQ0RNX0xJQlJBUklFUyAke09QRU5DRE1fTElCUkFSWX0pCisgICAgc2V0
KE9QRU5DRE1fSU5DTFVERV9ESVJTICR7T1BFTkNETV9JTkNMVURFX0RJUn0pCitlbmRpZiAoKQor
CittYXJrX2FzX2FkdmFuY2VkKE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElSKQor
CitpbmNsdWRlKEZlYXR1cmVTdW1tYXJ5KQorc2V0X3BhY2thZ2VfcHJvcGVydGllcyhPcGVuY2Rt
IFBST1BFUlRJRVMKKyAgICBERVNDUklQVElPTiAiT3BlbkNETSBEUk0gZnJhbWV3b3JrIgorICAg
IFVSTCAiaHR0cHM6Ly9naXRodWIuY29tL3Jka2NlbnRyYWwvVGh1bmRlciIKKykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKaW5kZXggNmViZTMyYjZiYjZkLi5jMTA4YjkyZmE2ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RL
LmNtYWtlCkBAIC0xODcsNiArMTg3LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJ
REFUSU9OIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT04pCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyBQUklW
QVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCitXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfT1BFTkNETSBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQUklWQVRF
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BPSU5URVJfTE9D
SyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JF
U09VUkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQpAQCAtNDI3LDYgKzQyOCwxMCBAQCBp
ZiAoVVNFX1NZU1RFTUQpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfRU5D
UllQVEVEX01FRElBIEFORCBFTkFCTEVfT1BFTkNETSkKKyAgZmluZF9wYWNrYWdlKE9wZW5DRE0g
UkVRVUlSRUQpCitlbmRpZiAoKQorCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODIyNDcKIGlmIChFTkFCTEVEX0NPTVBJTEVSX1NBTklUSVpFUlMpCiAgICAgc2V0
KEVOQUJMRV9JTlRST1NQRUNUSU9OIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zV1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggMWUzMmYx
NmU5ZDJjLi4wZWU0YzU5OTc4MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BF
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC00NSw2ICs0NSw3
IEBAIGluY2x1ZGUoR1N0cmVhbWVyRGVmaW5pdGlvbnMpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIFBVQkxJQyBPRkYpCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRVNTSUJJTElUWSBQVUJMSUMg
T04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01F
RElBIFBVQkxJQyAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBVQkxJQyBPTikKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBVQkxJQyBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBVQkxJQyBP
TikKQEAgLTE5OCw2ICsxOTksMTAgQEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgpCiBl
bmRpZiAoKQogCitpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5DRE0p
CisgIGZpbmRfcGFja2FnZShPcGVuQ0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogYWRkX2RlZmlu
aXRpb25zKC1EQlVJTERJTkdfV1BFX189MSkKIGFkZF9kZWZpbml0aW9ucygtREdFVFRFWFRfUEFD
S0FHRT0iV1BFIikKIGFkZF9kZWZpbml0aW9ucygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IGM5MzRjYWJmYjNlMC4uNWE4NTkwNmU3OGM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xODMsNiArMTgzLDcgQEAgbWFjcm8oV0VC
S0lUX09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTkVUV09S
S19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFICJUb29nbGUgbmV0d29yayBjYWNoZSBzdGFs
ZS13aGlsZS1yZXZhbGlkYXRlIGNhY2hpbmcgc3RyYXRlZ3kiIFBSSVZBVEUgT0ZGKQogICAgIFdF
QktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9OT1RJRklDQVRJT05TICJUb2dnbGUgTm90aWZpY2F0
aW9ucyBzdXBwb3J0IiBQUklWQVRFIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJM
RV9PRkZTQ1JFRU5fQ0FOVkFTICJUb2dnbGUgT2Zmc2NyZWVuQ2FudmFzIHN1cHBvcnQiIFBSSVZB
VEUgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9PUEVOQ0RNICJUb2dnbGUg
RU1FIFYzIE9wZW5DRE0gc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9E
RUZJTkUoRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyAiVG9nZ2xlIE9yaWVudGF0aW9uIEV2ZW50
cyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
T1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIICJUb2dnbGUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nIHN1
cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9QQVlN
RU5UX1JFUVVFU1QgIlRvZ2dsZSBQYXltZW50IFJlcXVlc3Qgc3VwcG9ydCIgUFJJVkFURSBPRkYp
CkBAIC0yNTYsNiArMjU3LDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBXRUJL
SVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIEVOQUJMRV9WSURF
TykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU09VUkNFIEVOQUJMRV9W
SURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU1RSRUFNIEVOQUJM
RV9WSURFTykKKyAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfT1BFTkNETSBFTkFCTEVf
RU5DUllQVEVEX01FRElBKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9WSURFT19Q
UkVTRU5UQVRJT05fTU9ERSBFTkFCTEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQo
RU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIEVOQUJMRV9WSURFTykKICAgICBX
RUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVE9VQ0hfU0xJREVSIEVOQUJMRV9UT1VDSF9FVkVO
VFMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
Y2EyNjI4OTFlMTMzLi5jOTJiMWU4MDBiMzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAyMC0wNi0yNCAgWGFiaWVy
IFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3Ry
ZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTUwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCB0byBi
dWlsZCBPcGVuQ0RNIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGVyZSBpcyBhbgorICAgICAgICBv
cHQgaW4gZW52IHZhciB0byBnZXQgSkhCdWlsZCBidWlsZGluZyBUaHVuZGVyIGl0cyBXaWRldmlu
ZQorICAgICAgICBkZXBlbmRlbmNpZXMuIFdlIGFsc28gaW5jbHVkZSBhIGNvdXBsZSBvZiBHU3Ry
ZWFtZXIgcGF0Y2hlcyBuZWVkZWQKKyAgICAgICAgdG8gZ2V0IGtleSBJRHMgaW4gdGhlIGRlY3J5
cHRvcnMuCisKKyAgICAgICAgV2lkZXZpbmUgaXMgb2J2aW91c2x5IHByb3ByaWV0YXJ5IGFuZCBh
cyB5b3UgbmVlZCB0byBiZSBsaWNlbnNlZAorICAgICAgICB0byBhY2Nlc3MgaXQsIHlvdSBuZWVk
IGNyZWRlbnRpYWxzIHRvIGJ1aWxkIGl0LgorCisgICAgICAgIFdlIGFsc28gYWRkIHRlc3RzIGZv
ciBCb3hQdHIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Cb3hQdHIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkJveFB0ckxvZ2dlcjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkJveFB0ckxvZ2dlcjo6Qm94UHRyTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmJveFB0ckxvZ2dlckRlbGV0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBnc3RyZWFt
ZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9u
LWRhdGEucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVn
aW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVm
YXVsdC1raWQucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGd0ay9pbnN0YWxsLWRlcGVuZGVuY2ll
czoKKyAgICAgICAgKiB3cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXM6CisgICAgICAgICogamhidWls
ZC9qaGJ1aWxkcmNfY29tbW9uLnB5OgorICAgICAgICAoaW5pdCk6CisKKzIwMjAtMDUtMjYgIFhh
YmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBb
V1RGXSBJbXBsZW1lbnQgbmV3IEJveFB0ciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0JveFB0ci5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyOjpjcmVhdGUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyOjpCb3hQdHJMb2dnZXIpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Ym94UHRyTG9nZ2VyRGVsZXRlcik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAyMC0wNi0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBw
bGUuY29tPgogCiAgICAgICAgIFtXVEZdIFVSTCBzaG91bGQgc3VwcG9ydCBkYXRhTG9nCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggYzBjZjA5ODczNzdkLi44ZWFh
OTBjYWU0MmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlz
dC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTEz
NSw2ICsxMzUsNyBAQCBteSAoCiAgICAgJG5ldHdvcmtDYWNoZVN0YWxlV2hpbGVSZXZhbGlkYXRl
U3VwcG9ydCwKICAgICAkbm90aWZpY2F0aW9uc1N1cHBvcnQsCiAgICAgJG9mZnNjcmVlbkNhbnZh
c1N1cHBvcnQsCisgICAgJG9wZW5DRE1TdXBwb3J0LAogICAgICRvcmllbnRhdGlvbkV2ZW50c1N1
cHBvcnQsCiAgICAgJG92ZXJmbG93U2Nyb2xsaW5nVG91Y2hTdXBwb3J0LAogICAgICRwYXltZW50
UmVxdWVzdFN1cHBvcnQsCkBAIC00NDgsNiArNDQ5LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAg
IHsgb3B0aW9uID0+ICJvZmZzY3JlZW4tY2FudmFzIiwgZGVzYyA9PiAiVG9nZ2xlIE9mZnNjcmVl
bkNhbnZhcyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX09GRlNDUkVFTl9DQU5W
QVMiLCB2YWx1ZSA9PiBcJG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9u
ID0+ICJvcGVuY2RtIiwgZGVzYyA9PiAiVG9nZ2xlIE9wZW5DRE0gc3VwcG9ydCIsCisgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV9PUEVOQ0RNIiwgdmFsdWUgPT4gXCRvcGVuQ0RNU3VwcG9ydCB9LAor
CiAgICAgeyBvcHRpb24gPT4gIm9yaWVudGF0aW9uLWV2ZW50cyIsIGRlc2MgPT4gIlRvZ2dsZSBP
cmllbnRhdGlvbiBFdmVudHMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUklF
TlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9PiBcJG9yaWVudGF0aW9uRXZlbnRzU3VwcG9ydCB9LAog
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAzNjAyYjBiYzU2YTkuLmYzMWQzMWE3
OWNiMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC0yOCw2ICsyOCw3IEBAIHNl
dChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvQXRvbVN0cmluZy5jcHAKICAgICBUZXN0
cy9XVEYvQml0bWFwLmNwcAogICAgIFRlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAKKyAgICBUZXN0
cy9XVEYvQm94UHRyLmNwcAogICAgIFRlc3RzL1dURi9CdW1wUG9pbnRlckFsbG9jYXRvci5jcHAK
ICAgICBUZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICBUZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0
aWNPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyODlhMDcwNTRiOWUu
LmIyYWUwMjk3NjE3MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU1OCw2ICs1NTgsNyBA
QAogCQk3QzgzREYxNDFEMEE1OTBDMDBGRUJDRjMgLyogUmVmLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTQyN0FBMTgwREEyNjQwMENEMjRENyAv
KiBSZWYuY3BwICovOyB9OwogCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJE
MTk5NzFBMkRCMDVCMDA2RENGMEEgLyogUmVmQ291bnRlci5jcHAgKi87IH07CiAJCTdDODNERjE2
MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNDI3QTgxODBEOUIwNzAwQ0QyNEQ3IC8qIFJlZlB0ci5j
cHAgKi87IH07CisJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAvKiBCb3hQdHIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNDI3QUUxODBEQTYw
RjAwQ0QyNEQ3IC8qIEJveFB0ci5jcHAgKi87IH07CiAJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNG
MyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAqLzsgfTsKIAkJN0M4M0RG
MjQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJldGFpblB0ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDI5QjFCMTQ4NkIyNTkwMDgxN0RBOSAvKiBSZXRh
aW5QdHIubW0gKi87IH07CiAJCTdDODNERjI2MUQwQTU5MEMwMEZFQkNGMyAvKiBTYXR1cmF0ZWRB
cml0aG1ldGljT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwICovOyB9OwpAQCAtMjMzMCw2ICsyMzMxLDcgQEAKIAkJOTNBNDI3
QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E0MjdB
QzE4MERBNjBGMDBDRDI0RDcgLyogTW92ZU9ubHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW92ZU9ubHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBNDI3QUQxODBEQTYwRjAwQ0QyNEQ3
IC8qIFJlZkxvZ2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZMb2dnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNDI3QUUxODBEQTYwRjAwQ0QyNEQ3IC8qIEJveFB0ci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3hQdHIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E3MjBFNTE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxj
dWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQkE4MDgx
NkREQUI5MTAwMkRCMkZBIC8qIFN0cmluZ0hhc2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdHJpbmdIYXNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0FGNEVDQTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDA0LDYgKzQwMDYsNyBAQAogCQkJCTI2RjFCNDQyMTVD
QTQzNEYwMEQxRTRCRiAvKiBBdG9tU3RyaW5nLmNwcCAqLywKIAkJCQlGRTJEOTQ3MzI0NUVCMkRG
MDBFNDgxMzUgLyogQml0bWFwLmNwcCAqLywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEg
LyogQmxvb21GaWx0ZXIuY3BwICovLAorCQkJCTkzQTQyN0FFMTgwREE2MEYwMENEMjRENyAvKiBC
b3hQdHIuY3BwICovLAogCQkJCTA0NTFBNUE2MjM1RTQzOEUwMDlERjk0NSAvKiBCdW1wUG9pbnRl
ckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNr
ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJRTMwMkJEQTkyNDA0QjkyMzAwODY1
Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgKi8sCkBAIC00NzIxLDYgKzQ3MjQsNyBAQAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFEQUQxNTAxRDc3QTlGNjAwMjEyNTg2IC8qIEJsb2NrUHRyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0M4M0RFOUMxRDBBNTkwQzAwRkVCQ0YzIC8qIEJsb29tRmlsdGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAvKiBCb3hQdHIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDREQjIzOTYyMzVFNDNFQzAwMzI4RjE3IC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNG
MyAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMwMkJEQUEyNDA0QjkyNDAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0JveFB0
ci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Cb3hQdHIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmY0ODIwYzk0ZjU4Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQm94UHRyLmNwcApAQCAtMCww
ICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkxvZ2dlci5oIgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KKworbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgeworCitzdHJ1Y3QgQm94UHRyTG9nZ2VyIHsKKyAgICBCb3hQdHJMb2dnZXIo
Y29uc3QgY2hhciogbmFtZSk7CisgICAgc3RhdGljIEJveFB0ckxvZ2dlciogY3JlYXRlKGNvbnN0
IGNoYXIqIG5hbWUpIHsgcmV0dXJuIG5ldyBCb3hQdHJMb2dnZXIobmFtZSk7IH0KKyAgICBjb25z
dCBjaGFyJiBuYW1lOworfTsKKworQm94UHRyTG9nZ2VyOjpCb3hQdHJMb2dnZXIoY29uc3QgY2hh
ciogbmFtZSkKKyAgICA6IG5hbWUgeyAqbmFtZSB9Cit7CisgICAgbG9nKCkgPDwgImNyZWF0ZSgi
IDw8IG5hbWUgPDwgIikgIjsKK30KKwordm9pZCBib3hQdHJMb2dnZXJEZWxldGVyKEJveFB0ckxv
Z2dlciogbG9nZ2VyKQoreworICAgIGxvZygpIDw8ICJkZWxldGUoIiA8PCAmbG9nZ2VyLT5uYW1l
IDw8ICIpICI7CisgICAgZGVsZXRlIGxvZ2dlcjsKK30KKworfTsKKworbmFtZXNwYWNlIFdURiB7
CisKK1dURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2Vy
LCBUZXN0V2ViS2l0QVBJOjpib3hQdHJMb2dnZXJEZWxldGVyKTsKKworfQorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV1RGX0JveFB0ciwgQmFzaWMpCit7CisgICAgeworICAg
ICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBlbXB0eTsKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNl
LCBzdGF0aWNfY2FzdDxib29sPihlbXB0eSkpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoIiIs
IHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBh
ID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dl
cj4gcHRyID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgc3RhdGlj
X2Nhc3Q8Ym9vbD4ocHRyKSk7CisgICAgICAgIEVYUEVDVF9FUShhLCBwdHItPmdldCgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGEtPm5hbWUsICgqcHRyKS0+bmFtZSk7CisgICAgfQorICAgIEVYUEVD
VF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisK
KyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJh
Iik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOwor
ICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMihwMSk7CisgICAgICAgIEVYUEVDVF9FUShh
LCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYSwgcDItPmdldCgpKTsKKyAgICB9Cisg
ICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgZGVsZXRlKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpj
cmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDEgPSBjcmVhdGVCb3hQ
dHIoYSk7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAyID0gcDE7CisgICAgICAgIEVY
UEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYSwgcDItPmdldCgpKTsK
KyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgZGVsZXRlKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRy
TG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDEgPSBj
cmVhdGVCb3hQdHIoYSk7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAyID0gV1RGTW92
ZShwMSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpKTsK
KyAgICAgICAgRVhQRUNUX0VRKGEsIHAyLT5nZXQoKSk7CisgICAgfQorICAgIEVYUEVDVF9TVFJF
USgiY3JlYXRlKGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7
CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7Cisg
ICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOworICAgICAg
ICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMihXVEZNb3ZlKHAxKSk7CisgICAgICAgIEVYUEVDVF9F
UShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHAy
LT5nZXQoKSk7CisgICAgfQorICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciog
YSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dn
ZXI+IHB0ciA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0
KCkpOworICAgICAgICBwdHIgPSBudWxscHRyOworICAgICAgICBFWFBFQ1RfRVEoZmFsc2UsIHN0
YXRpY19jYXN0PGJvb2w+KHB0cikpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShh
KSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Cb3hQ
dHIsIEFzc2lnbm1lbnQpCit7CisgICAgeworICAgICAgICBCb3hQdHJMb2dnZXIqIGEgPSBCb3hQ
dHJMb2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQdHJMb2dnZXIqIGIgPSBCb3hQdHJM
b2dnZXI6OmNyZWF0ZSgiYiIpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMSA9IGNy
ZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDIgPSBjcmVhdGVC
b3hQdHIoYik7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBF
Q1RfRVEoYiwgcDItPmdldCgpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICAgICAgcDEg
PSBwMjsKKyAgICAgICAgRVhQRUNUX0VRKGIsIHAxLT5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9F
UShiLCBwMi0+Z2V0KCkpOworICAgICAgICBsb2coKSA8PCAifCAiOworICAgIH0KKyAgICBFWFBF
Q1RfU1RSRVEoImNyZWF0ZShhKSBjcmVhdGUoYikgfCBkZWxldGUoYSkgfCBkZWxldGUoYikgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBCb3hQdHJMb2dnZXIqIGEg
PSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQdHJMb2dnZXIqIGIgPSBC
b3hQdHJMb2dnZXI6OmNyZWF0ZSgiYiIpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBw
MSA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDIgPSBj
cmVhdGVCb3hQdHIoYik7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAg
ICBFWFBFQ1RfRVEoYiwgcDItPmdldCgpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICAg
ICAgcDEgPSBXVEZNb3ZlKHAyKTsKKyAgICAgICAgRVhQRUNUX0VRKGIsIHAxLT5nZXQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocDIpKTsKKyAgICAgICAg
bG9nKCkgPDwgInwgIjsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgY3JlYXRl
KGIpIHwgZGVsZXRlKGEpIHwgZGVsZXRlKGIpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKwor
ICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEi
KTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcHRyID0gY3JlYXRlQm94UHRyKGEpOwor
ICAgICAgICBFWFBFQ1RfRVEoYSwgcHRyLT5nZXQoKSk7CisgICAgICAgIGxvZygpIDw8ICJ8ICI7
CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi13YXJuaW5nLW9wdGlvbiIKKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NlbGYtYXNzaWduLW92ZXJsb2FkZWQi
CisjZW5kaWYKKyAgICAgICAgcHRyID0gcHRyOworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgICAgIEVYUEVDVF9FUShhLCBwdHIt
PmdldCgpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVR
KCJjcmVhdGUoYSkgfCB8IGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAg
ICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7
CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHB0ciA9IGNyZWF0ZUJveFB0cihhKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0KCkpOworI2lmIENPTVBJTEVSKENMQU5HKQorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3NlbGYtbW92ZSIKKyNlbmRpZgorICAgICAgICBwdHIgPSBXVEZNb3ZlKHB0cik7CisjaWYg
Q09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAg
ICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0KCkpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEo
ImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNU
KFdURl9Cb3hQdHIsIE9wZXJhdG9ycykKK3sKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciog
YSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0ckxvZ2dlciogYiA9
IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJiIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+
IHAxID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMiA9
IGNyZWF0ZUJveFB0cihiKTsKKyAgICAgICAgRVhQRUNUX0VRKCpwMSwgKnAxKTsKKyAgICAgICAg
RVhQRUNUX05FKCpwMSwgKnAyKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkg
Y3JlYXRlKGIpIGRlbGV0ZShiKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBCb3hQdHJMb2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgi
YSIpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsK
KyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDIocDEpOworICAgICAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8Ym9vbD4ocDEpLCB0cnVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCFwMSwgZmFs
c2UpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2Vy
PiBlbXB0eTsKKyAgICAgICAgRVhQRUNUX0VRKCFlbXB0eSwgdHJ1ZSk7CisgICAgICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxib29sPihlbXB0eSksIGZhbHNlKTsKKyAgICB9CisgICAgRVhQRUNU
X1NUUkVRKCIiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK307CmRpZmYgLS1naXQgYS9U
b29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQu
bW9kdWxlcwppbmRleCA5NTZmMTI2ZDViNzUuLjBjMWE4OTRiNWM4MiAxMDA2NDQKLS0tIGEvVG9v
bHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhidWls
ZC5tb2R1bGVzCkBAIC0xMSw2ICsxMSwxMiBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1
Z2lucy1iYWQiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CiAgICAgICA8ZGVw
IHBhY2thZ2U9ImdzdHJlYW1lci12YWFwaSIvPgorICAgICAgPGlmIGNvbmRpdGlvbi1zZXQ9Ik9w
ZW5DRE0iPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4KKyAgICAgICAgPGRlcCBw
YWNrYWdlPSJ3aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItY2RtaS13
aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItbmFub3NlcnZpY2VzIi8+
CisgICAgICA8L2lmPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21ldGFtb2R1bGU+CiAKQEAg
LTE5LDYgKzI1LDggQEAKICAgICAgIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Au
b3JnL3NyYy8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ2l0aHViLXRh
cmJhbGwiCiAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vIi8+CisgIDxyZXBvc2l0b3J5
IHR5cGU9ImdpdCIgbmFtZT0iZ2l0aHViLXNzaCIKKyAgICAgIGhyZWY9ImdpdEBnaXRodWIuY29t
OiIvPgogICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20iCiAgICAgICBocmVmPSJodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vd2Vi
bS8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJhb21lZGlhLmdvb2dsZXNvdXJj
ZS5jb20iCkBAIC03OSw2ICs4Nyw3IEBACiAKICAgICA8YnJhbmNoIGhhc2g9InNoYTI1Njo0MGJi
M2JhZmRhMjVjMGI3MzljOGZjMzZlNDgzODBmY2NmNjFjNGQzZjgzNzQ3ZTk3YWMzZjliMDE3MWIx
MzE5IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0ke3ZlcnNpb259
LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNo
IGZpbGU9Imdvb2QtMDAwMS1xdGRlbXV4LVNwZWNpZnktUkVESVJFQ1QtaW5mb3JtYXRpb24taW4t
ZXJyb3ItbWVzc2FnLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCB1cHN0cmVhbSwgc2hv
dWxkIGJlIHNoaXBwZWQgaW4gMS4xNi4zIC0tPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVn
aW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVm
YXVsdC1raWQucGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgog
CkBAIC05Miw2ICsxMDEsNyBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogICAgIDxicmFuY2ggaGFz
aD0ic2hhMjU2OmYxY2I3YWEyMzg5NTY5YTUzNDM2NjFhYWU0NzNmMGE5NDBhOTBiODcyMDAxODI0
YmM0N2ZhODA3MmEwNDFlNzQiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJh
ZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgog
ICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEt
V0FSTklORy13aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdl
ZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcv
Z3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KKyAgICAgIDxw
YXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9u
LWRhdGEucGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBA
IC0xMjUsNCArMTM1LDg5IEBACiAgICAgICAgICAgIGNoZWNrb3V0ZGlyPSJsaWJ2YS0ke3ZlcnNp
b259IiByZXBvPSJnaXRodWItdGFyYmFsbCIvPgogICA8L21lc29uPgogCisgIDxjbWFrZSBpZD0i
dGh1bmRlciIKKyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9u
fSAtRFBPUlQ9ODA4MQorICAgICAgICAgICAgICAgICAgICAtREJJTkRJTkc9MC4wLjAuMCAtRElE
TEVfVElNRT0xODAKKyAgICAgICAgICAgICAgICAgICAgLURQRVJTSVNURU5UX1BBVEg9L3RtcC90
aHVuZGVyL3BlcnNpc3RlbnQKKyAgICAgICAgICAgICAgICAgICAgLURWT0xBVElMRV9QQVRIPS90
bXAvdGh1bmRlci92b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAtRERBVEFfUEFUSD0ke3By
ZWZpeH0vc2hhcmUvV1BFRnJhbWV3b3JrCisgICAgICAgICAgICAgICAgICAgIC1EU1lTVEVNX1BB
VEg9JHtwcmVmaXh9L2xpYi93cGVmcmFtZXdvcmsvcGx1Z2lucworICAgICAgICAgICAgICAgICAg
ICAtRFBST1hZU1RVQl9QQVRIPSR7cHJlZml4fS9saWIvd3BlZnJhbWV3b3JrL3Byb3h5c3R1YnMK
KyAgICAgICAgICAgICAgICAgICAgLURPT01BREpVU1Q9IC1EQlVJTERfVFlQRT1SZWxlYXNlU3lt
Ym9scworICAgICAgICAgICAgICAgICAgICAtREJMVUVUT09USF9TVVBQT1JUPU9GRiAtRFZJUlRV
QUxJTlBVVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURDT01QT1NJVE9SQ0xJRU5UPU9GRiAt
RENPTVBPU0lUT1JDTElFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQlJPQURDQVNUPU9G
RiAtRENETUk9T04gLURDRE1JX0JDTV9ORVhVU19TVlA9T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EQ0RNSV9BREFQVEVSX0lNUExFTUVOVEFUSU9OPWdzdHJlYW1lcgorICAgICAgICAgICAgICAg
ICAgICAtREdTVFJFQU1FUkNMSUVOVD1PRkYgLURQUk9WSVNJT05QUk9YWT1PRkYKKyAgICAgICAg
ICAgICAgICAgICAgLURTRUNVUklUWUFHRU5UPU9GRiAtRENPTVBPU0lUT1JTRVJWRVJQTFVHSU49
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1dFQktJVEJST1dTRVI9T0ZGIC1EUExV
R0lOX1dFQlNFUlZFUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRVNQSUFMPU9G
RiAtRE5FVFdPUktDT05UUk9MPU9GRiI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFs
bCIgbW9kdWxlPSJyZGtjZW50cmFsL1RodW5kZXIvdGFyYmFsbC8ke3ZlcnNpb259IiB2ZXJzaW9u
PSI2YWRlZWUwMDZmZWNkZDFiMmJjNDliZDM2MGQ0OWZjNTcxOGRlYjYxIiBjaGVja291dGRpcj0i
dGh1bmRlciIvPgorICA8L2NtYWtlPgorCisgIDxhdXRvdG9vbHMgaWQ9IndpZGV2aW5lIiBzdXBw
b3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iCisgICAgICAgICAgICAgYXV0b2dlbi1zaD0iYnVp
bGQucHkiIGF1dG9nZW5hcmdzPSJ4ODYtNjQgLXIgLURPRU1DUllQVE9fS0VZQk9YX1BBVEhfUFJF
RklYPSR7cHJlZml4fSIKKyAgICAgICAgICAgICBtYWtlYXJncz0iQlVJTERUWVBFPVJlbGVhc2Ug
LWoxIgorICAgICAgICAgICAgIG1ha2VpbnN0YWxsYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWox
IC1mIE1ha2VmaWxlLmluc3RhbGwiID4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBw
YWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCByZXBv
PSJnaXRodWItc3NoIiBtb2R1bGU9Ik1ldHJvbG9naWNhbC93aWRldmluZS5naXQiIGNoZWNrb3V0
ZGlyPSJ3aWRldmluZSIgdGFnPSIyNjRjMTM3NTAxYjI4OWUzNTZiMTFkYWNjMzI5YjA1NjM2ZWE5
Mzk2Ii8+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxjbWFrZSBpZD0idGh1bmRlci1jZG1pLXdpZGV2
aW5lIiBjbWFrZWFyZ3M9Ii1EQ01BS0VfQlVJTERfVFlQRT1SZWxXaXRoRGViSW5mbyI+CisgICAg
PGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIKKyAgICAgICAgICAgIG1vZHVsZT0iV2ViUGxh
dGZvcm1Gb3JFbWJlZGRlZC9PQ0RNLVdpZGV2aW5lL3RhcmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAg
ICAgICAgIHZlcnNpb249IjlkYzM5NjRiMDMzOWFiYjcwZDY2ZTRmOTMxNjMyMzI0YTA3NWQ2ZDQi
IGNoZWNrb3V0ZGlyPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8ZGVwZW5kZW5jaWVz
PgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9Indp
ZGV2aW5lIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIDwvY21ha2U+CisKKyAgPGNtYWtlIGlk
PSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIKKyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZF
UkVOQ0U9JHt2ZXJzaW9ufSAtREJVSUxEX1RZUEU9UmVsZWFzZVN5bWJvbHMKKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fQ09CQUxUPU9GRiAtRFBMVUdJTl9DT01NQU5ERVI9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX0RFVklDRUlORk89T0ZGIC1EUExVR0lOX0RJU1BMQVlJ
TkZPPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ERVZJQ0VJREVOVElGSUNBVElP
Tj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRFNSRVNPTFVUSU9OPU9GRiAtRFBM
VUdJTl9ESENQU0VSVkVSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ESUFMU0VS
VkVSPU9GRiAtRFBMVUdJTl9ESUNUSU9OQVJZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9JT0NPTk5FQ1RPUj1PRkYgLURQTFVHSU5fRUdMVEVTVD1PRkYKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fRlJPTlRQQU5FTD1PRkYgLURQTFVHSU5fTE9DQVRJT05TWU5DPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9NT05JVE9SPU9GRiAtRFBMVUdJTl9ORVRXT1JL
Q09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUk9T04KKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQVVUT1NUQVJUPXRydWUKKyAgICAg
ICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfT09QPXRydWUKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fT1BFTkNETUlfV0lERVZJTkU9T04KKyAgICAgICAgICAgICAgICAgICAg
LURQTFVHSU5fT1BFTkNETUlfQ0xFQVJLRVk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX09QRU5DRE1JX1BMQVlSRUFEWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5f
T1BFTkNETUlfTkFHUkE9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1J
X05DQVM9T0ZGIC1EUExVR0lOX0JMVUVUT09USD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fQkxVRVRPT1RIUkVNT1RFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fUkVNT1RFQ09OVFJPTD1PRkYgLURQTFVHSU5fU05BUFNIT1Q9T0ZGCisgICAgICAgICAg
ICAgICAgICAgIC1EUExVR0lOX1NZU1RFTUNPTU1BTkRTPU9GRgorICAgICAgICAgICAgICAgICAg
ICAtRFBMVUdJTl9GSUxFVFJBTlNGRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X1RFU1RDT05UUk9MTEVSPU9GRiAtRFBMVUdJTl9KU09OUlBDPU9GRgorICAgICAgICAgICAgICAg
ICAgICAtRFBMVUdJTl9URVNUVVRJTElUWT1PRkYgLURQTFVHSU5fVElNRVNZTkM9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX1RSQUNFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fVk9MVU1FQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fV0VCS0lUQlJPV1NFUj1PRkYgLURQTFVHSU5fUlRTUENMSUVOVD1PRkYKKyAgICAgICAg
ICAgICAgICAgICAgLURQTFVHSU5fV0VCUEE9T0ZGIC1EUExVR0lOX1dFQlBST1hZPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XRUJTRVJWRVI9T0ZGIC1EUExVR0lOX1dFQlNIRUxM
PU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XSUZJQ09OVFJPTD1PRkYgLURQTFVH
SU5fUEFDS0FHRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1BMQVlFUklORk89
T0ZGIC1EUExVR0lOX1BPV0VSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9QUk9D
RVNTTU9OSVRPUj1PRkYgLURQTFVHSU5fU1RSRUFNRVI9T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EUExVR0lOX1NQQVJLPU9GRiAtRFBMQVRGT1JNX0xJTlVYPU9OCisgICAgICAgICAgICAgICAg
ICAgIC1EUExVR0lOX01FU1NFTkdFUj1PRkYgLURQTFVHSU5fU0VDVVJJVFlBR0VOVD1PRkYKKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUlBDTElOSz1PRkYgLURQTFVHSU5fQ09NUE9TSVRP
Uj1PRkYiPgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRhcmJhbGwiCisgICAgICAgICAgICBt
b2R1bGU9InJka2NlbnRyYWwvVGh1bmRlck5hbm9TZXJ2aWNlcy90YXJiYWxsLyR7dmVyc2lvbn0i
CisgICAgICAgICAgICB2ZXJzaW9uPSJkZTlmM2Q0MGQ4NDA4ZWU4MTFjNDhmNDg2YzliMTRmNzUy
Yzk3MzQ1IgorICAgICAgICAgICAgY2hlY2tvdXRkaXI9InRodW5kZXItbmFub3NlcnZpY2VzIi8+
CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRlciIvPgorICAg
ICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8L2RlcGVuZGVu
Y2llcz4KKyAgPC9jbWFrZT4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9nc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0
aW9uLWRhdGEucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQt
MDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44Zjk5NDZmMGU5YjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1w
YXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKQEAgLTAsMCArMSwyNDcgQEAKK0Zyb20gMDA1MmYz
ZDgzMTVlOGNlZmIwNGE2MmE2NGNhYzE3Y2JmYmM2YjhiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw
MDEKK0Zyb206IENoYXJsaWUgVHVybmVyIDxjaHR1cm5lQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwg
MjUgTWF5IDIwMTggMDk6NDM6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUGFyc2UgcGxheXJl
YWR5IHBheWxvYWQuCisKK0xvb2sgYXQgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBkYXRhIHBheWxv
YWQgdG8gZXh0cmFjdCBkZWZhdWx0IGtleSBpZHMKK2ZvciBkZWNyeXB0aW5nIHNhbXBsZXMuIFRo
ZSBmb3JtYXQgb2YgdGhpcyBwYXlsb2FkIHNlZW1zIHRvIGJlCitwcm9wcmlldGFyeS4KKworU2ln
bmVkLW9mZi1ieTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+
CistLS0KKyBleHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMgICAgfCAgMTQgKystCisg
ZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIHwgMTM4ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKworIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaCB8ICAg
MSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQor
CitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Nt
b290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCitpbmRleCBiY2VhOGNhLi40ZmE5NWI5IDEwMDY0
NAorLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCisrKysgYi9leHQvc21v
b3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMKK0BAIC00OTUsNyArNDk1LDE5IEBAIGdzdF9tc3Nf
ZGVtdXhfc2V0dXBfc3RyZWFtcyAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4KQorICAgICAgICAg
ICBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKHByb3RlY3Rpb25fc3lzdGVtX2lkLCBwcm90ZWN0
aW9uX2J1ZmZlciwKKyAgICAgICAgICAgInNtb290aC1zdHJlYW1pbmciKTsKKyAKKy0gICAgICBH
U1RfTE9HX09CSkVDVCAoc3RyZWFtLCAiUXVldWVpbmcgUHJvdGVjdGlvbiBldmVudCBvbiBzb3Vy
Y2UgcGFkIik7CisrICAgICAgR3N0QnVmZmVyICprZXlfaWQgPSBnc3RfbXNzX21hbmlmZXN0X2dl
dF9rZXlfaWQgKG1zc2RlbXV4LT5tYW5pZmVzdCk7CisrICAgICAgaWYgKCFnc3RfYnVmZmVyX2dl
dF9zaXplIChrZXlfaWQpKSB7CisrICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN0cmVhbSwK
KysgICAgICAgICAgICAicHJvdGVjdGVkIG1hbmlmZXN0LCBidXQgbm8ga2V5IGlkcyBhdmFpbGFi
bGUiKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwK
KysgICAgICAgICAgICAiQWRkaW5nIGtleSBpZCB0byB0aGUgcHJvdGVjdGlvbiBldmVudCBvZiBz
aXplICVsdSIsCisrICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoa2V5X2lkKSk7Cisr
ICAgICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1
Y3R1cmUgKGV2ZW50KTsKKysgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJr
ZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIsIGtleV9pZCwgTlVMTCk7CisrICAgICAgfQorKworKyAg
ICAgIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0sICJRdWV1aW5nIFByb3RlY3Rpb24gZXZlbnQgb24g
c291cmNlIHBhZCIpOworICAgICAgIGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fcXVldWVfZXZl
bnQgKChHc3RBZGFwdGl2ZURlbXV4U3RyZWFtICopIHN0cmVhbSwKKyAgICAgICAgICAgZXZlbnQp
OworICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByb3RlY3Rpb25fYnVmZmVyKTsKK2RpZmYgLS1n
aXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMgYi9leHQvc21vb3Roc3Ry
ZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKK2luZGV4IGM4NTVjYjMuLmRmMzEzMzAgMTAwNjQ0Cist
LS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKKysrKyBiL2V4dC9zbW9v
dGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYworQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVk
ZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorICNpbmNsdWRlIDxsaWJ4
bWwvdHJlZS5oPgorKyNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KKysjaW5jbHVkZSA8bGlieG1s
L3hwYXRoSW50ZXJuYWxzLmg+CisgCisgLyogZm9yIHBhcnNpbmcgaDI2NCBjb2RlYyBkYXRhICov
CisgI2luY2x1ZGUgPGdzdC9jb2RlY3BhcnNlcnMvZ3N0aDI2NHBhcnNlci5oPgorQEAgLTEwOSw2
ICsxMTEsMTAgQEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVzdAorICAgR1N0cmluZyAqcHJvdGVjdGlv
bl9zeXN0ZW1faWQ7CisgICBnY2hhciAqcHJvdGVjdGlvbl9kYXRhOworIAorKyAgLy8gRklYTUU6
IFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBrZXkgaWRzIHByZXNlbnQgaW4gcHJvdGVjdGVkIG1hbmlm
ZXN0cy4KKysgIGdjaGFyICprZXlfaWQ7CisrICBnc2l6ZSBrZXlfaWRfbGVuOworKworICAgR1NM
aXN0ICpzdHJlYW1zOworIH07CisgCitAQCAtMzAwLDYgKzMwNiwxMjIgQEAgX2dzdF9tc3Nfc3Ry
ZWFtX2luaXQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVh
bSwKKyAgIGdzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2luaXQgKCZzdHJlYW0tPmZyYWdtZW50X3Bh
cnNlcik7CisgfQorIAorK3N0YXRpYyB2b2lkCisrX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9k
YXRhIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorK3sKKysgIGd1Y2hhciAqZGVjb2RlZF9w
cm90ZWN0aW9uX2RhdGEgPSBOVUxMOworKyAgZ3NpemUgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFf
bGVuID0gMDsKKysgIHhtbENoYXIgKnByb3RlY3Rpb25fZGF0YV90ZXh0ID0gTlVMTDsKKysgIGlu
dCBwcm90ZWN0aW9uX2RhdGFfdGV4dF9sZW4gPSAwOworKyAgeG1sRG9jUHRyIHByb3RlY3Rpb25f
ZGF0YV94bWwgPSBOVUxMOworKyAgLy8gTm90ZSwgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGZyZWUn
ZCwgZnJlZWluZyB0aGUgZG9jIHB0ciB3aWxsIGZyZWUgdGhpcy4KKysgIHhtbE5vZGUgKnByb3Rl
Y3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSBOVUxMOworKyAgY29uc3QgeG1sQ2hhciAqcHJvdGVj
dGlvbl9kYXRhX25hbWVzcGFjZSA9IE5VTEw7CisrICB4bWxYUGF0aENvbnRleHRQdHIgeHBhdGhf
Y3R4ID0gTlVMTDsKKysgIHhtbFhQYXRoT2JqZWN0UHRyIHhwYXRoX29iaiA9IE5VTEw7CisrICB4
bWxOb2RlU2V0UHRyIGtleV9pZF9ub2RlID0gTlVMTDsKKysgIGdzaXplIHByb3RlY3Rpb25fZGF0
YV94bWxfbGVuID0gMDsKKysgIGd1Y2hhciAqc3RhcnRfdGFnID0gTlVMTDsKKysKKysgIGRlY29k
ZWRfcHJvdGVjdGlvbl9kYXRhID0KKysgICAgICBnX2Jhc2U2NF9kZWNvZGUgKG1hbmlmZXN0LT5w
cm90ZWN0aW9uX2RhdGEsICZkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YV9sZW4pOworKworKyAgc3Rh
cnRfdGFnID0gZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGE7CisrCisrICAvLyBUaGUgcHJvdGVjdGlv
biBkYXRhIHN0YXJ0cyB3aXRoIGEgMTAtYnl0ZSBQbGF5UmVhZHkgdmVyc2lvbgorKyAgLy8gaGVh
ZGVyIHRoYXQgbmVlZHMgdG8gYmUgc2tpcHBlZCBvdmVyIHRvIGF2b2lkIFhNTCBwYXJzaW5nCisr
ICAvLyBlcnJvcnMuCisrICB3aGlsZSAoc3RhcnRfdGFnICYmICpzdGFydF90YWcgIT0gJzwnKQor
KyAgICBzdGFydF90YWcrKzsKKysKKysgIGlmICghc3RhcnRfdGFnKSB7CisrICAgIEdTVF9FUlJP
UiAoImZhaWxlZCB0byBmaW5kIGEgc3RhcnQgdGFnIGluIHByb3RlY3Rpb24gZGF0YSBwYXlsb2Fk
Iik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICBwcm90ZWN0aW9uX2RhdGFfeG1sX2xl
biA9CisrICAgICAgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuIC0gKHN0YXJ0X3RhZyAtIGRl
Y29kZWRfcHJvdGVjdGlvbl9kYXRhKTsKKysgIHByb3RlY3Rpb25fZGF0YV94bWwgPQorKyAgICAg
IHhtbFJlYWRNZW1vcnkgKChjb25zdCBnY2hhciAqKSBzdGFydF90YWcsIHByb3RlY3Rpb25fZGF0
YV94bWxfbGVuLAorKyAgICAgICJwcm90ZWN0aW9uX2RhdGEiLCAidXRmLTE2IiwgMCk7CisrCisr
ICBpZiAoIXByb3RlY3Rpb25fZGF0YV94bWwpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRv
IHBhcnNlIHByb3RlY3Rpb24gZGF0YSBYTUwiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysK
KysgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxU
KSA+PSBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICB4bWxEb2NEdW1wTWVtb3J5RW5jIChwcm90
ZWN0aW9uX2RhdGFfeG1sLCAmcHJvdGVjdGlvbl9kYXRhX3RleHQsCisrICAgICAgICAmcHJvdGVj
dGlvbl9kYXRhX3RleHRfbGVuLCAidXRmOCIpOworKyAgICBHU1RfTUVNRFVNUCAoInByb3RlY3Rp
b24gZGF0YSBYTUwiLCBwcm90ZWN0aW9uX2RhdGFfdGV4dCwKKysgICAgICAgIHByb3RlY3Rpb25f
ZGF0YV90ZXh0X2xlbik7CisrICAgIHhtbEZyZWUgKHByb3RlY3Rpb25fZGF0YV90ZXh0KTsKKysg
IH0KKysKKysgIHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxl
bWVudCAocHJvdGVjdGlvbl9kYXRhX3htbCk7CisrICBpZiAocHJvdGVjdGlvbl9kYXRhX3Jvb3Rf
ZWxlbWVudC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFIHx8CisrICAgICAgeG1sU3RyY21wIChw
cm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT5uYW1lLAorKyAgICAgICAgICAoY29uc3QgeG1s
Q2hhciAqKSAiV1JNSEVBREVSIikgfHwgIXByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5z
KSB7CisrICAgIEdTVF9FUlJPUiAoImludmFsaWQgcHJvdGVjdGlvbiBkYXRhIFhNTCIpOworKyAg
ICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgeHBhdGhfY3R4ID0geG1sWFBhdGhOZXdDb250ZXh0
IChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysgIGlmICgheHBhdGhfY3R4KSB7CisrICAgIEdTVF9F
UlJPUiAoImZhaWxlZCB0byBjcmVhdGUgeHBhdGggY29udGV4dCIpOworKyAgICBnb3RvIGJlYWNo
OworKyAgfQorKworKyAgcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IHByb3RlY3Rpb25fZGF0
YV9yb290X2VsZW1lbnQtPm5zLT5ocmVmOworKyAgaWYgKHhtbFhQYXRoUmVnaXN0ZXJOcyAoeHBh
dGhfY3R4LCAoY29uc3QgeG1sQ2hhciAqKSAicHJoZHIiLAorKyAgICAgICAgICBwcm90ZWN0aW9u
X2RhdGFfbmFtZXNwYWNlKSA8IDApIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHJlZ2lz
dGVyIFhNTCBuYW1lc3BhY2UiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIHhwYXRo
X29iaiA9CisrICAgICAgeG1sWFBhdGhFdmFsRXhwcmVzc2lvbiAoKGNvbnN0IHhtbENoYXIgKikg
Ii8vcHJoZHI6S0lEIiwgeHBhdGhfY3R4KTsKKysgIGlmICgheHBhdGhfb2JqKSB7CisrICAgIEdT
VF9ERUJVRyAoImZhaWxlZCB0byBldmFsIFhQYXRoIGV4cHJlc3Npb24iKTsKKysgICAgZ290byBi
ZWFjaDsKKysgIH0KKysKKysgIGtleV9pZF9ub2RlID0geHBhdGhfb2JqLT5ub2Rlc2V0dmFsOwor
KyAgaW50IG51bV9rZXlfaWRzID0ga2V5X2lkX25vZGUgPyBrZXlfaWRfbm9kZS0+bm9kZU5yIDog
MDsKKysKKysgIEdTVF9ERUJVRyAoImZvdW5kICVkIGtleSBpZHMiLCBudW1fa2V5X2lkcyk7Cisr
CisrICBpZiAobnVtX2tleV9pZHMgIT0gMCAmJiAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0tPnR5
cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkpIHsKKysgICAgeG1sQ2hhciAqZW5jb2RlZF9rZXlfaWQg
PSB4bWxOb2RlR2V0Q29udGVudCAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0pOworKyAgICBnc2l6
ZSBkZWNvZGVkX2tleV9pZF9sZW47CisrICAgIGd1Y2hhciAqZGVjb2RlZF9rZXlfaWQgPQorKyAg
ICAgICAgZ19iYXNlNjRfZGVjb2RlICgoY29uc3QgZ2NoYXIgKikgZW5jb2RlZF9rZXlfaWQsICZk
ZWNvZGVkX2tleV9pZF9sZW4pOworKworKyAgICBHU1RfTUVNRFVNUCAoImtleSByZXRyaWV2ZWQi
LCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysKKysgICAgbWFuaWZlc3Qt
PmtleV9pZCA9IGdfcmVhbGxvYyAobWFuaWZlc3QtPmtleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVu
KTsKKysgICAgbWVtY3B5IChtYW5pZmVzdC0+a2V5X2lkLCBkZWNvZGVkX2tleV9pZCwgZGVjb2Rl
ZF9rZXlfaWRfbGVuKTsKKysgICAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSBkZWNvZGVkX2tleV9p
ZF9sZW47CisrCisrICAgIHhtbEZyZWUgKGVuY29kZWRfa2V5X2lkKTsKKysgICAgZ19mcmVlIChk
ZWNvZGVkX2tleV9pZCk7CisrICB9IGVsc2UgeworKyAgICBHU1RfRVJST1IgKCJpbnZhbGlkIFhN
TCBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrYmVhY2g6CisrICBpZiAo
ZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpCisrICAgIGdfZnJlZSAoZGVjb2RlZF9wcm90ZWN0aW9u
X2RhdGEpOworKyAgaWYgKHhwYXRoX2N0eCkKKysgICAgeG1sWFBhdGhGcmVlQ29udGV4dCAoeHBh
dGhfY3R4KTsKKysgIGlmICh4cGF0aF9vYmopCisrICAgIHhtbFhQYXRoRnJlZU9iamVjdCAoeHBh
dGhfb2JqKTsKKysgIGlmIChwcm90ZWN0aW9uX2RhdGFfeG1sKQorKyAgICB4bWxGcmVlRG9jIChw
cm90ZWN0aW9uX2RhdGFfeG1sKTsKKysKKysgIHJldHVybjsKKyt9CisgCisgc3RhdGljIHZvaWQK
KyBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAor
QEAgLTMyOSw2ICs0NTEsNyBAQCBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5p
ZmVzdCAqIG1hbmlmZXN0LAorIAorICAgICAgIG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9p
ZCA9IHN5c3RlbV9pZDsKKyAgICAgICBtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhID0gKGdjaGFy
ICopIHhtbE5vZGVHZXRDb250ZW50IChub2RlaXRlcik7CisrICAgICAgX2dzdF9tc3NfcGFyc2Vf
cHJvdGVjdGlvbl9kYXRhIChtYW5pZmVzdCk7CisgICAgICAgeG1sRnJlZSAoc3lzdGVtX2lkX2F0
dHJpYnV0ZSk7CisgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0zOTQsNiArNTE3LDkgQEAgZ3N0
X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCisgICAgIH0KKyAgIH0KKyAKKysg
IG1hbmlmZXN0LT5rZXlfaWQgPSBOVUxMOworKyAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSAwOwor
KworICAgZm9yIChub2RlaXRlciA9IHJvb3QtPmNoaWxkcmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIg
PSBub2RlaXRlci0+bmV4dCkgeworICAgICBpZiAobm9kZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1F
TlRfTk9ERQorICAgICAgICAgJiYgKHN0cmNtcCAoKGNvbnN0IGNoYXIgKikgbm9kZWl0ZXItPm5h
bWUsICJTdHJlYW1JbmRleCIpID09IDApKSB7CitAQCAtNDQwLDYgKzU2Niw5IEBAIGdzdF9tc3Nf
bWFuaWZlc3RfZnJlZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkKKyAKKyAgIGdfc2xpc3Rf
ZnJlZV9mdWxsIChtYW5pZmVzdC0+c3RyZWFtcywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfbXNzX3N0
cmVhbV9mcmVlKTsKKyAKKysgIGlmIChtYW5pZmVzdC0+a2V5X2lkKQorKyAgICBnX2ZyZWUgKG1h
bmlmZXN0LT5rZXlfaWQpOworKworICAgaWYgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9p
ZCAhPSBOVUxMKQorICAgICBnX3N0cmluZ19mcmVlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0
ZW1faWQsIFRSVUUpOworICAgeG1sRnJlZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSk7CitA
QCAtNDYyLDYgKzU5MSwxNSBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEg
KEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisgICByZXR1cm4gbWFuaWZlc3QtPnByb3RlY3Rp
b25fZGF0YTsKKyB9CisgCisrR3N0QnVmZmVyICoKKytnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlf
aWQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisreworKyAgR3N0QnVmZmVyICprZXlfaWRf
YnVmZmVyID0KKysgICAgICBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbWFuaWZlc3Qt
PmtleV9pZF9sZW4sIE5VTEwpOworKyAgZ3N0X2J1ZmZlcl9maWxsIChrZXlfaWRfYnVmZmVyLCAw
LCBtYW5pZmVzdC0+a2V5X2lkLCBtYW5pZmVzdC0+a2V5X2lkX2xlbik7CisrICByZXR1cm4ga2V5
X2lkX2J1ZmZlcjsKKyt9CisrCisgR1NMaXN0ICoKKyBnc3RfbXNzX21hbmlmZXN0X2dldF9zdHJl
YW1zIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorIHsKK2RpZmYgLS1naXQgYS9leHQvc21v
b3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1z
c21hbmlmZXN0LmgKK2luZGV4IDAzYjA2NmEuLjRlNmFkNzMgMTAwNjQ0CistLS0gYS9leHQvc21v
b3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcv
Z3N0bXNzbWFuaWZlc3QuaAorQEAgLTU2LDYgKzU2LDcgQEAgR3N0Q2xvY2tUaW1lIGdzdF9tc3Nf
bWFuaWZlc3RfZ2V0X21pbl9mcmFnbWVudF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5p
ZmUKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fc3lzdGVt
X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyBjb25zdCBnY2hhciAqIGdzdF9tc3Nf
bWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7
CisgZ2Jvb2xlYW4gZ3N0X21zc19tYW5pZmVzdF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RNc3NN
YW5pZmVzdCAqIG1hbmlmZXN0LCBnaW50NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCk7CisrR3N0
QnVmZmVyICogZ3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0KTsKKyAKKyBHc3RNc3NTdHJlYW1UeXBlIGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChH
c3RNc3NTdHJlYW0gKnN0cmVhbSk7CisgR3N0Q2FwcyAqIGdzdF9tc3Nfc3RyZWFtX2dldF9jYXBz
IChHc3RNc3NTdHJlYW0gKiBzdHJlYW0pOworLS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9v
bHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVw
c3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaCBiL1Rvb2xzL2dzdHJl
YW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1k
ZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi4xNWY1YmIzNDhhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBz
dHJlYW0tZGVtdXhlci1wcm92aWRlZC1hLWRlZmF1bHQta2lkLnBhdGNoCkBAIC0wLDAgKzEsMTAy
IEBACitGcm9tIGE4MTZkOGRhYjZiYjMzNzcwMTUwMjg5YTRhZWRlNDNlMmY3YWU0NzggTW9uIFNl
cCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGFybGllIFR1cm5lciA8Y2h0dXJuZUBnbWFpbC5j
b20+CitEYXRlOiBGcmksIDEwIE1heSAyMDE5IDIzOjM0OjQzICswMjAwCitTdWJqZWN0OiBbUEFU
Q0hdIENoZWNrIGlmIGFuIHVwc3RyZWFtIGRlbXV4ZXIgcHJvdmlkZWQgYSBkZWZhdWx0IGtpZC4K
KworU21vb3RoIHN0cmVhbWluZyBkZW11eGVycyBkbyBub3Qgc2VuZCBib3hlcyBjb250YWluaW5n
IG1ldGFkYXRhIGFib3V0Cit0aGUgc3RyZWFtLiBUaGV5IGhhdmUgdG8gc2VuZCBtZXRhZGF0YSAi
b3V0LW9mLWJhbmQiLgorCitGb3IgcGlmZiBlbmNvZGVkIHN0cmVhbXMsIGlmIG5vIGJveCBoYXMg
YmVlbiBmb3VuZCBjb250YWluaW5nIGEgZGVmYXVsdAora2lkIGZvciB0aGUgc2FtcGxlLCBjaGVj
ayBpZiBhbiB1cHN0cmVhbSBkZW11eGVyIGhhcyBwcm92aWRlZCBvbmUgdmlhIGEKK3Byb3RlY3Rp
b24gZXZlbnQsIGFuZCB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrLgorCitTaWduZWQtb2ZmLWJ5OiBY
YWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKy0tLQorIGdzdC9p
c29tcDQvcXRkZW11eC5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQg
YS9nc3QvaXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitpbmRleCBjZjE1
ZmFkNDYuLmU0NDliNDgwYyAxMDA2NDQKKy0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5jCisrKysg
Yi9nc3QvaXNvbXA0L3F0ZGVtdXguYworQEAgLTQ1MSw2ICs0NTEsNyBAQCBzdHJ1Y3QgX1F0RGVt
dXhTdHJlYW0KKyAgIGd1aW50MzIgcHJvdGVjdGlvbl9zY2hlbWVfdmVyc2lvbjsKKyAgIGdwb2lu
dGVyIHByb3RlY3Rpb25fc2NoZW1lX2luZm87ICAgICAgLyogc3BlY2lmaWMgdG8gdGhlIHByb3Rl
Y3Rpb24gc2NoZW1lICovCisgICBHUXVldWUgcHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWU7
CisrICBHc3RCdWZmZXIgKmRlZmF1bHRfa2lkOworIAorICAgZ2ludCByZWZfY291bnQ7ICAgICAg
ICAgICAgICAgLyogYXRvbWljICovCisgfTsKK0BAIC0yMDA4LDYgKzIwMDksNyBAQCBfY3JlYXRl
X3N0cmVhbSAoR3N0UVREZW11eCAqIGRlbXV4LCBndWludDMyIHRyYWNrX2lkKQorICAgc3RyZWFt
LT5zdHJlYW1fdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7CisgICBnc3RfdGFnX2xp
c3Rfc2V0X3Njb3BlIChzdHJlYW0tPnN0cmVhbV90YWdzLCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7
CisgICBnX3F1ZXVlX2luaXQgKCZzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVl
KTsKKysgIHN0cmVhbS0+ZGVmYXVsdF9raWQgPSBOVUxMOworICAgc3RyZWFtLT5yZWZfY291bnQg
PSAxOworICAgLyogY29uc2lzdGVudCBkZWZhdWx0IGZvciBwdXNoIGJhc2VkIG1vZGUgKi8KKyAg
IGdzdF9zZWdtZW50X2luaXQgKCZzdHJlYW0tPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CitA
QCAtMjQ3Niw2ICsyNDc4LDMyIEBAIGdzdF9xdGRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQ
YWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgIGNhc2UgR1NUX0VWRU5UX1BS
T1RFQ1RJT046CisgICAgIHsKKyAgICAgICBjb25zdCBnY2hhciAqc3lzdGVtX2lkID0gTlVMTDsK
KysgICAgICBHc3RCdWZmZXIgKmRlZmF1bHRfa2V5X2lkID0gTlVMTDsKKysgICAgICBjb25zdCBH
c3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKysgICAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBO
VUxMOworKyAgICAgIEdzdE1hcEluZm8gbWFwOworKworKyAgICAgIHN0cnVjdHVyZSA9IGdzdF9l
dmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7CisrICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFz
X2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIpKSB7Cisr
ICAgICAgICBnc3Rfc3RydWN0dXJlX2dldCAoc3RydWN0dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVf
QlVGRkVSLAorKyAgICAgICAgICAgICZkZWZhdWx0X2tleV9pZCwgTlVMTCk7CisrICAgICAgICBH
U1RfREVCVUdfT0JKRUNUIChkZW11eCwKKysgICAgICAgICAgICAicmVjZWl2ZWQgYSBkZWZhdWx0
IGtleSBpZCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAorKyAgICAgICAgICAgIGdzdF9idWZm
ZXJfZ2V0X3NpemUgKGRlZmF1bHRfa2V5X2lkKSk7CisrCisrICAgICAgICBpZiAoZ3N0X2RlYnVn
X2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkgPj0KKysgICAgICAgICAg
ICBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoZGVmYXVs
dF9rZXlfaWQsICZtYXAsIEdTVF9NQVBfUkVBRCk7CisrICAgICAgICAgIEdTVF9NRU1EVU1QX09C
SkVDVCAoZGVtdXgsICJkZWZhdWx0IGtleSBpZCIsIChndWludDggKikgbWFwLmRhdGEsCisrICAg
ICAgICAgICAgICBtYXAuc2l6ZSk7CisrICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGRlZmF1
bHRfa2V5X2lkLCAmbWFwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChRVERFTVVYX05f
U1RSRUFNUyAoZGVtdXgpKSB7CisrICAgICAgICAgIHN0cmVhbSA9IFFUREVNVVhfTlRIX1NUUkVB
TSAoZGVtdXgsIDApOworKyAgICAgICAgICBzdHJlYW0tPmRlZmF1bHRfa2lkID0gZGVmYXVsdF9r
ZXlfaWQ7CisrICAgICAgICB9CisrICAgICAgfQorIAorICAgICAgIGdzdF9ldmVudF9wYXJzZV9w
cm90ZWN0aW9uIChldmVudCwgJnN5c3RlbV9pZCwgTlVMTCwgTlVMTCk7CisgICAgICAgR1NUX0RF
QlVHX09CSkVDVCAoZGVtdXgsICJSZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50IGZvciBzeXN0ZW0g
SUQgJXMiLAorQEAgLTI2ODgsNiArMjcxNiw4IEBAIGdzdF9xdGRlbXV4X3N0cmVhbV9jbGVhciAo
UXREZW11eFN0cmVhbSAqIHN0cmVhbSkKKyAgIGdfcXVldWVfZm9yZWFjaCAoJnN0cmVhbS0+cHJv
dGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUsCisgICAgICAgKEdGdW5jKSBnc3RfZXZlbnRfdW5y
ZWYsIE5VTEwpOworICAgZ19xdWV1ZV9jbGVhciAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVf
ZXZlbnRfcXVldWUpOworKyAgaWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpCisrICAgIGdzdF9idWZm
ZXJfdW5yZWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpOworICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2Zs
dXNoX3NlZ21lbnRzX2RhdGEgKHN0cmVhbSk7CisgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hf
c2FtcGxlc19kYXRhIChzdHJlYW0pOworIH0KK0BAIC0yOTU0LDYgKzI5ODQsMTkgQEAgcXRkZW11
eF9wYXJzZV9waWZmIChHc3RRVERlbXV4ICogcXRkZW11eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVy
LCBnaW50IGxlbmd0aCwKKyAgICAgdXNlc19zdWJfc2FtcGxlX2VuY3J5cHRpb24gPSBUUlVFOwor
ICAgfQorIAorKyAgLy8gSW4gdGhlIGNhc2Ugb2Ygc21vb3RoIHN0cmVhbWluZywgd2UgbmV2ZXIg
Z2V0IG1vb3YgYm94ZXMgYW5kIHRoZWlyCisrICAvLyBkZWZhdWx0IGVuY3J5cHRpb24gbWV0YWRh
dGEuIEluc3RlYWQsIHRoZSBkZW11eGVyIGhhcyB0byBwYXJzZSB0aGlzCisrICAvLyBpbmZvcm1h
dGlvbiBvdXQgb2YgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBwYXlsb2FkcyBhbmQgbWFrZSBpdCBh
dmFpbGJsZQorKyAgLy8gc29tZWhvdyB0byB1cy4KKysgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNf
ZmllbGQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgImtpZCIpKSB7CisrICAgIGlmICgh
c3RyZWFtLT5kZWZhdWx0X2tpZCkgeworKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11
eCwgIk5vIGF2YWlsYWJsZSBrZXkgaWQgZm9yIHNhbXBsZSIpOworKyAgICB9IGVsc2UgeworKyAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzc19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMsICJraWQi
LCBHU1RfVFlQRV9CVUZGRVIsCisrICAgICAgICAgIHN0cmVhbS0+ZGVmYXVsdF9raWQsIE5VTEwp
OworKyAgICB9CisrICB9CisrCisgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHNzX2lu
Zm8tPmRlZmF1bHRfcHJvcGVydGllcywgIml2X3NpemUiLAorICAgICAgICAgICAmaXZfc2l6ZSkp
IHsKKyAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgIkVycm9yIGdldHRpbmcgZW5jcnlw
dGlvbiBJViBzaXplIGZpZWxkIik7CistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9Ub29scy9n
dGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMK
aW5kZXggNjEzNjdiNTAwY2EzLi45ZmJlM2U0ZDk4Y2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9p
bnN0YWxsLWRlcGVuZGVuY2llcworKysgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMK
QEAgLTE5MCw2ICsxOTAsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aEFwdCB7
CiAgICAgICAgIGdpdCBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAg
IGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAg
aWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGli
Y3VwczItZGV2IFwKQEAgLTM3OCw2ICszNzksNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5j
aWVzV2l0aFBhY21hbiB7CiAgICAgICAgIGdudXRscyBcCiAgICAgICAgIGdvYmplY3QtaW50cm9z
cGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgICAgICBn
eXAgXAogICAgICAgICBpY29uLW5hbWluZy11dGlscyBcCiAgICAgICAgIGxpYmNyb2NvIFwKICAg
ICAgICAgbGliY3VwcyBcCkBAIC01NjEsNiArNTYzLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVu
ZGVuY2llc1dpdGhEbmYgewogICAgICAgICBnbnV0bHMtZGV2ZWwgXAogICAgICAgICBnb2JqZWN0
LWludHJvc3BlY3Rpb24gXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVs
IFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBp
dHN0b29sIFwKICAgICAgICAgbGliWGZvbnQyLWRldmVsIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL2po
YnVpbGQvamhidWlsZHJjX2NvbW1vbi5weSBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1v
bi5weQppbmRleCBiYmJkYmYzNjAzOWYuLjNlMjYxZTcyZDdiYSAxMDA2NDQKLS0tIGEvVG9vbHMv
amhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5CisrKyBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJj
X2NvbW1vbi5weQpAQCAtODMsMyArODMsOCBAQCBkZWYgaW5pdChqaGJ1aWxkcmNfZ2xvYmFscywg
amhidWlsZF9wbGF0Zm9ybSk6CiAKICAgICBpZiAneDg2XzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5l
KCk6CiAgICAgICAgIGpoYnVpbGRyY19nbG9iYWxzWydjb25kaXRpb25zJ10uYWRkKCd4ODZfNjQn
KQorCisgICAgaWYgJ0pIQlVJTERfRU5BQkxFX09QRU5DRE0nIGluIG9zLmVudmlyb246CisgICAg
ICAgIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPSBvcy5lbnZpcm9uWydKSEJVSUxEX0VOQUJMRV9P
UEVOQ0RNJ10ubG93ZXIoKQorICAgICAgICBpZiBqaGJ1aWxkX2VuYWJsZV9vcGVuY2RtID09ICd5
ZXMnIG9yIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJzEnIG9yIGpoYnVpbGRfZW5hYmxlX29w
ZW5jZG0gPT0gJ3RydWUnOgorICAgICAgICAgICAgamhidWlsZHJjX2dsb2JhbHNbJ2NvbmRpdGlv
bnMnXS5hZGQoJ09wZW5DRE0nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5k
ZW5jaWVzIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCmluZGV4IGFkODI2MjEzNWU5
ZC4uMWUyYWVkMzY0M2M3IDEwMDc1NQotLS0gYS9Ub29scy93cGUvaW5zdGFsbC1kZXBlbmRlbmNp
ZXMKKysrIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCkBAIC0xMjAsNiArMTIwLDcg
QEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQgewogICAgIHBhY2thZ2VzPSIk
cGFja2FnZXMgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hl
bWFzLWRldiBcCisgICAgICAgIGd5cCBcCiAgICAgICAgIGxpYmVnbDEtbWVzYS1kZXYgXAogICAg
ICAgICBsaWJleHBhdDEtZGV2IFwKICAgICAgICAgbGliZmRrLWFhYy1kZXYgXApAQCAtMjM5LDYg
KzI0MCw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFuIHsKICAgICAg
ICAgZXhwYXQgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hl
bWFzIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGliZmRrLWFhYyBcCiAgICAgICAgIGxpYnBy
b3h5IFwKICAgICAgICAgbGlicHNsIFwKQEAgLTM1OSw2ICszNjEsNyBAQCBmdW5jdGlvbiBpbnN0
YWxsRGVwZW5kZW5jaWVzV2l0aERuZiB7CiAgICAgICAgIGZkay1hYWMtZGV2ZWwgXAogICAgICAg
ICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAg
ICAgZ3lwIFwKICAgICAgICAgbGlibW91bnQtZGV2ZWwgXAogICAgICAgICBsaWJwcm94eS1kZXZl
bCBcCiAgICAgICAgIGxpYnBzbC1kZXZlbCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402657</attachid>
            <date>2020-06-24 09:35:42 -0700</date>
            <delta_ts>2020-06-24 23:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>163633</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNDBkYjJmYTgwNWUuLjVi
MWQ1ZjMyODczZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA2LTI0ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA2LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9u
c0dUSy5jbWFrZSBhbmQgTkVXUyBmb3IgMi4yOS4yIHJlbGVhc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODE5MWQxYTJhNjYy
Li43YTFhNGI3YWU3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjAtMDYtMjQgIFhhYmllciBS
b2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVh
bWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEJveFB0ci5oIHRoYXQg
aW5jbHVkZXMgQm94UHRyPFQ+IGFzIGFsaWFzIG9mCisgICAgICAgIEJveDxzdGQ6OnVuaXF1ZV9w
dHI8VD4+LiBXZSBkaXNjdXNzZWQgYWJvdXQgdGhpcyBjbGFzcyBvbiBidWcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OSBhbmQgd2UgYWdyZWVk
IG9uCisgICAgICAgIHRoaXMgYWxpYXMgYmVpbmcgdGhlIGJlc3QgaWRlYS4gQXBhcnQgZnJvbSB0
aGUgYWxpYXMgSSdtIGFkZGluZyBhCisgICAgICAgIGNvdXBsZSBvZiBoZWxwZXJzIGxpa2UgYSBj
cmVhdGUgZnVuY3Rpb24gYW5kIHRoZSBvcGVyYXRvcj09LgorCisgICAgICAgIFRoaXMgYWxzbyBp
bmNsdWRlcyBzb21lIGJpdHMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBPcGVuQ0RNIHN1cHBvcnQuCisK
KyAgICAgICAgVGVzdHM6IEJveFB0ciBBUEkgdGVzdHMgYWRkZWQuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQm94UHRyLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpCb3hQdHJEZWxldGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Y3JlYXRlQm94UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5o
OgorCisyMDIwLTA1LTI2ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW1dURl0gSW1wbGVtZW50IG5ldyBCb3hQdHIgY2xhc3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwdXJwb3NlIG9m
IHRoaXMgY2xhc3MgaXMgdG8gaG9sZCBDLWxpa2UgcG9pbnRlciBvYmplY3RzIGluCisgICAgICAg
IHNoYXJhYmxlIHdheSB0aGF0IGFyZSBub3QgcmVmIGNvdW50ZWQgYW5kIHRoYXQgcmVxdWlyZSBh
IGN1c3RvbQorICAgICAgICBkZWxldGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0JveFB0ci5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6Qm94UHRyRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChXVEY6OkJveFB0
cjo6Qm94UHRyKToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAo
V1RGOjpCb3hQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChXVEY6OkJveFB0cjo6b3BlcmF0b3Iq
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRy
OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvciEgY29u
c3QpOgorICAgICAgICAoV1RGOjpCb3hQdHI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAg
ICAoV1RGOjpCb3hQdHI6OkRhdGE6OkRhdGEpOgorICAgICAgICAoV1RGOjpCb3hQdHI6OkRhdGE6
On5EYXRhKToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpEYXRhOjpvcGVyYXRvciEgY29uc3QpOgor
ICAgICAgICAoV1RGOjpCb3hQdHI6OkRhdGE6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKwogMjAyMC0wNi0yMyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQ5NmRhNzg1MjY1ZS4uMGU0ODkxZjI2ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkwRjhGMkI5MDE3MkUwMEYwMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25U
aHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOUIxNzJGMjU5NDAw
N0RCREE1IC8qIENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25Nb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2
NCAvKiBCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2NiAvKiBCb3hQ
dHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94UHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTQ5NTgzMUM1NzFDQzkwMDQxM0E0OCAvKiBPcmRlck1h
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9yZGVyTWFrZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzEyMENCNEI3NzAwNDc5NjM1IC8qIERl
YnVnSGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z0hlYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzIyMENCNEI3NzAwNDc5NjM1IC8q
IERlYnVnSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWJ1
Z0hlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU2LDYgKzk1Nyw3IEBA
CiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJ
MEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNlLmggKi8sCiAJCQkJMEY5
MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTBGOTMyNzRBMUMxN0Y0Qjcw
MENGNjU2NiAvKiBCb3hQdHIuaCAqLywKIAkJCQk3QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyog
QnJpZ2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0
LmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2Nh
dG9yLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Cb3hQdHIuaCBiL1NvdXJjZS9X
VEYvd3RmL0JveFB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ZTRhNTIzNDNlNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQm94UHRyLmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQm94UHRyRGVsZXRlciB7CisgICAgdm9pZCBvcGVy
YXRvcigpKFQqKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCisjZGVmaW5l
IFdURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIodHlwZU5hbWUsIGRlbGV0ZXJGdW5jKSAgICAgICAg
XAorICAgIHRlbXBsYXRlPD4gc3RydWN0IEJveFB0ckRlbGV0ZXI8dHlwZU5hbWU+ICAgICAgICAg
IFwKKyAgICB7IFwKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpICh0eXBlTmFtZSogcHRyKSBjb25z
dCBcCisgICAgICAgIHsgXAorICAgICAgICAgICAgZGVsZXRlckZ1bmMocHRyKTsgXAorICAgICAg
ICB9IFwKKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQm94UHRyID0gQm94
PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj47CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitCb3hQdHI8VD4gY3JlYXRlQm94UHRyKFQqIHB0cikKK3sKKyAgICByZXR1cm4gQm94
PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj46OmNyZWF0ZShwdHIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveFB0cjxUPiYg
bGhzLCBjb25zdCBCb3hQdHI8VD4mIHJocykKK3sKKyAgICBpZiAoIWxocyAmJiAhcmhzKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbGhzIHx8ICFyaHMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghbGhzLT5nZXQoKSAmJiAhcmhzLT5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWxocy0+Z2V0KCkgfHwgIXJocy0+Z2V0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAqbGhzID09ICpyaHM7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmNyZWF0ZUJveFB0cjsKK3VzaW5nIFdURjo6Qm94
UHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzEzMjA3NWQzZWIuLmI3YTdjYjI0YmFkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVB
REVSUwogICAgIEJsb29tRmlsdGVyLmgKICAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94LmgK
KyAgICBCb3hQdHIuaAogICAgIEJyaWdhbmQuaAogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQ
b2ludGVyQWxsb2NhdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IDcxY2Q1MTI5ZWE3
Yi4uNzY5YjNmNjBhMzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTQwMSw2ICs0MDEs
MTAgQEAKICNkZWZpbmUgRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMgMAogI2VuZGlmCiAKKyNpZiAh
ZGVmaW5lZChFTkFCTEVfT1BFTkNETSkKKyNkZWZpbmUgRU5BQkxFX09QRU5DRE0gMAorI2VuZGlm
CisKICNpZiAhZGVmaW5lZChFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTKQogI2RlZmluZSBFTkFC
TEVfT1JJRU5UQVRJT05fRVZFTlRTIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDBlYWQ2ZWEyM2E1
My4uNGMwYTQ4ZTFkMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgxIEBACisyMDIwLTA2LTI0
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQgT3BlbkNETSBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRl
ZCB0aGUgT3BlbkNETSBzdXBwb3J0IGluIHRoZSBDRE1PcGVuQ0RNIGFuZAorICAgICAgICBDRE1Q
cm94eU9wZW5DRE0gcmVsYXRlZCBjbGFzc2VzLiBDRE1PcGVuQ0RNIGNsYXNzZXMgY2hlY2sgZm9y
CisgICAgICAgIFdpZGV2aW5lIHN1cHBvcnQgaW4gT3BlbkNETSBhbmQgZ2x1ZXMgdGhlIEphdmFT
Y3JpcHQgQVBJIHRvIHRoZQorICAgICAgICBPcGVuQ0RNL1RodW5kZXIgZnJhbWV3b3JrLiBCdWls
ZGluZyB0aGlzIGlzIG9wdGlvbmFsIGFuZCAtLW9wZW5jZG0KKyAgICAgICAgcGFyYW1ldGVyIG5l
ZWRzIHRvIGJlIHBhc3NlZCB0byBidWlsZC13ZWJraXQgdG8gZ2V0IGl0LgorCisgICAgICAgIENE
TVByb3h5IHJlbGF0ZWQgbmVlZGVkIGNoYW5nZXMgYmVjYXVzZSBvZiBzZXZlcmFsIHJlYXNvbnMu
IEZpcnN0CisgICAgICAgIGlzIHRoYXQgS2V5IHdhcyBjb25zaWRlcmluZyBvbmx5IGEgVmVjdG9y
PHVpbnQ4X3Q+IGFzIGEgdHlwZSBhbmQKKyAgICAgICAgT3BlbkNETSBoYXMgc2Vzc2lvbiBvYmpl
Y3RzLiBLZXkgaXMgYWxzbyByZW5hbWVkIHRvIEtleUhhbmRsZSBhcworICAgICAgICB0aGlzIG5h
bWUgcmVmbGVjdHMgaW4gYSBiZXR0ZXIgd2F5IHRoZSBwdXJwb3NlIG9mIHRoZSBjbGFzcy4gVGhp
cworICAgICAgICBibGVlZHMgb3V0IHRvIGFsbCBDRE1Qcm94eSByZWxhdGVkIGNsYXNzZXMuIEl0
IGFsc28gZ2V0cyBhCisgICAgICAgIGNyZWF0aW9uVGltZSB0byBiZSBhYmxlIHRvIG1lcmdlIEtl
eUhhbmRsZXMgdGhhdCB3YXMgbm90CisgICAgICAgIGNvbnNpZGVyZWQuIEtleVN0b3JlIGdldHMg
c3VwcG9ydCBmb3IgbWVyZ2Ugc3RyYXRlZ2llcworICAgICAgICAoQ2xlYXJLZXkgcmVtYWlucyBh
cyBOb09wIGFuZCBPcGVuQ0RNIGJlY29tZXMKKyAgICAgICAgUmVwbGFjZUlmTmV3ZXIpLiBDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eSBnZXRzIHN1cHBvcnQgdG8gcmVtb3ZlCisgICAgICAgIGl0c2Vs
ZiBmcm9tIHRoZSBDRE1TZXNzaW9uUHJveHkuIFRoZXJlIGlzIGFsc28gdGhlIHN1cHBvcnQgZm9y
IGEKKyAgICAgICAgc2h1dGRvd24gdG8gb3ZlcmNvbWUgYSBsaW1pdGF0aW9uIG9mIE9wZW5DRE0g
d2l0aCB0aGUgc2Vzc2lvbnMgYXMKKyAgICAgICAgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGFycml2
ZXMgbGF0ZSBhbmQgT3BlbkNETSBjYW4ndCBoYW5kbGUgc28KKyAgICAgICAgbWFueSBzZXNzaW9u
cywgd2hpY2ggY2F1c2VzIGZhaWx1cmVzICh0aGlzIGlzIG9wdCBpbiB0aHJ1IGFuIGVudgorICAg
ICAgICB2YXIgc2luY2UgaXQgd291bGQgbWFrZSB0aGUgSlMgb2JqZWN0cyBjcmlwcGxlZCBhbmQg
Y2FuIGNyZWF0ZQorICAgICAgICBpc3N1ZXMgaWYgdGhlIG9iamVjdHMgZ2V0IG1vcmUgaW50ZXJh
Y3Rpb25zKS4KKworICAgICAgICBSZWdhcmRpbmcgQ2xlYXJLZXksIHdlIGFkYXB0IHRoZSBjaGFu
Z2VzIHRvIHRoZSBDRE1Qcm94eSBjbGFzc2VzCisgICAgICAgIGFuZCBkZS1jYWJsZSBwcm90ZWN0
aW9uIHN5c3RlbSBmcm9tIHRoZSBkZWNyeXB0b3JzIGFzIHRoZSBPcGVuQ0RNCisgICAgICAgIGRl
Y3J5cHRvciBjb3VsZCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBzeXN0ZW0uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBZb3VUdWJlIFRWIDIwMTkgdGVzdHMgYXJlIGdyZWVuLgorCisgICAgICAgICog
SGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmg6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleUhhbmRsZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXlIYW5kbGU6OmNyZWF0aW9uVGltZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleUhhbmRsZTo6dGFrZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
SGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnNldE1lcmdl
U3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3Jl
OjpyZXBsYWNlSWZOZXdlck1lcmdlU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5SGFu
ZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5SGFu
ZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxv
Y2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXlIYW5kbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmdldE9yV2FpdEZvcktleVZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25Qcm94eTo6Z2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjpjcmVhdGlv
blRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0YXR1c0N1cnJl
bnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Oktl
eUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6S2V5U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6Om5vT3BNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjpzZXRNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzaHV0ZG93
bik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFuY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnNodXRkb3duKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OkNETUluc3RhbmNlUHJveHkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzaHV0ZG93bik6CisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc09wZW5DRE1SYW5rZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVWZWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3Rvcmllcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcDogQWRkZWQu
CisgICAgICAgIChvcGVuQ0RNTGljZW5zZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdERh
dGFNRDUpOgorICAgICAgICAoV2ViQ29yZTo6c2Vzc2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0p
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFj
dG9yeU9wZW5DRE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3Bl
bkNETTo6Y3JlYXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OnN1cHBvcnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFj
dG9yeU9wZW5DRE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVzdG5lc3Nl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3Rp
dmVJZGVudGlmaWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVu
aXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cml2YXRlT3BlbkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJp
dmF0ZU9wZW5DRE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25z
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVT
ZXNzaW9uSWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpD
RE1JbnN0YW5jZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RN
Ojppbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VPcGVuQ0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24pOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VSZXNwb25zZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleVVwZGF0ZWRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlzVXBkYXRlRG9uZUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmVycm9yQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVx
dWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TTo6c2Vzc2lvbkZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNl
c3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpjbG9zZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktleVVzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmguCisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ0RNOjpPQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9u
S2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5
T3BlbkNETS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpn
ZXREZWNyeXB0aW9uU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eU9w
ZW5DRE06OmRlY3J5cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvQ0RNUHJveHlPcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXREYXRhOjpJbml0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbml0RGF0YTo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJFTUVVdGlsaXRpZXM6OmlzV2lkZXZpbmVLZXlTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2lu
aXQpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAodHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh0cmFuc2Zvcm1J
blBsYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfY2xhc3Nf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2luaXQpOgorICAg
ICAgICAoZmluYWxpemUpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAg
KGNkbVByb3h5QXR0YWNoZWQpOgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVy
Lmg6IEFkZGVkLgorCiAyMDIwLTA2LTI0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdt
YWlsLmNvbT4KIAogICAgICAgICBSZW1vdmUgW0NhbGxiYWNrTmVlZHNPcGVyYXRvckVxdWFsXSBl
eHRlbmRlZCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDk2M2YwYzFiZDViYy4uMjZh
MDY2YmVhYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE2MDIsMyArMTYwMiw3IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICAke1dlYkNvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgKICAgICAke1dlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oCiApCisKK2lm
IChFTkFCTEVfT1BFTkNETSkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmgpCitl
bmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDE2MDll
OTFiYzBkNC4uMWZhNDQ1ZmZhMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCkBAIC0xODAsNiArMTgwLDI3IEBAIGlmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7TElCR0NSWVBUX0xJ
QlJBUklFU30gLWxncGctZXJyb3IKICAgICApCisKKyAgICBpZiAoRU5BQkxFX09QRU5DRE0pCisg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvb3BlbmNk
bSIKKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xV
REVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICAg
ICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAg
ICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisgICAg
ICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBpZiAoVVNFX0NBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMjRkMjBiNjQ2OGJhLi5kZGY3
YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAt
MTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25zdAog
ICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRhdGEoKTsKIH0KIAorY29uc3QgdWlu
dDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSk7Cit9CisKIFNoYXJlZEJ1
ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoc2l6ZV90IHBvc2l0aW9uKSBj
b25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9uIDwgbV9zaXplKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4ZmU3MDFiMTliLi41MWVlNmQ0ZmMx
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMDYsNiArMTA2
LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkg
YW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgY29uc3QgdWludDhfdCogZGF0
YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0ZXMgYW4gQXJyYXlCdWZmZXIgYW5k
IGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRzIHRvIHRoYXQKICAgICAvLyBBcnJh
eUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1ZmZlcnMgaW50byBhIGZsYXQgYnVm
ZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZjZDY2YWQxZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApA
QCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENsZWFyS2V5LAogICAgICAgICBGYWly
UGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lmIEVOQUJMRShPUEVOQ0RNKQorICAg
ICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2aXJ0dWFsIEltcGxlbWVudGF0aW9u
VHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETU9wZW5DRE1UeXBlcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MGJlMWM0M2RlZDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1P
cGVuQ0RNVHlwZXMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlIDxv
cGVuX2NkbS5oPgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K1dURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIoT3BlbkNETVNlc3Npb24sIG9wZW5jZG1fZGVzdHJ1
Y3Rfc2Vzc2lvbikKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHAKaW5kZXggMWM0NjJmMGI2NTQzLi5kMTlhYzBlN2YxODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTEsMzUgKzkyLDgzIEBAIHN0YXRpYyBTdHJpbmcg
dmVjdG9yVG9IZXhTdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWMpCiAKIH0gLy8gbmFt
ZXNwYWNlIHt9CiAKLVN0cmluZyBLZXk6OmlkQXNTdHJpbmcoKSBjb25zdAorU3RyaW5nIEtleUhh
bmRsZTo6aWRBc1N0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2
ZWN0b3JUb0hleFN0cmluZyhtX2lkKSwgIl0iKTsKIH0KIAotU3RyaW5nIEtleTo6dmFsdWVBc1N0
cmluZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1fdmFsdWUpLCAi
XSIpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rvcjx1aW50OF90Pj4obV92
YWx1ZSkpIHsKKyAgICAgICAgYXV0byBrZXlEYXRhVmFsdWUgPSBXVEY6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleURhdGFWYWx1ZSksICJdIik7CisgICAgfQorCisgICAgcmV0dXJuICJbb3Bh
cXVlIGtleSB2YWx1ZV0iX3M7Cit9CisKK1N0cmluZyBLZXlIYW5kbGU6OmNyZWF0aW9uVGltZUFz
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CisgICAgbV9j
cmVhdGlvblRpbWUuZHVtcChzdHJlYW0pOworICAgIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTsK
K30KKworYm9vbCBLZXlIYW5kbGU6OnRha2VWYWx1ZUlmRGlmZmVyZW50KEtleUhhbmRsZVZhbHVl
VmFyaWFudCYmIHZhbHVlKQoreworICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAg
IG1fdmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBLZXlIYW5kbGU6Om9wZXJhdG9yPShjb25zdCBL
ZXlIYW5kbGUmIG90aGVyKQoreworICAgIG1faWQgPSBvdGhlci5tX2lkOworICAgIG1fdmFsdWUg
PSBvdGhlci5tX3ZhbHVlOworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9j
cmVhdGlvblRpbWUgPSBvdGhlci5tX2NyZWF0aW9uVGltZTsKK30KKwordm9pZCBLZXlTdG9yZTo6
c2V0TWVyZ2VTdHJhdGVneShNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KQoreworICAgIG1fbWVyZ2VT
dHJhdGVneSA9IHN0cmF0ZWd5OworICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHsKKyAgICBjYXNlIE1l
cmdlU3RyYXRlZ3k6Ok5vT3A6CisgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uID0gbm9P
cE1lcmdlU3RyYXRlZ3k7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVyZ2VTdHJhdGVneTo6
UmVwbGFjZUlmTmV3ZXI6CisgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uID0gcmVwbGFj
ZUlmTmV3ZXJNZXJnZVN0cmF0ZWd5OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCi1i
b29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0Citib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJl
ZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewogICAgICAgICByZXR1cm4g
KnN0b3JlZEtleSA9PSBrZXlJRDsKICAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOwogfQogCiB2b2lk
IEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBtZXJnaW5nICV1
IG5ldyBrZXlzIGludG8gYSBrZXkgc3RvcmUgb2YgJXUga2V5cyIsIG90aGVyLm51bUtleXMoKSwg
bnVtS2V5cygpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKSB7CiAgICAgICAg
IC8vIE5PVEU6IERvIHdlIGNhcmUgdGhhdCB3ZSB3aWxsIG5vdCBhcHBlbmQgYSBrZXkgaWYgaXQg
bWF0Y2hlcyBhIGtleSBJRAogICAgICAgICAvLyBpbiB0aGUga2V5c3RvcmUgYW5kIGhhcyBkaWZm
ZXJlbnQgZGF0YS4gU2hvdWxkIHdlIG92ZXJ3cml0ZT8gV2hpY2ggaXMgIm5ld2VyIj8KICAgICAg
ICAgLy8gRG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgICAg
IGlmIChtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtl
eSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KSA9PSBXVEY6Om5vdEZvdW5kKQorICAg
ICAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7IHJldHVybiAqa2V5
ID09ICpzdG9yZWRLZXk7IH0pOworICAgICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eCA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgaGFwcGVuIHdpdGggREFT
SCBwbGF5ZXJzLCBpdCBzZWVtcyBoYXJtbGVzcyB0byBpZ25vcmUgaXQuCi0gICAgICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBpZ25vcmVkIGEga2V5IHdpdGggdGhlIHNhbWUgSUQg
YW5kIGRpZmZlcmVudCBkYXRhIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyBrZXlzIHdpdGggdGhlIHNhbWUgSUQiKTsKKyAg
ICAgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uKG1fa2V5c1trZXlXaXRoTWF0Y2hpbmdL
ZXlJREluZGV4XSwga2V5KTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQK
QEAgLTEyOSwxNSArMTc4LDE1IEBAIHZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3Jl
JiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9CiAKLUNETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0CitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykgY29uc3QKIHsKICAgICBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9K
U0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVz
VmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gc3RhdHVzOwog
ICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OmFkZEtleXMo
VmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29sIEtleVN0b3JlOjphZGRLZXlzKFZl
Y3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQogewogICAgIGJvb2wgZGlkS2V5U3Rv
cmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtleSA6IG5ld0tleXMpIHsKQEAgLTE0
NywxNiArMTk2LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+
PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOwogfQogCi1ib29sIEtl
eVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRy
PEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOwot
ICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5V2l0
aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQ
dHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9y
ZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBX
VEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9r
ZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyBy
ZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IGtleVdpdGhNYXRjaGlu
Z0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3JlQ2hhbmdlKQorICAgICAgICAgICAg
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8g
a2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAogICAg
ICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyArMjE5LDcgQEAgYm9vbCBLZXlTdG9y
ZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBh
cyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBhbGwKICAgICAgICAgLy8gcHJhY3Rp
Y2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVtIG9mIDIga2V5cy4KICAgICAgICAg
c3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCi0gICAgICAgICAgICBbXShj
b25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtleT4mIGIpIHsKKyAgICAgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYg
YikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpiOwogICAgICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtMTgzLDcgKzIzNCw3IEBAIHZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9t
KGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVtb3ZlKGtleSk7CiB9CiAKLWJvb2wg
S2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQorYm9vbCBLZXlTdG9yZTo6
cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkpCiB7CiAgICAgYm9vbCBzdG9yZUNo
YW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyNTUsMTggQEAgYm9vbCBLZXlTdG9yZTo6cmVt
b3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsKIH0K
IAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3ZvaWQgS2V5U3RvcmU6OnJlcGxhY2VJZk5ld2VyTWVy
Z2VTdHJhdGVneShSZWZQdHI8S2V5SGFuZGxlPiYgZGVzdGluYXRpb24sIGNvbnN0IFJlZlB0cjxL
ZXlIYW5kbGU+JiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCpkZXN0aW5hdGlvbiA9PSAqb3JpZ2lu
KTsKKyAgICBpZiAoZGVzdGluYXRpb24tPm1fY3JlYXRpb25UaW1lIDwgb3JpZ2luLT5tX2NyZWF0
aW9uVGltZSkKKyAgICAgICAgZGVzdGluYXRpb24gPSBvcmlnaW47Cit9CisKK2NvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+JiBLZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQp
IGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAg
aWYgKCprZXkgPT0ga2V5SUQpCi0gICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFs
c2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSAr
Mjk2LDExIEBAIHZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGlu
c3RhbmNlKQogICAgIG1faW5zdGFuY2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IENETVByb3h5OjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
UmVmUHRyPEtleUhhbmRsZT4gQ0RNUHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtl
eUlEKSBjb25zdAogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwog
ICAgIEFTU0VSVChtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4g
bV9rZXlTdG9yZS5rZXlWYWx1ZShrZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFu
ZGxlKGtleUlEKTsKIH0KIAogdm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBj
b25zdApAQCAtMjYxLDcgKzMxOSw3IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KCkgY29uc3QKICAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQog
Ci1PcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4g
Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29u
c3QKIHsKICAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxs
eSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVj
cnlwdG9ycyBvbmx5IGdldApAQCAtMjgxLDMyICszMzksNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKQogCiAgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1
ZShrZXlJRCk7CisgICAgICAgIFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShr
ZXlJRCk7CisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIH0KICAgICAKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQg
JXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZh
aWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wg
Q0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAK
LWJvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAorYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAg
ICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxl
PiBoYW5kbGUgPSBrZXlIYW5kbGUoa2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFu
ZGxlLnJlbGVhc2VOb25OdWxsKCkpOworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQ+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlE
KSBjb25zdAoreworICAgIGlmIChhdXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRs
ZShrZXlJRCkpCisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1
ZSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkKQEAgLTM2MCw2ICs0MjcsMTggQEAgdm9pZCBDRE1J
bnN0YW5jZVByb3h5Ojp0cmFja1Nlc3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkm
IHNlc3Npb24pCiAgICAgbV9zZXNzaW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBp
bnN0YW5jZSkKKyAgICA6IG1faW5zdGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJv
eHkoKQoreworICAgIGlmICghbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5z
dGFuY2UtPnJlbW92ZVNlc3Npb24oKnRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgKaW5kZXggZjJjM2UzNGVmNTkw
Li42YzJkZTQ5NGU2ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzQsMzUgKzM0LDYwIEBACiAjaW5jbHVkZSAiQ0RNSW5z
dGFuY2VTZXNzaW9uLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0JveFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3Bl
bkNETVR5cGVzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLZXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3VzaW5nIEtleUlEVHlwZSA9IFZlY3Rvcjx1aW50
OF90PjsKK3VzaW5nIEtleUhhbmRsZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8CisgICAgVmVjdG9y
PHVpbnQ4X3Q+CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgLCBCb3hQdHI8T3BlbkNETVNlc3Np
b24+CisjZW5kaWYKKz47CisKK2NsYXNzIEtleUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxLZXlIYW5kbGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czsKIAotICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVh
dGUoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50
OF90PiYmIGtleVZhbHVlKQorICAgIHN0YXRpYyBSZWZQdHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5
U3RhdHVzIHN0YXR1cywgS2V5SURUeXBlJiYga2V5SUQsIEtleUhhbmRsZVZhbHVlVmFyaWFudCYm
IGtleUhhbmRsZVZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5
KHN0YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEtleUhhbmRsZShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZN
b3ZlKGtleUhhbmRsZVZhbHVlKSkpOwogICAgIH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFz
U2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5k
YXRhKCksIG1faWQuc2l6ZSgpKTsgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUo
KSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgYm9vbCB0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlI
YW5kbGVWYWx1ZVZhcmlhbnQmJik7CisKKyAgICBjb25zdCBLZXlJRFR5cGUmIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2
YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBjb25zdCBXYWxsVGltZSYgY3JlYXRpb25UaW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jcmVhdGlvblRpbWU7IH0KKyAgICBib29sIGlzU3RhdHVzQ3VycmVu
dGx5VmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdHVzID09IENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUgfHwgbV9zdGF0dXMgPT0gQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQKKyAgICAgICAgICAgIHx8IG1fc3RhdHVz
ID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOworICAg
IH0KIAogICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKKyAgICBTdHJpbmcgY3JlYXRpb25UaW1lQXNTdHJpbmcoKSBjb25zdDsK
KworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEtleUhhbmRsZSYpOworICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBvdGhlcikgeyBBU1NFUlQob3RoZXIpOyAqdGhp
cyA9ICpvdGhlcjsgfQogCiAgICAgLy8gVHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0
aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5IHZhbHVlIGFuZCBzdGF0dXMuCi0gICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiBrMS5t
X2lkID09IGsyLm1faWQ7IH0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAm
aywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlE
OyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlELCBjb25zdCBLZXkgJmspIHsgcmV0dXJuIGsgPT0ga2V5SUQ7IH0KLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcjwoY29uc3QgS2V5JiBrMSwgY29uc3QgS2V5JiBrMikKKyAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmazEsIGNvbnN0IEtleUhhbmRsZSAmazIpIHsg
cmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5SGFuZGxlICZrLCBjb25zdCBLZXlJRFR5cGUmIGtleUlEKSB7IHJldHVybiBrLm1f
aWQgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUlEVHlw
ZSYga2V5SUQsIGNvbnN0IEtleUhhbmRsZSAmaykgeyByZXR1cm4gayA9PSBrZXlJRDsgfQorICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXlIYW5kbGUmIGsxLCBjb25zdCBLZXlIYW5k
bGUmIGsyKQogICAgIHsKICAgICAgICAgLy8gS2V5IElEcyBhcmUgY29tcGFyZWQgYXMgZm9sbG93
czogRm9yIGtleSBJRHMgQSBvZiBsZW5ndGggbSBhbmQKICAgICAgICAgLy8gQiBvZiBsZW5ndGgg
biwgYXNzaWduZWQgc3VjaCB0aGF0IG0gPD0gbiwgbGV0IEEgPCBCIGlmIGFuZCBvbmx5CkBAIC04
NCwzMSArMTA5LDM4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbnVtU2Vzc2lvblJlZmVyZW5j
ZXMoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bVNlc3Npb25S
ZWZlcmVuY2VzOyB9CiAgICAgZnJpZW5kIGNsYXNzIEtleVN0b3JlOwogCi0gICAgS2V5KEtleVN0
YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBr
ZXlWYWx1ZSkKLSAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5SUQp
KSwgbV92YWx1ZShXVEZNb3ZlKGtleVZhbHVlKSkgeyB9CisgICAgS2V5SGFuZGxlKEtleVN0YXR1
cyBzdGF0dXMsIEtleUlEVHlwZSYmIGtleUlELCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiBrZXlI
YW5kbGVWYWx1ZSkKKyAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5
SUQpKSwgbV92YWx1ZShXVEZNb3ZlKGtleUhhbmRsZVZhbHVlKSkgeyB9CiAKICAgICBLZXlTdGF0
dXMgbV9zdGF0dXM7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1faWQ7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IG1fdmFsdWU7CisgICAgS2V5SURUeXBlIG1faWQ7CisgICAgS2V5SGFuZGxlVmFsdWVWYXJp
YW50IG1fdmFsdWU7CisgICAgV2FsbFRpbWUgbV9jcmVhdGlvblRpbWUgeyBXYWxsVGltZTo6bm93
KCkgfTsKICAgICB1bnNpZ25lZCBtX251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OwogfTsKIAog
Y2xhc3MgS2V5U3RvcmUgewogcHVibGljOgogICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOworICAgIGVudW0gY2xhc3MgTWVyZ2VT
dHJhdGVneSB7IE5vT3AsIFJlcGxhY2VJZk5ld2VyIH07CisgICAgdXNpbmcgTWVyZ2VTdHJhdGVn
eUZ1bmN0aW9uID0gRnVuY3Rpb248dm9pZChSZWZQdHI8S2V5SGFuZGxlPiYsIGNvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+Jik+OwogCi0gICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0OwotICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90
aGVyKTsKLSAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7
CisgICAgS2V5U3RvcmUoTWVyZ2VTdHJhdGVneSBtZXJnZVN0cmF0ZWd5ID0gTWVyZ2VTdHJhdGVn
eTo6Tm9PcCkgeyBzZXRNZXJnZVN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpOyB9CisKKyAgICBib29s
IGNvbnRhaW5zS2V5SUQoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgdm9pZCBtZXJnZShj
b25zdCBLZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmKTsKICAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1fa2V5cy5jbGVhcigpOyB9Ci0gICAg
Ym9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7Ci0gICAgYm9vbCBhZGQoUmVmUHRy
PEtleT4mJik7Ci0gICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleT4mKTsKKyAgICBib29s
IGFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiYmKTsKKyAgICBib29sIGFkZChSZWZQ
dHI8S2V5SGFuZGxlPiYmKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBSZWZQdHI8S2V5SGFuZGxl
PiYpOwogICAgIGJvb2wgaGFzS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0K
ICAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNpemUoKTsgfQot
ICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3Q7Ci0gICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBc1JlbGVhc2VkKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIGtleUhhbmRsZShjb25zdCBLZXlJ
RFR5cGUmKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgYWxsS2V5c0FzKENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzKSBjb25zdDsKICAgICBLZXlTdGF0dXNWZWN0b3IgY29udmVydFRv
SlNLZXlTdGF0dXNWZWN0b3IoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2tleXMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBzZXRNZXJnZVN0cmF0ZWd5KE1lcmdl
U3RyYXRlZ3kpOwogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9
CiAgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CkBAIC0x
MjAsNyArMTUyLDEyIEBAIHB1YmxpYzoKICAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBt
X2tleXMucmVuZCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tl
eXM7CisgICAgc3RhdGljIHZvaWQgbm9PcE1lcmdlU3RyYXRlZ3koUmVmUHRyPEtleUhhbmRsZT4m
LCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYpIHsgfQorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VJ
Zk5ld2VyTWVyZ2VTdHJhdGVneShSZWZQdHI8S2V5SGFuZGxlPiYsIGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+Jik7CisKKyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5czsKKyAgICBN
ZXJnZVN0cmF0ZWd5IG1fbWVyZ2VTdHJhdGVneTsKKyAgICBNZXJnZVN0cmF0ZWd5RnVuY3Rpb24g
bV9tZXJnZVN0cmF0ZWd5RnVuY3Rpb247CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5OwpA
QCAtMTI5LDIxICsxNjYsMzAgQEAgY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKIC8vIGZyb20gYmFj
a2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgogY2xhc3MgQ0RNUHJveHkgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworICAgIHN0YXRp
YyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMgPSA3X3M7CiAKICAgICB2
aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgdXBkYXRlS2V5U3RvcmUo
Y29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKTsKICAgICB2b2lkIHNldEluc3RhbmNlKENETUlu
c3RhbmNlUHJveHkqKTsKKyAgICB2b2lkIHNldE1lcmdlU3RyYXRlZ3koS2V5U3RvcmU6Ok1lcmdl
U3RyYXRlZ3kgc3RyYXRlZ3kpIHsgbV9rZXlTdG9yZS5zZXRNZXJnZVN0cmF0ZWd5KHN0cmF0ZWd5
KTsgfQorCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICB9CiAK
IHByb3RlY3RlZDoKLSAgICBWZWN0b3I8dWludDhfdD4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IHRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29u
c3Q7Ci0gICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRPcldhaXRGb3JLZXkoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgUmVmUHRyPEtleUhhbmRsZT4ga2V5
SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNv
bnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQoY29u
c3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IHRyeVdh
aXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8UmVm
PEtleUhhbmRsZT4+IGdldE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmKSBjb25z
dDsKKyAgICBPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlhbnQ+IGdldE9yV2FpdEZvcktleVZh
bHVlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKSBjb25zdDsKICAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAg
Y29uc3QgQ0RNSW5zdGFuY2VQcm94eSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3Rh
bmNlOyB9CiAKIHByaXZhdGU6CiAgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKQEAg
LTE3OCwxOSArMjI0LDM0IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZl
Y3RvcjxDRE1Qcm94eUZhY3RvcnkqPiYgcmVnaXN0ZXJlZEZhY3RvcmllcygpOwogfTsKIAorY2xh
c3MgQ0RNSW5zdGFuY2VQcm94eTsKKwogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgOiBw
dWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCkgeyBtX2luc3RhbmNlLmNsZWFyKCk7
IH0KKyAgICB2b2lkIGdldFJlbW92ZWRGcm9tSW5zdGFuY2VQcm94eSgpOworCitwcm90ZWN0ZWQ6
CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoQ0RNSW5zdGFuY2VQcm94eSYpOworICAgIGNv
bnN0IFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4mIGNkbUluc3RhbmNlUHJveHkoKSBjb25zdCB7
IHJldHVybiBtX2luc3RhbmNlOyB9CisKK3ByaXZhdGU6CisgICAgV2Vha1B0cjxDRE1JbnN0YW5j
ZVByb3h5PiBtX2luc3RhbmNlOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Np
b24gbWFuYWdlbWVudCBjb2RlIGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcwogLy8gZnJv
bSAicmVhbCBDRE0iIHN0YXRlIGNoYW5nZXMgdG8gSlMuCi1jbGFzcyBDRE1JbnN0YW5jZVByb3h5
IDogcHVibGljIENETUluc3RhbmNlIHsKK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMg
Q0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVByb3h5PiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ0RNSW5zdGFuY2VQcm94eShjb25zdCBTdHJpbmcmIGtleVN5
c3RlbSkKKyAgICBleHBsaWNpdCBDRE1JbnN0YW5jZVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtLCBLZXlTdG9yZTo6TWVyZ2VTdHJhdGVneSBtZXJnZVN0cmF0ZWd5ID0gS2V5U3RvcmU6Ok1l
cmdlU3RyYXRlZ3k6Ok5vT3ApCiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgICAgICBtX2NkbVByb3h5ID0gQ0RNUHJveHlGYWN0b3J5OjpjcmVhdGVDRE1Qcm94eUZv
cktleVN5c3RlbShrZXlTeXN0ZW0pOwotICAgICAgICBpZiAobV9jZG1Qcm94eSkKKyAgICAgICAg
aWYgKG1fY2RtUHJveHkpIHsKICAgICAgICAgICAgIG1fY2RtUHJveHktPnNldEluc3RhbmNlKHRo
aXMpOworICAgICAgICAgICAgbV9jZG1Qcm94eS0+c2V0TWVyZ2VTdHJhdGVneShtZXJnZVN0cmF0
ZWd5KTsKKyAgICAgICAgfQorICAgICAgICBtX2tleVN0b3JlLnNldE1lcmdlU3RyYXRlZ3kobWVy
Z2VTdHJhdGVneSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRl
ZmF1bHQ7CiAKQEAgLTE5OSw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxL
ZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOwogCiAgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1l
dGhvZHMgLSBtYWluIHRocmVhZCBvbmx5LgotICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBj
b25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAg
Y29uc3QgUmVmUHRyPENETVByb3h5PiYgcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
cktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlw
dG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CiAgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQog
CkBAIC0yMDcsNiArMjY4LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9y
S2V5KCk7CiAgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogCisgICAgdm9pZCByZW1v
dmVTZXNzaW9uKGNvbnN0IENETUluc3RhbmNlU2Vzc2lvblByb3h5JiBzZXNzaW9uKSB7IG1fc2Vz
c2lvbnMucmVtb3ZlKHNlc3Npb24pOyB9CisgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOworICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX3Nlc3Npb25z
KQorICAgICAgICAgICAgc2Vzc2lvbi5zaHV0ZG93bigpOworICAgICAgICBtX3Nlc3Npb25zLmNs
ZWFyKCk7CisgICAgICAgIG1fY2RtUHJveHktPnNodXRkb3duKCk7CisgICAgICAgIG1fY2RtUHJv
eHkgPSBudWxscHRyOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgdHJhY2tTZXNzaW9u
KGNvbnN0IENETUluc3RhbmNlU2Vzc2lvblByb3h5Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcAppbmRleCA2NTMyMmVkOTllOTcuLjE1MTAzNDBiNzRlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCiAKICNpbmNsdWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgiCisjaW5jbHVk
ZSAiQ0RNUHJveHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkNETVJlc3RyaWN0aW9ucy5oIgogI2lu
Y2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCiAjaW5jbHVkZSAiSW5pdERhdGFSZWdpc3RyeS5oIgpA
QCAtNjMsNyArNjQsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2Jq
ZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQo
Y29uc3QgSlNPTjo6T2JqZWN0JiByb290KQorc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8
S2V5SGFuZGxlPj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3Qp
CiB7CiAgICAgLy8gSWYgdGhlICdrZXlzJyBrZXkgaXMgcHJlc2VudCBpbiB0aGUgcm9vdCBvYmpl
Y3QsIHBhcnNlIHRoZSBKU09OIGZ1cnRoZXIKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNp
ZmllZCAnbGljZW5zZScgZm9ybWF0LgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdAogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEtleT4+IGRlY29kZWRL
ZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVjb2RlZEtleXM7CiAgICAgYm9v
bCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5
LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC05MSwxMSArOTIs
MTIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNlTGljZW5zZUZv
cm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QKICAgICAgICAgICAgIGlmICgha2V5T2JqZWN0
LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiLCBr
ZXlWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7Ci0gICAgICAgICAgICBpZiAo
IVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNl
NjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0pKQorICAgICAgICAgICAgS2V5
SURUeXBlIGtleUlERGF0YTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlIYW5kbGVW
YWx1ZURhdGE7CisgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7
IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5SGFu
ZGxlVmFsdWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShrZXlWYWx1ZURh
dGEpKSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxlOjpjcmVhdGUo
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEp
LCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtNTI0LDcgKzUyNiw3IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rv
cj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewogICAgICAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwg
c2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5t
ZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICAgICAgcGFyZW50SW5zdGFuY2UoKS5t
ZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tl
eVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIApAQCAtNTM0
LDcgKzUzNiw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vu
c2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAKICAgICBpZiAocGFyc2VMaWNl
bnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsKICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xl
YXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAg
IHBhcmVudEluc3RhbmNlKCkucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CiAgICAgICAg
IG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRy
dWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1
cm47CkBAIC01OTIsNyArNTk0LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8v
IENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVh
c2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNl
JyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3Rv
cmUuYWxsS2V5c0FzUmVsZWFzZWQoKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6
OlJlbGVhc2VkKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsKICAg
ICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxl
YXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CkBAIC02MjEsNiArNjIzLDEzIEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShj
b25zdCBTdHJpbmcmKQogewogfQogCitDRE1JbnN0YW5jZUNsZWFyS2V5JiBDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UoKSBjb25zdAoreworICAgIGF1dG8gaW5zdGFu
Y2UgPSBjZG1JbnN0YW5jZVByb3h5KCk7CisgICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VDbGVhcktleSY+KCppbnN0YW5jZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4YmYzNjI3MmFkYjYuLjEwNzkwODYwODBm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xl
YXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoK
ICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNv
bnN0IGZpbmFsOwogfTsKIAotY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1Ymxp
YyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVh
cktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0
YW5jZVByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmly
dHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoK
IGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3Rh
bmNlU2Vzc2lvblByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCi0gICAgICAgIDogbV9wYXJlbnRJbnN0YW5j
ZShwYXJlbnQpIHsgfQorICAgICAgICA6IENETUluc3RhbmNlU2Vzc2lvblByb3h5KHBhcmVudCkg
eyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmlu
ZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2Fs
bGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExp
Y2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikg
ZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKQEAgLTExNiw4ICsx
MTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcm
LCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2
b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKIHByaXZhdGU6
CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgcGFyZW50SW5zdGFuY2UoKSBjb25zdDsKKwogICAg
IFN0cmluZyBtX3Nlc3Npb25JRDsKLSAgICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudElu
c3RhbmNlOwogICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwCmluZGV4IDhhYzlhYjMxOGU2Zi4uZjJiMTA3NGM2MGEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyQ29tbW9uLmNwcApAQCAtNTAsNiArNTAsOSBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKICNpbmNsdWRlICJXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIgor
I2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIldlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3Ry
ZWFtZXIuaCIKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yNzUsNiAr
Mjc4LDE0IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihPcHRpb25hbDxWZWN0b3I8U3RyaW5n
Pj4mJiBvcHRpb25zKQogICAgIHJldHVybiBpc0dTdHJlYW1lckluaXRpYWxpemVkOwogfQogCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCitib29sIGlzT3Bl
bkNETVJhbmtlZCgpCit7CisgICAgY29uc3QgY2hhciogdmFsdWUgPSBnX2dldGVudigiV0VCS0lU
X0VNRV9SQU5LX1BSSU9SSVRZIik7CisgICAgcmV0dXJuIHZhbHVlICYmIGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UodmFsdWUsICJPcGVuQ0RNIik7Cit9CisjZW5kaWYKKwogYm9vbCBpbml0aWFsaXpl
R1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpCiB7CiAgICAgaWYgKCFpbml0aWFs
aXplR1N0cmVhbWVyKCkpCkBAIC0yODMsNyArMjk0LDExIEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJl
YW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlRmxhZzsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCi0gICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIs
ICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAxMDAsIFdFQktJVF9UWVBFX01F
RElBX0NLX0RFQ1JZUFQpOworICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAi
d2Via2l0Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMjAwLCBXRUJLSVRfVFlQRV9NRURJ
QV9DS19ERUNSWVBUKTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICAgICAgdW5zaWduZWQgb3Bl
bkNETVJhbmsgPSBpc09wZW5DRE1SYW5rZWQoKSA/IDMwMCA6IDEwMDsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG9wZW5jZG0iLCBHU1RfUkFOS19QUklNQVJZ
ICsgb3BlbkNETVJhbmssIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCk7CisjZW5k
aWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTM4Miw2ICszOTcsMTMg
QEAgUmVmPFNoYXJlZEJ1ZmZlcj4gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVTaGFyZWRCdWZmZXIo
KQogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKK1ZlY3Rvcjx1
aW50OF90PiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZVZlY3RvcigpCit7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZhbHVlOworICAgIHZhbHVlLmFwcGVuZChkYXRhKCksIHNpemUoKSk7CisgICAgcmV0
dXJuIHZhbHVlOworfQorCiBib29sIGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKGNvbnN0IGNo
YXIqIG5hbWUpCiB7CiAgICAgR1JlZlB0cjxHc3RQbHVnaW4+IHBsdWdpbiA9IGFkb3B0R1JlZihn
c3RfcmVnaXN0cnlfZmluZF9wbHVnaW4oZ3N0X3JlZ2lzdHJ5X2dldCgpLCBuYW1lKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggYTFlNTYyNDRiMTdlLi4wMmEwMmMwNTc3NjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTczLDYgKzczLDkgQEAgYm9vbCBpbml0aWFsaXplR1N0
cmVhbWVyKE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiYmID0gV1RGOjpudWxsb3B0KTsKIGJvb2wg
aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKIHVuc2lnbmVk
IGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIqIG5pY2spOwogdWludDY0X3QgdG9Hc3RVbnNpZ25l
ZDY0VGltZShjb25zdCBNZWRpYVRpbWUmKTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKK2Jvb2wgaXNP
cGVuQ0RNUmFua2VkKCk7CisjZW5kaWYKIAogaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2Nr
VGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIHsKQEAgLTgxLDYgKzg0LDExIEBAIGlu
bGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZtZWRpYVRp
bWUpCiAKIGNsYXNzIEdzdE1hcHBlZEJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxHc3RNYXBwZWRCdWZmZXI+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEdzdE1hcHBl
ZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0QnVmZmVyPiYgYnVmZmVyLCBHc3RNYXBG
bGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLmdldCgpLCBm
bGFncyk7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0
ZShHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgewogICAgICAgICBH
c3RNYXBJbmZvIGluZm87CkBAIC0xMDYsNiArMTE0LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZm8uc2l6ZSk7IH0K
ICAgICBib29sIGlzU2hhcmFibGUoKSBjb25zdCB7IHJldHVybiAhKG1faW5mby5mbGFncyAmIEdT
VF9NQVBfV1JJVEUpOyB9CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlU2hhcmVkQnVmZmVy
KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZVZlY3RvcigpOwogCiBwcml2YXRlOgogICAg
IEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwSW5mbyYmIGluZm8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDg3
MDFhYTY1NjhkMy4uYjI5MTYzOWQwNGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjE1LDYgKzIxNSwxMSBAQCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc3Bvc2luZyBwbGF5ZXIiKTsKICAgICBtX2lzUGxh
eWVyU2h1dHRpbmdEb3duLnN0b3JlKHRydWUpOwogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgRU5BQkxFKE9QRU5DRE0pCisgICAgaWYgKG1fY2RtSW5zdGFuY2UgJiYgIWdfc3RyY21w
MChnX2dldGVudigiV0VCS0lUX0VNRV9SRUxFQVNFX09QRU5DRE1fV0lUSF9QTEFZRVJfREVTVFJV
Q1RJT04iKSwgInllcyIpKQorICAgICAgICBtX2NkbUluc3RhbmNlLT5zaHV0ZG93bigpOworI2Vu
ZGlmCisKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1RyYWNrcy52YWx1ZXMoKSkKICAg
ICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKIApAQCAtMzUxMCw3ICszNTE1LDggQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KEluaXREYXRhJiYgaW5pdEQKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlhbGl6YXRpb25EYXRh
RW5jb3VudGVyZWQgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUo
KSk7CisgICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0aWFsaXphdGlvbkRhdGFFbmNv
dW50ZXJlZCAlcyBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRhLnBheWxvYWRDb250YWluZXJU
eXBlKCkudXRmOCgpLmRhdGEoKQorICAgICAgICAgICAgLCBpbml0RGF0YS5wYXlsb2FkKCktPnNp
emUoKSk7CiAgICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFzIiwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5kYXRhKCkpLCBpbml0RGF0YS5w
YXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIHdlYWtUaGlzLT5tX3BsYXllci0+aW5pdGlhbGl6
YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENvbnRhaW5lclR5cGUoKSwgaW5p
dERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
RmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCmluZGV4IDBmOWE2OGQyY2Q2ZC4u
MzdlODQ3MDZlMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5j
cHAKQEAgLTMzLDE3ICszMywyOSBAQAogCiAjaW5jbHVkZSAiQ0RNUHJveHlDbGVhcktleS5oIgog
CisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3BlbkNETS5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDRE1GYWN0b3J5OjpwbGF0Zm9ybVJlZ2lzdGVy
RmFjdG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykKIHsKICAgICBmYWN0b3Jp
ZXMuYXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKKyNpZiBFTkFCTEUo
T1BFTkNETSkKKyAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xl
dG9uKCkpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxDRE1Qcm94eUZhY3RvcnkqPiBDRE1Qcm94eUZh
Y3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoKQogewogICAgIFZlY3RvcjxDRE1Qcm94
eUZhY3RvcnkqPiBmYWN0b3JpZXM7CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgZmFjdG9yaWVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgZmFjdG9yaWVzLnVuY2hlY2tlZEFwcGVu
ZCgmQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNlbHNlCiAgICAgZmFjdG9yaWVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisjZW5kaWYKICAgICBmYWN0b3JpZXMudW5jaGVj
a2VkQXBwZW5kKCZDRE1Qcm94eUZhY3RvcnlDbGVhcktleTo6c2luZ2xldG9uKCkpOwogICAgIHJl
dHVybiBmYWN0b3JpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZhOTQ5YjQ3NTJmZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3Bl
bkNETS5jcHAKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETU9wZW5DRE0uaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVO
QUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorI2luY2x1ZGUgIkNETVJlc3RyaWN0aW9ucy5o
IgorI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhS2V5TWVzc2Fn
ZVR5cGUuaCIKKyNpbmNsdWRlICJNZWRpYUtleVN0YXR1cy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmICghZGVmaW5lZChHU1RfRElTQUJM
RV9HU1RfREVCVUcpKQorI2luY2x1ZGUgPHd0Zi9NRDUuaD4KK0dTVF9ERUJVR19DQVRFR09SWV9F
WFRFUk4od2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBH
U1RfQ0FUX0RFRkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKyNl
bmRpZgorCituYW1lc3BhY2UgeworCit1c2luZyBPcGVuQ0RNS2V5U3RhdHVzID0gS2V5U3RhdHVz
OworCit9CisKK3N0YXRpYyBMaWNlbnNlVHlwZSBvcGVuQ0RNTGljZW5zZVR5cGUoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZSBsaWNlbnNlVHlwZSkKK3sKKyAgICBzd2l0
Y2ggKGxpY2Vuc2VUeXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246
OkxpY2Vuc2VUeXBlOjpUZW1wb3Jhcnk6CisgICAgICAgIHJldHVybiBUZW1wb3Jhcnk7CisgICAg
Y2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50
VXNhZ2VSZWNvcmQ6CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50VXNhZ2VSZWNvcmQ7CisgICAg
Y2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50
TGljZW5zZToKKyAgICAgICAgcmV0dXJuIFBlcnNpc3RlbnRMaWNlbnNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVGVtcG9yYXJ5
OworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgKCFkZWZpbmVkKEdTVF9E
SVNBQkxFX0dTVF9ERUJVRykpCitTdHJpbmcgaW5pdERhdGFNRDUoY29uc3QgSW5pdERhdGEmIGlu
aXREYXRhKQoreworICAgIFdURjo6TUQ1IG1kNTsKKyAgICBtZDUuYWRkQnl0ZXMoaW5pdERhdGEu
cGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7
CisKKyAgICBXVEY6Ok1ENTo6RGlnZXN0IGRpZ2VzdDsKKyAgICBtZDUuY2hlY2tzdW0oZGlnZXN0
KTsKKworICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGlnZXN0WzBdLCBXVEY6Ok1E
NTo6aGFzaFNpemUpOworfQorI2VuZGlmCisKK3N0YXRpYyBDRE1JbnN0YW5jZVNlc3Npb246OlNl
c3Npb25Mb2FkRmFpbHVyZSBzZXNzaW9uTG9hZEZhaWx1cmVGcm9tT3BlbkNETShjb25zdCBTdHJp
bmcmIGxvYWRTdGF0dXMpCit7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIk5vbmUiKQorICAgICAg
ICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmU7Cisg
ICAgaWYgKGxvYWRTdGF0dXMgPT0gIlNlc3Npb25Ob3RGb3VuZCIpCisgICAgICAgIHJldHVybiBD
RE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9TZXNzaW9uRGF0YTsKKyAg
ICBpZiAobG9hZFN0YXR1cyA9PSAiTWlzbWF0Y2hlZFNlc3Npb25UeXBlIikKKyAgICAgICAgcmV0
dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpNaXNtYXRjaGVkU2Vz
c2lvblR5cGU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlF1b3RhRXhjZWVkZWQiKQorICAgICAg
ICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9hZEZhaWx1cmU6OlF1b3RhRXhj
ZWVkZWQ7CisgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJl
OjpPdGhlcjsKK30KKworc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVj
dChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICAvLyBGYWlsIG9uIGxhcmdlIGJ1
ZmZlcnMgd2hvc2Ugc2l6ZSBkb2Vzbid0IGZpdCBpbnRvIGEgMzItYml0IHVuc2lnbmVkIGludGVn
ZXIuCisgICAgc2l6ZV90IHNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgIGlmIChzaXplID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMgSlNPTiwgcmV0dXJuaW5n
IHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KKyAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OworICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gdmFsdWU7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAgIGlmICghSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkgfHwgIXZhbHVlLT5hc09iamVjdChvYmpl
Y3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K0NETUZhY3RvcnlPcGVuQ0RNJiBDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9uKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RNRmFjdG9yeU9wZW5DRE0+IHNfZmFjdG9yeTsKKyAg
ICByZXR1cm4gc19mYWN0b3J5OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gQ0RN
RmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAg
ICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKSk7CisgICAgcmV0dXJuIG1ha2VV
bmlxdWU8Q0RNUHJpdmF0ZU9wZW5DRE0+KGtleVN5c3RlbSk7Cit9CisKK1JlZlB0cjxDRE1Qcm94
eT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0c0tleVN5c3RlbShrZXlTeXN0ZW0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5T3BlbkNETShrZXlTeXN0ZW0pKTsKK30KKworY29u
c3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3RvcnlPcGVuQ0RNOjpzdXBwb3J0ZWRLZXlTeXN0ZW1z
KCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVN5c3RlbXM7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgZW1wdHlTdHJpbmc7CisgICAg
ICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwgMCBtZWFucyBzdXBwb3J0ZWQsIGhlbmNlIHNvbWV0
aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgIGlmICghb3BlbmNkbV9pc190
eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OnNfV2lkZXZpbmVLZXlTeXN0ZW0s
IGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAgICAgICAgICAgc3VwcG9ydGVkS2V5U3lzdGVtcy5h
cHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBwb3J0ZWRLZXlTeXN0ZW1zLmlzRW1wdHkoKSAmJiBp
c09wZW5DRE1SYW5rZWQoKSkKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRF9XSVRIX01F
U1NBR0UoIk5vIGtleSBzeXN0ZW1zIHN1cHBvcnRlZCBvbiBPcGVuQ0RNIGFuZCBPcGVuQ0RNIGlz
IHByZWZlcnJlZC4gSXMgVGh1bmRlciBydW5uaW5nPyBBcmUgdGhlIHBsdWdpbnMgYnVpbHQ/Iik7
CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkS2V5U3lzdGVtczsKK30KKwor
Ym9vbCBDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBr
ZXlTeXN0ZW0pCit7CisgICAgcmV0dXJuIENETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24oKS5z
dXBwb3J0ZWRLZXlTeXN0ZW1zKCkuY29udGFpbnMoa2V5U3lzdGVtKTsKK30KKworVmVjdG9yPEF0
b21TdHJpbmc+IENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzKCkgY29u
c3QKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZl
Y3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzOworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy51bmNo
ZWNrZWRBcHBlbmQoQXRvbVN0cmluZygia2V5aWRzIikpOworICAgICAgICBzdXBwb3J0ZWRJbml0
RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5nKCJjZW5jIikpOworICAgICAgICBz
dXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5nKCJ3ZWJtIikp
OworICAgIH0pOworICAgIHJldHVybiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzOworfQorCitib29s
IENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lz
dGVtQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8m
IGF1ZGlvQ2FwYWJpbGl0eSA6IGNvbmZpZ3VyYXRpb24uYXVkaW9DYXBhYmlsaXRpZXMpIHsKKyAg
ICAgICAgaWYgKG9wZW5jZG1faXNfdHlwZV9zdXBwb3J0ZWQobV9rZXlTeXN0ZW0udXRmOCgpLmRh
dGEoKSwgYXVkaW9DYXBhYmlsaXR5LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHZpZGVvQ2FwYWJpbGl0
eSA6IGNvbmZpZ3VyYXRpb24udmlkZW9DYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgaWYgKG9wZW5j
ZG1faXNfdHlwZV9zdXBwb3J0ZWQobV9rZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSwgdmlkZW9DYXBh
YmlsaXR5LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVjdG9yPEF0b21TdHJpbmc+IENE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRSb2J1c3RuZXNzZXMoKSBjb25zdAoreworICAgIHJl
dHVybiB7IGVtcHR5QXRvbSgpIH07Cit9CisKK0NETVJlcXVpcmVtZW50IENETVByaXZhdGVPcGVu
Q0RNOjpkaXN0aW5jdGl2ZUlkZW50aWZpZXJzUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENETVJlcXVpcmVtZW50OjpPcHRpb25hbDsKK30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJp
dmF0ZU9wZW5DRE06OnBlcnNpc3RlbnRTdGF0ZVJlcXVpcmVtZW50KGNvbnN0IENETUtleVN5c3Rl
bUNvbmZpZ3VyYXRpb24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdAoreworICAgIHJl
dHVybiBDRE1SZXF1aXJlbWVudDo6T3B0aW9uYWw7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5D
RE06OmRpc3RpbmN0aXZlSWRlbnRpZmllcnNBcmVVbmlxdWVQZXJPcmlnaW5BbmRDbGVhcmFibGUo
Y29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitSZWZQdHI8Q0RNSW5zdGFuY2U+IENETVByaXZhdGVPcGVuQ0RNOjpjcmVhdGVJ
bnN0YW5jZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZU9wZW5DRE0o
bV9rZXlTeXN0ZW0pKTsKK30KKwordm9pZCBDRE1Qcml2YXRlT3BlbkNETTo6bG9hZEFuZEluaXRp
YWxpemUoKQoreworICAgIC8vIE5vLW9wLgorfQorCitib29sIENETVByaXZhdGVPcGVuQ0RNOjpz
dXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcygpIGNvbnN0Cit7CisgICAgLy8gU2VydmVyIGNlcnRp
ZmljYXRlcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdAoreworICAgIC8vIFNl
c3Npb25zIGFyZSBzdXBwb3J0ZWQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJp
dmF0ZU9wZW5DRE06OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFU
eXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBjb25zdAoreworICAgIC8vIFZhbGlk
YXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBvYmplY3QgaW4ga2V5aWRzIGNhc2Uu
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtl
eWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1ZmZlciBhcyBDRU5DIGluaXREYXRh
LiBGSVhNRTogVmFsaWRhdGUgaXQgaXMgYWN0dWFsbHkgQ0VOQy4KKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAiY2VuYyIpICYmICFpbml0RGF0YS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGlu
aXREYXRhIGJ1ZmZlciBhcyBXZWJNIGluaXREYXRhLgorICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJ3ZWJtIikgJiYgIWluaXREYXRhLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0
cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVPcGVuQ0RNOjpzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0
IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlc3BvbnNlLmNv
cHkoKTsKK30KKworT3B0aW9uYWw8U3RyaW5nPiBDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVT
ZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNl
c3Npb25JZDsKK30KKworQ0RNSW5zdGFuY2VPcGVuQ0RNOjpDRE1JbnN0YW5jZU9wZW5DRE0oY29u
c3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisgICAgOiBDRE1JbnN0YW5jZVByb3h5KGtleVN5c3RlbSwg
S2V5U3RvcmU6Ok1lcmdlU3RyYXRlZ3k6OlJlcGxhY2VJZk5ld2VyKSwgbV9vcGVuQ0RNU3lzdGVt
KG9wZW5jZG1fY3JlYXRlX3N5c3RlbShrZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSkpCisgICAgLCBt
X2tleVN5c3RlbShrZXlTeXN0ZW0pCit7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpp
bml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlv
biYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3RhdGUKKyAg
ICAsIFN1Y2Nlc3NDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKFN1Y2NlZWRl
ZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZShS
ZWY8U2hhcmVkQnVmZmVyPiYmIGNlcnRpZmljYXRlLCAgU3VjY2Vzc0NhbGxiYWNrJiYgY2FsbGJh
Y2spCit7CisgICAgY2FsbGJhY2soIW9wZW5jZG1fc3lzdGVtX3NldF9zZXJ2ZXJfY2VydGlmaWNh
dGUobV9vcGVuQ0RNU3lzdGVtLmdldCgpLCBjb25zdF9jYXN0PHVpbnQ4X3QqPihjZXJ0aWZpY2F0
ZS0+ZGF0YUFzVUludDhQdHIoKSksIGNlcnRpZmljYXRlLT5zaXplKCkpCisgICAgICAgID8gU3Vj
Y2VlZGVkIDogRmFpbGVkKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZU9wZW5DRE06OnNldFN0b3Jh
Z2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKENE
TUluc3RhbmNlT3BlbkNETSYgaW5zdGFuY2UpCisgICAgOiBDRE1JbnN0YW5jZVNlc3Npb25Qcm94
eShpbnN0YW5jZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fb3BlbkNE
TVNlc3Npb25DYWxsYmFja3MucHJvY2Vzc19jaGFsbGVuZ2VfY2FsbGJhY2sgPSBbXShPcGVuQ0RN
U2Vzc2lvbiosIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFyW10sIGNvbnN0IHVpbnQ4X3QgY2hh
bGxlbmdlW10KKyAgICAgICAgLCBjb25zdCB1aW50MTZfdCBjaGFsbGVuZ2VMZW5ndGgpIHsKKyAg
ICAgICAgR1NUX0RFQlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBub3RpZmljYXRpb24iKTsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0
PENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBidWZmZXIgPSBXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShjaGFsbGVuZ2UKKyAgICAgICAgICAgICwgY2hhbGxlbmdl
TGVuZ3RoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZXNzaW9uLT5jaGFsbGVuZ2VHZW5lcmF0ZWRD
YWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworICAgIG1fb3Bl
bkNETVNlc3Npb25DYWxsYmFja3Mua2V5X3VwZGF0ZV9jYWxsYmFjayA9IFtdKE9wZW5DRE1TZXNz
aW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IHVpbnQ4X3Qga2V5SUREYXRhW10sIGNvbnN0IHVp
bnQ4X3Qga2V5SURMZW5ndGgpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJHb3QgJ2tleSB1cGRhdGVk
JyBPQ0RNIG5vdGlmaWNhdGlvbiIpOworICAgICAgICBLZXlJRFR5cGUga2V5SUQ7CisgICAgICAg
IGtleUlELmFwcGVuZChrZXlJRERhdGEsIGtleUlETGVuZ3RoKTsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3RhbmNlU2Vz
c2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBrZXlJRCA9IFdURk1vdmUoa2V5SUQpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHNlc3Npb24tPmtleVVwZGF0ZWRDYWxsYmFjayhXVEZNb3ZlKGtleUlEKSk7
CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcy5rZXlz
X3VwZGF0ZWRfY2FsbGJhY2sgPSBbXShjb25zdCBPcGVuQ0RNU2Vzc2lvbiosIHZvaWQqIHVzZXJE
YXRhKSB7CisgICAgICAgIEdTVF9ERUJVRygiR290ICdhbGwga2V5cyB1cGRhdGVkJyBPQ0RNIG5v
dGlmaWNhdGlvbiIpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZXNzaW9uID0gbWFrZVdl
YWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSo+KHVzZXJEYXRhKSld
KCkgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHNlc3Npb24tPmtleXNVcGRhdGVEb25lQ2FsbGJhY2soKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLmVycm9yX21lc3NhZ2Vf
Y2FsbGJhY2sgPSBbXShPcGVuQ0RNU2Vzc2lvbiosIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFy
IG1lc3NhZ2VbXSkgeworICAgICAgICBHU1RfRVJST1IoIkdvdCAnZXJyb3InIE9DRE0gbm90aWZp
Y2F0aW9uOiAlcyIsIG1lc3NhZ2UpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZXNzaW9u
ID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSo+KHVz
ZXJEYXRhKSksIGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2UK
KyAgICAgICAgICAgICwgc3RybGVuKG1lc3NhZ2UpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IGlmICghc2Vzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZXNz
aW9uLT5lcnJvckNhbGxiYWNrKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH07
Cit9CisKK1JlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlT3BlbkNETTo6Y3Jl
YXRlU2Vzc2lvbigpCit7CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0+IG5l
d1Nlc3Npb24gPSBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSgqdGhpcykp
OworICAgIEFTU0VSVChuZXdTZXNzaW9uKTsKKyAgICB0cmFja1Nlc3Npb24oKm5ld1Nlc3Npb24p
OworICAgIHJldHVybiBuZXdTZXNzaW9uOworfQorCitzdGF0aWMgc3RkOjpwYWlyPFJlZlB0cjxT
aGFyZWRCdWZmZXI+LCBPcHRpb25hbDxXZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlPj4gcGFy
c2VSZXNwb25zZU1lc3NhZ2UoY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKK3sK
KyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCksIFdURjo6bnVsbG9wdCk7CisKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpN
ZWRpYUtleU1lc3NhZ2VUeXBlPiBtZXNzYWdlVHlwZTsKKyAgICBTdHJpbmcgbWVzc2FnZShTdHJp
bmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUoKSkpOworICAgIHNpemVfdCB0eXBlUG9z
aXRpb24gPSBtZXNzYWdlLmZpbmQoIjpUeXBlOiIpOworICAgIFN0cmluZyByZXF1ZXN0VHlwZSht
ZXNzYWdlLmNoYXJhY3RlcnM4KCksIHR5cGVQb3NpdGlvbiAhPSBub3RGb3VuZCA/IHR5cGVQb3Np
dGlvbiA6IDApOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDB1OworICAgIGlmICghcmVxdWVzdFR5
cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxlbmd0aCgpICE9IG1lc3NhZ2UubGVuZ3RoKCkp
CisgICAgICAgIG9mZnNldCA9IHR5cGVQb3NpdGlvbiArIDY7CisKKyAgICBpZiAocmVxdWVzdFR5
cGUubGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgbWVzc2FnZVR5cGUgPSBtYWtlT3B0aW9uYWwoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4ocmVxdWVzdFR5cGUudG9JbnQo
KSkpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1l
c3NhZ2UuY2hhcmFjdGVyczgoKSArIG9mZnNldCwgbWVzc2FnZS5zaXplSW5CeXRlcygpIC0gb2Zm
c2V0KSwgbWVzc2FnZVR5cGUpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06
OmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
KQoreworICAgIGF1dG8gbWVzc2FnZUFuZFJlcXVlc3RUeXBlID0gcGFyc2VSZXNwb25zZU1lc3Nh
Z2UoYnVmZmVyKTsKKworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBl
LmcuIHJlcXVlc3RMaWNlbnNlKCkgYnV0IHVwZGF0ZSgpIG9yIHJlbW92ZSgpIGFzIHdlbGwuCisg
ICAgLy8gVGhpcyBjYWxsZWQgbm90IGFzIGEgcmVzcG9uc2UgdG8gQVBJIGNhbGwgaXMgYWxzbyBw
b3NzaWJsZS4KKyAgICBpZiAoIW1fY2hhbGxlbmdlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX21lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdCk7Cisg
ICAgICAgIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiA9IG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5z
ZWNvbmQgPT0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpNZXNzYWdlVHlwZTo6SW5kaXZpZHVhbGl6YXRp
b25SZXF1ZXN0OworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2hhbGxlbmdlQ2FsbGJhY2sg
OiBtX2NoYWxsZW5nZUNhbGxiYWNrcykKKyAgICAgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrKCk7
CisgICAgICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CisgICAgfSBlbHNlIGlmICgh
bV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykKKyAg
ICAgICAgICAgIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sodHJ1ZSwgbWVzc2FnZUFuZFJlcXVlc3RU
eXBlLmZpcnN0LmNvcHlSZWYoKSk7CisgICAgICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3Mu
Y2xlYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9jbGllbnQgJiYgbWVzc2FnZUFu
ZFJlcXVlc3RUeXBlLnNlY29uZC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgbV9jbGllbnQtPnNl
bmRNZXNzYWdlKHN0YXRpY19jYXN0PENETU1lc3NhZ2VUeXBlPihtZXNzYWdlQW5kUmVxdWVzdFR5
cGUuc2Vjb25kLnZhbHVlKCkpLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVH
KSB8fCAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmco
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3Rh
dHVzKSB7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOgor
ICAgICAgICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBpcmVkIjsKKyAgICBjYXNlIENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuICJS
ZWxlYXNlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0
UmVzdHJpY3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0cmljdGVkIjsKKyAgICBjYXNl
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOgorICAgICAg
ICByZXR1cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiAiU3RhdHVzUGVuZGlu
ZyI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJv
cjoKKyAgICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9
Cit9CisjZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgQ0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgT3BlbkNETUtleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlz
RW1wdHkoKSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNzaW9uLmdldCgpLCBrZXlJRC5k
YXRhKCksIGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOworCisgICAgc3dpdGNoIChzdGF0
dXMpIHsKKyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVkOgorICAgICAgICByZXR1cm4g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7CisgICAgY2FzZSBSZWxlYXNl
ZDoKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNl
ZDsKKyAgICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsKKyAgICBjYXNlIE91dHB1dERv
d25zY2FsZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6
T3V0cHV0RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVy
biBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVzUGVuZGluZzsKKyAgICBjYXNl
IEludGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpJ
bnRlcm5hbEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RN
OjprZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQpCit7CisgICAgR1NUX01FTURV
TVAoInVwZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpOworCisgICAgYXV0
byBrZXlTdGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9ERUJVRygidXBkYXRlZCB3aXRo
IHdpdGgga2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1cykpOworICAgIG1fZG9lc0tl
eVN0b3JlTmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5SGFuZGxlOjpjcmVhdGUoa2V5
U3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgQm94UHRyPE9wZW5DRE1TZXNzaW9uPigpKSk7Cit9CisK
K3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygp
Cit7CisgICAgR1NUX0RFQlVHKCJ1cGRhdGUgZG9uZSIpOworICAgIGlmIChtX2RvZXNLZXlTdG9y
ZU5lZWRNZXJnaW5nKSB7CisgICAgICAgIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgPSBmYWxz
ZTsKKyAgICAgICAgYXV0byBpbnN0YW5jZSA9IGNkbUluc3RhbmNlT3BlbkNETSgpOworICAgICAg
ICBpZiAoaW5zdGFuY2UpCisgICAgICAgICAgICBpbnN0YW5jZS0+bWVyZ2VLZXlzRnJvbShtX2tl
eVN0b3JlKTsKKyAgICB9CisKKyAgICBpZiAobV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5pc0Vt
cHR5KCkgJiYgbV9jbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUtleVN0YXR1c2Vz
KG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nl
c3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAgICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKHRy
dWUsIG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsKK30K
Kwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjplcnJvckNhbGxiYWNrKFJlZlB0cjxT
aGFyZWRCdWZmZXI+JiYgbWVzc2FnZSkKK3sKKyAgICBHU1RfRVJST1IoIkNETSBlcnJvciIpOwor
ICAgIEdTVF9NRU1EVU1QKCJlcnJvciBkdW1wIiwgbWVzc2FnZS0+ZGF0YUFzVUludDhQdHIoKSwg
bWVzc2FnZS0+c2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNr
IDogbV9jaGFsbGVuZ2VDYWxsYmFja3MpCisgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrKCk7Cisg
ICAgbV9jaGFsbGVuZ2VDYWxsYmFja3MuY2xlYXIoKTsKKworICAgIGZvciAoYXV0byYgc2Vzc2lv
bkNoYW5nZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgIHNl
c3Npb25DaGFuZ2VkQ2FsbGJhY2soZmFsc2UsIG1lc3NhZ2UuY29weVJlZigpKTsKKyAgICBtX3Nl
c3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uT3BlbkNETTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUgbGljZW5zZVR5cGUsIGNvbnN0
IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YVNo
YXJlZEJ1ZmZlcgorICAgICwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBVVUlEIG9yIHN5c3RlbSBJRD8K
KyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VPcGVuQ0RNKCk7CisgICAgQVNTRVJUKGlu
c3RhbmNlKTsKKyAgICBtX2luaXREYXRhID0gSW5pdERhdGEoaW5zdGFuY2UtPmtleVN5c3RlbSgp
LCBXVEZNb3ZlKGluaXREYXRhU2hhcmVkQnVmZmVyKSk7CisKKyAgICBHU1RfVFJBQ0UoIkdvaW5n
IHRvIHJlcXVlc3QgYSBuZXcgc2Vzc2lvbiBpZCwgaW5pdCBkYXRhIHNpemUgJWx1IGFuZCBNRDUg
JXMiLCBtX2luaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpLCBpbml0RGF0YU1ENShtX2luaXREYXRh
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhIiwgbV9pbml0RGF0
YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5zaXpl
KCkpOworCisgICAgT3BlbkNETVNlc3Npb24qIHNlc3Npb24gPSBudWxscHRyOworICAgIG9wZW5j
ZG1fY29uc3RydWN0X3Nlc3Npb24oJmluc3RhbmNlLT5vcGVuQ0RNU3lzdGVtKCksIG9wZW5DRE1M
aWNlbnNlVHlwZShsaWNlbnNlVHlwZSksIGluaXREYXRhVHlwZS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpCisgICAgICAgICwgbV9pbml0RGF0YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIG1f
aW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCksIG51bGxwdHIsIDAsICZtX29wZW5DRE1TZXNzaW9u
Q2FsbGJhY2tzLCB0aGlzLCAmc2Vzc2lvbik7CisgICAgaWYgKCFzZXNzaW9uKSB7CisgICAgICAg
IEdTVF9FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBzZXNzaW9uIik7CisgICAgICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGNh
bGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwgZmFsc2UsIEZhaWxlZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zZXNzaW9uLnJlc2V0KHNlc3Npb24pOworICAg
IG1fc2Vzc2lvbklEID0gU3RyaW5nOjpmcm9tVVRGOChvcGVuY2RtX3Nlc3Npb25faWQobV9zZXNz
aW9uLmdldCgpKSk7CisKKyAgICBhdXRvIGdlbmVyYXRlQ2hhbGxlbmdlID0gW3RoaXMsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9p
bml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGlmIChtX3Nlc3Npb25JRC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIEdTVF9FUlJPUigiY291bGQgbm90IGNyZWF0ZSBzZXNzaW9uIGlkIik7Cisg
ICAgICAgICAgICBjYWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9uTnVsbCgpLCB7IH0sIGZhbHNl
LCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJjcmVhdGVkIGludmFsaWQg
c2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY2Fs
bGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgbV9zZXNzaW9uSUQsIGZhbHNlLCBGYWls
ZWQpOworICAgICAgICAgICAgZ2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBHU1RfREVCVUcoImNyZWF0ZWQgdmFs
aWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjYWxs
YmFjayhtX21lc3NhZ2UuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCksIG1fc2Vzc2lvbklELCBt
X25lZWRzSW5kaXZpZHVhbGl6YXRpb24sIFN1Y2NlZWRlZCk7CisgICAgfTsKKworICAgIGlmICht
X3Nlc3Npb25JRC5pc0VtcHR5KCkgfHwgaXNWYWxpZCgpKQorICAgICAgICBnZW5lcmF0ZUNoYWxs
ZW5nZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFsbGVuZ2VDYWxsYmFja3MuYXBwZW5kKFdU
Rk1vdmUoZ2VuZXJhdGVDaGFsbGVuZ2UpKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25P
cGVuQ0RNOjpzZXNzaW9uRmFpbHVyZSgpCit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdl
ZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNo
YW5nZWRDYWxsYmFjayhmYWxzZSwgbnVsbHB0cik7CisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxi
YWNrcy5jbGVhcigpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnVwZGF0
ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIExpY2Vuc2VUeXBlLCBSZWY8U2hhcmVk
QnVmZmVyPiYmIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgc2Vzc2lvbklEID09IG1fc2Vzc2lvbklEKTsK
KworICAgIEdTVF9UUkFDRSgiVXBkYXRpbmcgc2Vzc2lvbiAlcyIsIHNlc3Npb25JRC51dGY4KCku
ZGF0YSgpKTsKKworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuYXBwZW5kKFt0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1Y2Nlc3MsIFJlZlB0cjxTaGFyZWRC
dWZmZXI+JiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFtX2tleVN0b3JlLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2soZmFsc2UsIG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVzaW5n
IEpTT04gcmVwb25zZSBtZXNzYWdlcyBpcyBtdWNoIGNsZWFuZXIgdGhhbiB1c2luZyBzdHJpbmcg
cHJlZml4ZXMsIEkgYmVsaWV2ZSB0aGVyZQorICAgICAgICAgICAgICAgIC8vIHdpbGwgZXZlbiBi
ZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3BlYyB3aGVyZSBub3QgaGF2aW5nIHN0cnVjdHVyZWQgZGF0
YSB3aWxsIGJlIGJhZC4KKyAgICAgICAgICAgICAgICBhdXRvIG1lc3NhZ2VBbmRSZXF1ZXN0VHlw
ZSA9IHBhcnNlUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgaWYgKG1l
c3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVC
VUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0
LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBHU1RfTUVNRFVNUCgibWVzc2FnZSIsIG1l
c3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC0+ZGF0YUFzVUludDhQdHIoKSwgbWVzc2FnZUFuZFJl
cXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhm
YWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIHN0ZDo6bWFrZV9wYWlyKG1lc3NhZ2VB
bmRSZXF1ZXN0VHlwZS5zZWNvbmQudmFsdWVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNl
UmVxdWVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICwgbWVzc2FnZUFuZFJlcXVlc3RUeXBl
LmZpcnN0LnJlbGVhc2VOb25OdWxsKCkpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJtZXNz
YWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIGJ1ZmZlciA/IGJ1ZmZlci0+
c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgR1NUX0VSUk9SKCJ1cGRhdGUgbGljZW5zZSByZXBvcnRlZCBlcnJvciBzdGF0ZSIp
OworICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgfQorICAgIH0p
OworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2Rt
X3Nlc3Npb25fdXBkYXRlKG1fc2Vzc2lvbi5nZXQoKSwgcmVzcG9uc2UtPmRhdGFBc1VJbnQ4UHRy
KCksIHJlc3BvbnNlLT5zaXplKCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgpOworfQorCit2
b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBj
b25zdCBTdHJpbmcmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFj
ayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vzc2lvbklELCBzZXNzaW9uSUQg
PT0gbV9zZXNzaW9uSUQpOworCisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5hcHBlbmQo
W3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJvb2wgc3VjY2VzcywgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0
YXR1c1ZlY3RvcigpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNpbmcgSlNPTiByZXBvbnNlIG1lc3NhZ2VzIGlz
IG11Y2ggY2xlYW5lciB0aGFuIHVzaW5nIHN0cmluZyBwcmVmaXhlcywgSSBiZWxpZXZlIHRoZXJl
CisgICAgICAgICAgICAgICAgLy8gd2lsbCBldmVuIGJlIG90aGVyIHBhcnRzIG9mIHRoZSBzcGVj
IHdoZXJlIG5vdCBoYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpbGwgYmUgYmFkLgorICAgICAgICAg
ICAgICAgIGF1dG8gbWVzc2FnZUFuZFJlcXVlc3RUeXBlID0gcGFyc2VSZXNwb25zZU1lc3NhZ2Uo
YnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0
KSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiZ290IG1lc3NhZ2Ugb2Ygc2l6ZSAl
bHUiLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QtPnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIEdTVF9NRU1EVU1QKCJtZXNzYWdlIiwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0
LT5kYXRhQXNVSW50OFB0cigpLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QtPnNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBzdGQ6Om1ha2VfcGFpcihtZXNzYWdlQW5kUmVxdWVzdFR5cGUuc2Vjb25kLnZhbHVlT3IoTWVk
aWFLZXlNZXNzYWdlVHlwZTo6TGljZW5zZVJlcXVlc3QpCisgICAgICAgICAgICAgICAgICAgICAg
ICAsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC5yZWxlYXNlTm9uTnVsbCgpKSwgU3VjY2Vz
c1ZhbHVlOjpTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJtZXNzYWdlIG9m
IHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgp
IDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkLCBTZXNzaW9uTG9hZEZh
aWx1cmU6Ok90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBidWZmZXIgPyBidWZmZXIt
PmRhdGEoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlclNpemUgPSBidWZmZXIg
PyBidWZmZXItPnNpemUoKSA6IDA7CisgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2UoU3RyaW5n
SW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGJ1ZmZlckRhdGEpLCBidWZmZXJTaXplKSk7CisgICAgICAgICAgICBHU1RfRVJST1IoInNlc3Np
b24gJXMgbm90IGxvYWRlZCwgcmVhc29uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwg
cmVzcG9uc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCwgc2Vz
c2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0ocmVzcG9uc2UpKTsKKyAgICAgICAgfQorICAgIH0p
OworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2Rt
X3Nlc3Npb25fbG9hZChtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgp
OworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmIHNlc3Npb25JRCwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsK
KworICAgIGlmIChtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1wdHkoKSkKKyAgICAgICAg
b3BlbmNkbV9zZXNzaW9uX2Nsb3NlKG1fc2Vzc2lvbi5nZXQoKSk7CisKKyAgICBnZXRSZW1vdmVk
RnJvbUluc3RhbmNlUHJveHkoKTsKKworICAgIGNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNz
aW9uSUQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzZXNzaW9uSUQsIG1fc2Vzc2lvbklEID09IHNlc3Npb25J
RCk7CisKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtleVN0YXR1czo6UmVs
ZWFzZWQpLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gbWVzc2FnZUFuZFJlcXVlc3RUeXBlID0g
cGFyc2VSZXNwb25zZU1lc3NhZ2UoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzc2Fn
ZUFuZFJlcXVlc3RUeXBlLmZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygi
c2Vzc2lvbiAlcyByZW1vdmVkLCBtZXNzYWdlIGxlbmd0aCAlbHUiLCBtX3Nlc3Npb25JRC51dGY4
KCkuZGF0YSgpLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QtPnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVz
OjpSZWxlYXNlZCksIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC5yZWxlYXNlTm9uTnVsbCgp
LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3Jy
ZWN0bHkgZm9ybWF0dGVkIGFzIHNlc3Npb24gJXMgcmVtb3ZhbCBhbnN3ZXIiLCBidWZmZXIgPyBi
dWZmZXItPnNpemUoKSA6IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICwgbV9zZXNzaW9uSUQu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUu
YWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpJbnRlcm5hbEVycm9yKSwgV1RGOjpudWxsb3B0LCBT
dWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoImNvdWxkIG5vdCByZW1v
dmUgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
Y2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJy
b3IpLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgfQorICAg
IH0pOworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVu
Y2RtX3Nlc3Npb25fcmVtb3ZlKG1fc2Vzc2lvbi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWls
dXJlKCk7CisKKyAgICBnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJveHkoKTsKK30KKwordm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitPcHRpb25hbDxDRE1JbnN0YW5j
ZU9wZW5DRE0mPiBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjZG1JbnN0YW5jZU9wZW5DRE0o
KSBjb25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZVByb3h5KCk7CisgICAg
aWYgKCFpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VPcGVuQ0RNJj4oKmluc3RhbmNlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uNmYyNDY1MDU0ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmgK
QEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUgIkNETUZhY3RvcnkuaCIK
KyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRlICJDRE1PcGVuQ0RNVHlw
ZXMuaCIKKyNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBPcGVuQ0RNIHsKKworc3RydWN0IE9DRE1TeXN0ZW1EZWxldGVyIHsKKyAgICBPcGVu
Q0RNRXJyb3Igb3BlcmF0b3IoKShPcGVuQ0RNU3lzdGVtKiBwdHIpIGNvbnN0IHsgcmV0dXJuIG9w
ZW5jZG1fZGVzdHJ1Y3Rfc3lzdGVtKHB0cik7IH0KK307CisKK3VzaW5nIFNjb3BlZE9DRE1TeXN0
ZW0gPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlbkNETVN5c3RlbSwgT0NETVN5c3RlbURlbGV0ZXI+Owor
Cit1c2luZyBTY29wZWRTZXNzaW9uID0gc3RkOjp1bmlxdWVfcHRyPE9wZW5DRE1TZXNzaW9uLCBX
VEY6OkJveFB0ckRlbGV0ZXI8T3BlbkNETVNlc3Npb24+PjsKKworfSAvLyBuYW1lc3BhY2UgT3Bl
bkNETQorCitjbGFzcyBDRE1GYWN0b3J5T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5
LCBwdWJsaWMgQ0RNUHJveHlGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgQ0RNRmFjdG9yeU9wZW5DRE0mIHNpbmdsZXRvbigpOworCisg
ICAgdmlydHVhbCB+Q0RNRmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gY3JlYXRlQ0RNKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAg
IFJlZlB0cjxDRE1Qcm94eT4gY3JlYXRlQ0RNUHJveHkoY29uc3QgU3RyaW5nJikgZmluYWw7Cisg
ICAgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0OworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDRE1GYWN0b3J5T3BlbkNETT47Cisg
ICAgQ0RNRmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDRE1Qcml2YXRl
T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1Qcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDRE1Qcml2YXRlT3BlbkNETShjb25zdCBTdHJpbmcmIGtl
eVN5c3RlbSkgOiBtX2tleVN5c3RlbShrZXlTeXN0ZW0pIHsgfTsKKyAgICB2aXJ0dWFsIH5DRE1Q
cml2YXRlT3BlbkNETSgpID0gZGVmYXVsdDsKKworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBw
b3J0ZWRJbml0RGF0YVR5cGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZp
Z3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgc3VwcG9ydHNDb25maWd1cmF0aW9uV2l0aFJlc3RyaWN0aW9ucyhjb25zdCBDRE1L
ZXlTeXN0ZW1Db25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBjb25zdCBDRE1SZXN0cmljdGlv
bnMmKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJh
dGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25UeXBl
V2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNU2Vzc2lvblR5cGUmLCBjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9Cisg
ICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0IGZpbmFs
OworICAgIENETVJlcXVpcmVtZW50IGRpc3RpbmN0aXZlSWRlbnRpZmllcnNSZXF1aXJlbWVudChj
b25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikg
Y29uc3QgZmluYWw7CisgICAgQ0RNUmVxdWlyZW1lbnQgcGVyc2lzdGVudFN0YXRlUmVxdWlyZW1l
bnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9u
cyYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1
ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikg
Y29uc3QgZmluYWw7CisgICAgUmVmUHRyPENETUluc3RhbmNlPiBjcmVhdGVJbnN0YW5jZSgpIGZp
bmFsOworICAgIHZvaWQgbG9hZEFuZEluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBib29sIHN1cHBv
cnRzU2VydmVyQ2VydGlmaWNhdGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c1Nl
c3Npb25zKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0
b21TdHJpbmcmLCBjb25zdCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYpIGNvbnN0
IGZpbmFsOworICAgIE9wdGlvbmFsPFN0cmluZz4gc2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3Ry
aW5nJikgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOwor
fTsKKworY2xhc3MgQ0RNSW5zdGFuY2VPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETUluc3RhbmNl
UHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNlT3BlbkNETShjb25zdCBTdHJpbmcmIGtl
eVN5c3RlbSk7CisgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VPcGVuQ0RNKCkgPSBkZWZhdWx0Owor
CisgICAgLy8gQ0RNSW5zdGFuY2UKKyAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRp
b25UeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RN
OyB9CisgICAgdm9pZCBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lz
dGVtQ29uZmlndXJhdGlvbiYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQZXJz
aXN0ZW50U3RhdGUsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlcnZl
ckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5h
bDsKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7Cisg
ICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2tleVN5
c3RlbTsgfQorICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBm
aW5hbDsKKworICAgIE9wZW5DRE1TeXN0ZW0mIG9wZW5DRE1TeXN0ZW0oKSBjb25zdCB7IHJldHVy
biAqbV9vcGVuQ0RNU3lzdGVtLmdldCgpOyB9OworCisgICAgdm9pZCBzaHV0ZG93bigpIGZpbmFs
CisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDRE1JbnN0
YW5jZVByb3h5OjpzaHV0ZG93bigpOworICAgICAgICBtX29wZW5DRE1TeXN0ZW0ucmVzZXQobnVs
bHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE9wZW5DRE06OlNjb3BlZE9DRE1TeXN0ZW0g
bV9vcGVuQ0RNU3lzdGVtOworICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307CisKK2NsYXNzIENE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0gZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9u
UHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0oQ0RNSW5zdGFu
Y2VPcGVuQ0RNJik7CisKKyAgICB2b2lkIHJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25z
dCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEs
IExpY2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3Qg
U3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYsIExpY2Vuc2VVcGRhdGVD
YWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOwor
ICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNr
JiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGlj
ZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCBz
dG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24gJiYgbV9tZXNzYWdlICYmICFtX21lc3Nh
Z2UtPmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBzZXRDbGllbnQoV2Vha1B0cjxDRE1JbnN0YW5j
ZVNlc3Npb25DbGllbnQ+JiYgY2xpZW50KSBmaW5hbCB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGll
bnQpOyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIGZpbmFsIHsgbV9jbGllbnQuY2xlYXIoKTsg
fQorCisgICAgdm9pZCBzaHV0ZG93bigpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICAg
ICAgbV9zZXNzaW9uLnJlc2V0KG51bGxwdHIpOworICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb25Q
cm94eTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8Q0RNSW5z
dGFuY2VPcGVuQ0RNJj4gY2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29uc3Q7CisKKyAgICB1c2luZyBO
b3RpZmljYXRpb24gPSB2b2lkIChDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjoqKShSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB1c2luZyBDaGFsbGVuZ2VHZW5lcmF0ZWRD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcgU2Vzc2lvbkNoYW5nZWRDYWxs
YmFjayA9IEZ1bmN0aW9uPHZvaWQoYm9vbCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik+OworCisg
ICAgdm9pZCBjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYm
KTsKKyAgICB2b2lkIGtleVVwZGF0ZWRDYWxsYmFjayhLZXlJRFR5cGUmJik7CisgICAgdm9pZCBr
ZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgdm9pZCBlcnJvckNhbGxiYWNrKFJlZlB0cjxT
aGFyZWRCdWZmZXI+JiYpOworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1
cyhjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIHNlc3Npb25GYWlsdXJlKCk7CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgYWxsIG9yaWdpbmFsIHVzZXMgb2YgdGhlc2UgYXR0cmlidXRl
cy4KKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZSB7IEtl
eVN0b3JlOjpNZXJnZVN0cmF0ZWd5OjpSZXBsYWNlSWZOZXdlciB9OworICAgIGJvb2wgbV9kb2Vz
S2V5U3RvcmVOZWVkTWVyZ2luZyB7IGZhbHNlIH07CisgICAgSW5pdERhdGEgbV9pbml0RGF0YTsK
KyAgICBPcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcyBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzIHsg
fTsKKyAgICBPcGVuQ0RNOjpTY29wZWRTZXNzaW9uIG1fc2Vzc2lvbjsKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX21lc3NhZ2U7CisgICAgYm9vbCBtX25lZWRzSW5kaXZpZHVhbGl6YXRpb24g
eyBmYWxzZSB9OworICAgIFZlY3RvcjxDaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjaz4gbV9jaGFs
bGVuZ2VDYWxsYmFja3M7CisgICAgVmVjdG9yPFNlc3Npb25DaGFuZ2VkQ2FsbGJhY2s+IG1fc2Vz
c2lvbkNoYW5nZWRDYWxsYmFja3M7CisgICAgV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGll
bnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NETV9JTlNUQU5DRShXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE0sIFdl
YkNvcmU6OkNETUluc3RhbmNlOjpJbXBsZW1lbnRhdGlvblR5cGU6Ok9wZW5DRE0pOworCisjZW5k
aWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVBy
b3h5Q2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAppbmRleCA5MWQ3YjIzM2ExNWQuLjU3ZTI4YmNi
ZjRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0xMjIsMTEg
KzEyMiwxNCBAQCBib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5KGNv
bnN0IGNlbmNEZWNyeXB0Q29udGV4dCYgaW4pCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVj
OwogICAgIGtleUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CiAK
LSAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGF1dG8g
a2V5RGF0YSA9IGdldE9yV2FpdEZvcktleVZhbHVlKGtleUlEVmVjKTsKICAgICBpZiAoIWtleURh
dGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVy
RXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoZ0NyeXB0SGFuZGxlKCksIGtleURhdGEtPmRhdGEo
KSwga2V5RGF0YS0+c2l6ZSgpKSkgeworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3Rvcjx1aW50OF90Pj4oa2V5RGF0YS52YWx1ZSgpKSk7CisgICAgYXV0byYga2V5RGF0YVZh
bHVlID0gV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXlEYXRhLnZhbHVlKCkpOworCisgICAg
aWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShnQ3J5cHRI
YW5kbGUoKSwga2V5RGF0YVZhbHVlLmRhdGEoKSwga2V5RGF0YVZhbHVlLnNpemUoKSkpIHsKICNp
ZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5
IC0gRVJST1IoZ2NyeV9jaXBoZXJfc2V0a2V5KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJy
b3IpKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNDdmZWRlY2NiMWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5T3BlbkNETS5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAq
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVuQ0RNLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlIDxvcGVuX2NkbV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCitH
U1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0Nh
dGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5
cHREZWJ1Z0NhdGVnb3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTk9URTogWW91VHVi
ZSAyMDE5IEVNRSBjb25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhpcyB0byBiZSA+PTVzLgorY29u
c3QgV1RGOjpTZWNvbmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dCA9IFdURjo6U2Vjb25k
cyg2KTsKKworQm94UHRyPE9wZW5DRE1TZXNzaW9uPiBDRE1Qcm94eU9wZW5DRE06OmdldERlY3J5
cHRpb25TZXNzaW9uKGNvbnN0IERlY3J5cHRpb25Db250ZXh0JiBpbikgY29uc3QKK3sKKyAgICBh
dXRvIG1hcHBlZEtleUlEID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW4ua2V5SURCdWZmZXIs
IEdTVF9NQVBfUkVBRCk7CisgICAgaWYgKCFtYXBwZWRLZXlJRCkgeworICAgICAgICBHU1RfRVJS
T1IoIkZhaWxlZCB0byBtYXAga2V5IElEIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIGtleUlEID0gbWFwcGVkS2V5SUQtPmNyZWF0ZVZlY3Rvcigp
OworCisgICAgYXV0byBrZXlIYW5kbGUgPSBnZXRPcldhaXRGb3JLZXlIYW5kbGUoa2V5SUQpOwor
ICAgIGlmICgha2V5SGFuZGxlIHx8ICEoKmtleUhhbmRsZSktPmlzU3RhdHVzQ3VycmVudGx5VmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQga2V5RGF0YSA9ICgqa2V5SGFuZGxlKS0+dmFsdWUoKTsKKyAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxCb3hQdHI8T3BlbkNETVNlc3Npb24+PihrZXlEYXRhKSk7CisKKyAgICBh
dXRvJiBrZXlWYWx1ZSA9IFdURjo6Z2V0PEJveFB0cjxPcGVuQ0RNU2Vzc2lvbj4+KGtleURhdGEp
OworCisgICAgaWYgKCFrZXlWYWx1ZSkgeworICAgICAgICBrZXlWYWx1ZSA9IGNyZWF0ZUJveFB0
cihvcGVuY2RtX2dldF9zeXN0ZW1fc2Vzc2lvbigmc3RhdGljX2Nhc3Q8Y29uc3QgQ0RNSW5zdGFu
Y2VPcGVuQ0RNKj4oaW5zdGFuY2UoKSktPm9wZW5DRE1TeXN0ZW0oKSwga2V5SUQuZGF0YSgpLCBr
ZXlJRC5zaXplKCkKKyAgICAgICAgICAgICwgc19saWNlbnNlS2V5UmVzcG9uc2VUaW1lb3V0Lm1p
bGxpc2Vjb25kc0FzPHVpbnQzMl90PigpKSk7CisgICAgICAgIEFTU0VSVChrZXlWYWx1ZSk7Cisg
ICAgICAgICgqa2V5SGFuZGxlKS0+dGFrZVZhbHVlSWZEaWZmZXJlbnQoa2V5VmFsdWUpOworICAg
IH0KKworICAgIHJldHVybiBrZXlWYWx1ZTsKK30KKworYm9vbCBDRE1Qcm94eU9wZW5DRE06OmRl
Y3J5cHQoQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0aW9uQ29udGV4dCYgaW5wdXQpCit7CisgICAg
Qm94UHRyPE9wZW5DRE1TZXNzaW9uPiBzZXNzaW9uID0gZ2V0RGVjcnlwdGlvblNlc3Npb24oaW5w
dXQpOworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBHU1RfRVJST1IoInRoZXJlIGlzIG5v
IHZhbGlkIHNlc3Npb24gdG8gZGVjcnlwdCBmb3IgdGhlIHByb3ZpZGVkIGtleSBJRCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NUX1RSQUNFKCJkZWNyeXB0aW5nIik7
CisgICAgLy8gRGVjcnlwdCBjaXBoZXIuCisgICAgT3BlbkNETUVycm9yIGVycm9yQ29kZSA9IG9w
ZW5jZG1fZ3N0cmVhbWVyX3Nlc3Npb25fZGVjcnlwdChzZXNzaW9uLT5nZXQoKSwgaW5wdXQuZGF0
YUJ1ZmZlciwgaW5wdXQuc3Vic2FtcGxlc0J1ZmZlciwgaW5wdXQubnVtU3Vic2FtcGxlcworICAg
ICAgICAsIGlucHV0Lml2QnVmZmVyLCBpbnB1dC5rZXlJREJ1ZmZlciwgMCk7CisgICAgaWYgKGVy
cm9yQ29kZSkgeworICAgICAgICBHU1RfRVJST1IoImRlY3J5cHRpb24gZmFpbGVkLCBlcnJvciBj
b2RlICVYIiwgZXJyb3JDb2RlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVu
Q0RNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5T3BlbkNETS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MGM5YzNkMDFhNjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5B
QkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRl
ICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRo
YXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhIHBsYXRmb3JtIENE
TSBtb2R1bGUuCitjbGFzcyBDRE1Qcm94eU9wZW5DRE0gZmluYWwgOiBwdWJsaWMgQ0RNUHJveHks
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1Qcm94eU9wZW5DRE0sIFdlYWtQdHJGYWN0b3J5SW5p
dGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlPcGVuQ0RNKGNvbnN0
IFN0cmluZyYga2V5U3lzdGVtKQorICAgICAgICA6IG1fa2V5U3lzdGVtKGtleVN5c3RlbSkgeyB9
CisgICAgdmlydHVhbCB+Q0RNUHJveHlPcGVuQ0RNKCkgPSBkZWZhdWx0OworCisgICAgc3RydWN0
IERlY3J5cHRpb25Db250ZXh0IHsKKyAgICAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlcjsKKyAg
ICAgICAgR3N0QnVmZmVyKiBpdkJ1ZmZlcjsKKyAgICAgICAgR3N0QnVmZmVyKiBkYXRhQnVmZmVy
OworICAgICAgICBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXI7CisgICAgICAgIHNpemVfdCBu
dW1TdWJzYW1wbGVzOworICAgIH07CisKKyAgICBib29sIGRlY3J5cHQoRGVjcnlwdGlvbkNvbnRl
eHQmKTsKKyAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIHsgcmV0dXJuIG1fa2V5U3lzdGVt
OyB9CisKK3ByaXZhdGU6CisgICAgQm94UHRyPE9wZW5DRE1TZXNzaW9uPiBnZXREZWNyeXB0aW9u
U2Vzc2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIFN0cmluZyBtX2tl
eVN5c3RlbTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGls
aXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
R1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKaW5kZXggOGE5MmNhM2IxZWE4Li4yMWUyZDU1ZWRmZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaApAQCAtMjksNiAr
MjksOSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5lIFdFQkNP
UkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJRCAiMTA3N2VmZWMtYzBiMi00
ZDAyLWFjZTMtM2MxZTUyZTJmYjRiIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2RlZmluZSBXRUJD
T1JFX0dTVFJFQU1FUl9FTUVfVVRJTElUSUVTX1dJREVWSU5FX1VVSUQgImVkZWY4YmE5LTc5ZDYt
NGFjZS1hM2M4LTI3ZGNkNTFkMjFlZCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBJbml0RGF0YSB7CkBAIC00OCw2ICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGF5
bG9hZCA9IG1hcHBlZEluaXREYXRhLT5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKICAgICB9CiAKKyAg
ICBJbml0RGF0YShjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYm
IHBheWxvYWQpCisgICAgICAgIDogbV9zeXN0ZW1JZChzeXN0ZW1JZCkKKyAgICAgICAgLCBtX3Bh
eWxvYWQoV1RGTW92ZShwYXlsb2FkKSkKKyAgICB7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmQo
SW5pdERhdGEmJiBpbml0RGF0YSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBz
b21lIGNvbmZ1c2lvbiBoZXJlIGFib3V0IGhvdyB0byBkZXRlY3QgdGhlCkBAIC02NCw3ICs3Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9wYXlsb2FkLT5hcHBlbmQoKmluaXREYXRhLnBheWxvYWQo
KSk7CiAgICAgfQogCi0gICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcGF5bG9hZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+
JiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CiAgICAgY29uc3QgU3RyaW5n
JiBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVtSWQ7IH0KICAgICBTdHJpbmcgcGF5
bG9hZENvbnRhaW5lclR5cGUoKSBjb25zdAogICAgIHsKQEAgLTExNSwxNyArMTI0LDMzIEBAIGNs
YXNzIEdTdHJlYW1lckVNRVV0aWxpdGllcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBjaGFyIGNvbnN0KiBzX0NsZWFyS2V5VVVJRCA9IFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElM
SVRJRVNfQ0xFQVJLRVlfVVVJRDsKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNf
Q2xlYXJLZXlLZXlTeXN0ZW0gPSAib3JnLnczLmNsZWFya2V5IjsKKyNpZiBFTkFCTEUoT1BFTkNE
TSkKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfV2lkZXZpbmVVVUlEID0gV0VC
Q09SRV9HU1RSRUFNRVJfRU1FX1VUSUxJVElFU19XSURFVklORV9VVUlEOworICAgIHN0YXRpYyBj
b25zdGV4cHIgY2hhciBjb25zdCogc19XaWRldmluZUtleVN5c3RlbSA9ICJjb20ud2lkZXZpbmUu
YWxwaGEiOworI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NsZWFyS2V5S2V5U3lzdGVtKGNv
bnN0IFN0cmluZyYga2V5U3lzdGVtKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX0NsZWFyS2V5S2V5U3lzdGVtKTsKICAgICB9CiAKKyNp
ZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0aWMgYm9vbCBpc1dpZGV2aW5lS2V5U3lzdGVtKGNv
bnN0IFN0cmluZyYga2V5U3lzdGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyAgICB9CisjZW5k
aWYKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrZXlTeXN0ZW1Ub1V1aWQoY29uc3QgU3RyaW5n
JiBrZXlTeXN0ZW0pCiAgICAgewogICAgICAgICBpZiAoaXNDbGVhcktleUtleVN5c3RlbShrZXlT
eXN0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIHNfQ2xlYXJLZXlVVUlEOwogCisjaWYgRU5BQkxF
KE9QRU5DRE0pCisgICAgICAgIGlmIChpc1dpZGV2aW5lS2V5U3lzdGVtKGtleVN5c3RlbSkpCisg
ICAgICAgICAgICByZXR1cm4gc19XaWRldmluZVVVSUQ7CisjZW5kaWYKKwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENs
ZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3Bw
CmluZGV4IDg2YjdjNjZmYWQ0Zi4uNTEwM2Q0Y2I5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlw
dG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtNDIs
NiArNDIsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7CiB9
OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgY29uc3QgY2hhciog
cHJvdGVjdGlvblN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsK
IHN0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENETVByb3h5PiYpOwogc3RhdGljIGJvb2wgZGVj
cnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwg
R3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXND
b3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIApAQCAtODMsNyArODQsNyBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRp
YUNsZWFyS2V5RGVjcnlwdAogICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJLZXkg
ZGVjcnlwdG9yIik7CiAKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xh
c3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwot
ICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVz
OjpzX0NsZWFyS2V5VVVJRDsKKyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdT
VF9ERUJVR19GVU5DUFRSKHByb3RlY3Rpb25TeXN0ZW1JZCk7CiAgICAgY2VuY0NsYXNzLT5jZG1Q
cm94eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAg
Y2VuY0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKQEAgLTEw
Niw2ICsxMDcsMTEgQEAgc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAg
IEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0K
IAorc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KikKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVz
OjpzX0NsZWFyS2V5VVVJRDsKK30KKwogc3RhdGljIGJvb2wgY2RtUHJveHlBdHRhY2hlZChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RNUHJv
eHk+JiBjZG1Qcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFf
Q0tfREVDUllQVChzZWxmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCA0N2I1
NjBmNzM5MjAuLjE1ZTEzYWJmYmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBA
IC0xMzQsMTQgKzEzNCwxNCBAQCBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RCYXNl
VHJhbnNmb3JtKiBiYXNlLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAogICAgICAgICAgICAg
Ly8gY2FuIGNhdXNlIGNhcHMgbmVnb3RpYXRpb24gZmFpbHVyZXMgd2l0aCBhZGFwdGl2ZSBiaXRy
YXRlIHN0cmVhbXMuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMob3V0
Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJiYXNlLXByb2ZpbGUiLCAiY29kZWNfZGF0YSIsICJoZWln
aHQiLCAiZnJhbWVyYXRlIiwgImxldmVsIiwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICJwcm9maWxl
IiwgInJhdGUiLCAid2lkdGgiLCBudWxscHRyKTsKIAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9zZXQob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQ
RV9TVFJJTkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwgInByb3RlY3Rpb24tc3lzdGVtIiwg
R19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZChzZWxmKSwKICAgICAgICAg
ICAgICAgICAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1
cmVfZ2V0X25hbWUoaW5jb21pbmdTdHJ1Y3R1cmUpLCBudWxscHRyKTsKIAogICAgICAgICAgICAg
Ly8gR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lEIHdhcyBhZGRlZCBpbiB0aGUg
R1N0cmVhbWVyCiAgICAgICAgICAgICAvLyBkZXZlbG9wZW1lbnQgZ2l0IG1hc3RlciB3aGljaCB3
aWxsIHNoaXAgYXMgdmVyc2lvbiAxLjE2LjAuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dF9uYW1lKG91dGdvaW5nU3RydWN0dXJlLmdldCgpLAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEs
IDE1LCAwKQotICAgICAgICAgICAgICAgICFnX3N0cmNtcDAoa2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZCwgR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lEKSA/ICJhcHBsaWNhdGlv
bi94LXdlYm0tZW5jIiA6CisgICAgICAgICAgICAgICAgIWdfc3RyY21wMChrbGFzcy0+cHJvdGVj
dGlvblN5c3RlbUlkKHNlbGYpLCBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklFRF9TWVNURU1fSUQp
ID8gImFwcGxpY2F0aW9uL3gtd2VibS1lbmMiIDoKICNlbmRpZgogICAgICAgICAgICAgICAgICJh
cHBsaWNhdGlvbi94LWNlbmMiKTsKICAgICAgICAgfQpAQCAtMTc3LDYgKzE3NywxMiBAQCBzdGF0
aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2Us
IEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKIAorICAgIEdzdFByb3RlY3Rpb25NZXRhKiBw
cm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3Rf
YnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CisgICAgaWYgKCFwcm90ZWN0aW9u
TWV0YSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJCdWZmZXIgJXAgZG9lcyBu
b3QgY29udGFpbiBwcm90ZWN0aW9uIG1ldGEsIG5vdCBkZWNyeXB0aW5nIiwgYnVmZmVyKTsKKyAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKwogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CiAKICAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5l
ZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgpAQCAt
MTkxLDEyICsxOTcsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdz
dEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB9CiAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVz
cyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9Ci0KLSAgICBHc3RQcm90ZWN0aW9u
TWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRh
Kj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwotICAgIGlmICghcHJv
dGVjdGlvbk1ldGEpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgfQogICAgIGF1dG8gcmVt
b3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVj
dGlvbk1ldGFdIHsKICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oCmluZGV4IGJiMTE2NmQzODAzMy4uYTA0NjVmZjUzZDAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgewogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0Q2xhc3MgewogICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFz
czsKIAotICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAgICBjb25zdCBjaGFy
KiAoKnByb3RlY3Rpb25TeXN0ZW1JZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCopOwogICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5PiYpOwogICAgIGJv
b2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVm
ZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIs
IHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9y
R1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg3
NTQ0N2QxYjUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5jcHAK
QEAgLTAsMCArMSwxNzIgQEAKKy8qIEdTdHJlYW1lciBPcGVuQ0RNIGNvbW1vbiBlbmNyeXB0aW9u
IGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBTdWl0ZSA1MDAsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJl
YW1lci5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0p
ICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAi
Q0RNUHJveHlPcGVuQ0RNLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVk
ZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RN
X0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNE
TURlY3J5cHRQcml2YXRlKSkKK3N0cnVjdCBfV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZh
dGUgeworICAgIFJlZlB0cjxDRE1Qcm94eU9wZW5DRE0+IGNkbVByb3h5OworfTsKKworc3RhdGlj
IHZvaWQgZmluYWxpemUoR09iamVjdCopOworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25T
eXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0aWMgYm9v
bCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBj
b25zdCBSZWZQdHI8Q0RNUHJveHk+Jik7CitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlk
LCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50CisgICAgLCBHc3RC
dWZmZXIqIHN1YlNhbXBsZXMpOworCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0TWVkaWFPcGVu
Q0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKworc3RhdGljIGNvbnN0IGNoYXIqIGNl
bmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tdID0geyAidmlkZW8vbXA0IiwgImF1ZGlvL21wNCIsICJ2
aWRlby94LWgyNjQiLCAiYXVkaW8vbXBlZyIsIG51bGxwdHIgfTsKK3N0YXRpYyBjb25zdCBjaGFy
KiB3ZWJtRW5jcnlwdGlvbk1lZGlhVHlwZXNbXSA9IHsgInZpZGVvL3dlYm0iLCAiYXVkaW8vd2Vi
bSIsICJ2aWRlby94LXZwOSIsIG51bGxwdHIgfTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBs
YXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsCisgICAgR1NU
X1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTKAorICAg
ICAgICAidmlkZW8vd2VibTsgIgorICAgICAgICAiYXVkaW8vd2VibTsgIgorICAgICAgICAidmlk
ZW8vbXA0OyAiCisgICAgICAgICJhdWRpby9tcDQ7ICIKKyAgICAgICAgImF1ZGlvL21wZWc7ICIK
KyAgICAgICAgInZpZGVvL3gtaDI2NDsgIgorICAgICAgICAidmlkZW8veC12cDk7ICIpKTsKKwor
I2RlZmluZSB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X3BhcmVudF9jbGFzcyBwYXJlbnRf
Y2xhc3MKK0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCwgd2Via2l0X21l
ZGlhX29wZW5jZG1fZGVjcnlwdCwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBUKTsKKwor
c3RhdGljIEdSZWZQdHI8R3N0Q2Fwcz4gY3JlYXRlU2lua1BhZFRlbXBsYXRlQ2FwcygpCit7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgp
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYga2V5U3lzdGVtIDogQ0RNRmFjdG9yeU9wZW5DRE06
OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3RlbXMoKSkgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgY2VuY0VuY3J5cHRpb25NZWRpYVR5cGVzW2ldOyArK2kpIHsKKyAgICAgICAgICAgIGdz
dF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFw
cGxpY2F0aW9uL3gtY2VuYyIsICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORywg
Y2VuY0VuY3J5cHRpb25NZWRpYVR5cGVzW2ldCisgICAgICAgICAgICAgICAgLCAicHJvdGVjdGlv
bi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3Rl
bVRvVXVpZChrZXlTeXN0ZW0pLCBudWxscHRyKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdT
dHJlYW1lckVNRVV0aWxpdGllczo6aXNXaWRldmluZUtleVN5c3RlbShrZXlTeXN0ZW0pKSB7Cisg
ICAgICAgICAgICAvLyBObyBrZXkgc3lzdGVtIFVVSUQgZm9yIHdlYm0uIEl0J3Mgbm90IHNldCBp
biBjYXBzIGZvciBpdCBhbmQgaXQncyBqdXN0IFdpZGV2aW5lLgorICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShjYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJl
X25ldygiYXBwbGljYXRpb24veC13ZWJtLWVuYyIsICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19U
WVBFX1NUUklORworICAgICAgICAgICAgICAgICAgICAsIHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBl
c1tpXSwgbnVsbHB0cikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
R1NUX0RFQlVHKCJzaW5rIHBhZCB0ZW1wbGF0ZSBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBz
LmdldCgpKTsKKworICAgIHJldHVybiBjYXBzOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfb3BlbmNkbV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENs
YXNzKiBrbGFzcykKK3sKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYU9w
ZW5DRE1EZWNyeXB0RGVidWdDYXRlZ29yeSwgIndlYmtpdG9wZW5jZG0iLCAwLCAiT3BlbkNETSBk
ZWNyeXB0Iik7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gZmluYWxpemU7CisKKyAg
ICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNz
KTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGdzdFNpbmtQYWRUZW1wbGF0ZUNhcHMgPSBjcmVhdGVT
aW5rUGFkVGVtcGxhdGVDYXBzKCk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1w
bGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9wYWRfdGVtcGxhdGVfbmV3KCJzaW5rIiwgR1NUX1BBRF9T
SU5LLCBHU1RfUEFEX0FMV0FZUywgZ3N0U2lua1BhZFRlbXBsYXRlQ2Fwcy5nZXQoKSkpOworICAg
IGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3Rh
dGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVsZW1lbnRDbGFzcywgIkRlY3J5cHQgZW5jcnlwdGVk
IGNvbnRlbnQgdXNpbmcgT3BlbkNETSIsIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQ
VE9SCisgICAgICAgICwgIkRlY3J5cHRzIGVuY3J5cHRlZCBtZWRpYSB1c2luZyBPcGVuQ0RNLiIs
ICJYYWJpZXIgUm9kcsOtZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+Iik7CisKKyAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNvbW1vbkNsYXNzID0g
V0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CisgICAgY29tbW9uQ2xhc3Mt
PnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRSKHByb3RlY3Rpb25TeXN0ZW1J
ZCk7CisgICAgY29tbW9uQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BU
UihjZG1Qcm94eUF0dGFjaGVkKTsKKyAgICBjb21tb25DbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJV
R19GVU5DUFRSKGRlY3J5cHQpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNz
LCBzaXplb2YoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUpKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhT3BlbkNE
TURlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwor
ICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFPcGVuQ0RN
RGVjcnlwdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVE
SUFfT1BFTkNETV9ERUNSWVBUKG9iamVjdCk7CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlw
dFByaXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworICAgIHByaXYtPn5XZWJLaXRNZWRpYU9wZW5D
RE1EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNT
LCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlv
blN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7Cisg
ICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFf
T1BFTkNETV9ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQo
c2VsZikpOworICAgIEFTU0VSVChwcml2LT5jZG1Qcm94eSk7CisgICAgcmV0dXJuIEdTdHJlYW1l
ckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKHByaXYtPmNkbVByb3h5LT5rZXlTeXN0ZW0o
KSk7Cit9CisKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENETVByb3h5PiYgY2RtUHJveHkp
Cit7CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
TUVESUFfT1BFTkNETV9ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9PUEVOQ0RNX0RF
Q1JZUFQoc2VsZikpOworICAgIHByaXYtPmNkbVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Q
cm94eU9wZW5DRE0qPihjZG1Qcm94eS5nZXQoKSk7CisgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5
OworfQorCitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIs
IEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJzYW1wbGVDb3VudAorICAgICwgR3N0QnVm
ZmVyKiBzdWJzYW1wbGVzQnVmZmVyKQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShX
RUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsKKworICAgIGlmICghaXZCdWZmZXIg
fHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHN1YnNh
bXBsZUNvdW50ICYmICFzdWJzYW1wbGVzQnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgpIHN1YnNhbXBsZXMgcGFyYW1ldGVyIik7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNv
bnRleHQua2V5SURCdWZmZXIgPSBrZXlJREJ1ZmZlcjsKKyAgICBjb250ZXh0Lml2QnVmZmVyID0g
aXZCdWZmZXI7CisgICAgY29udGV4dC5kYXRhQnVmZmVyID0gYnVmZmVyOworICAgIGNvbnRleHQu
bnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1
ZmZlciA9IHN1YnNhbXBsZUNvdW50ID8gc3Vic2FtcGxlc0J1ZmZlciA6IG51bGxwdHI7CisKKyAg
ICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmRlY3J5cHQoY29udGV4dCk7Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9y
R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lODMw
YTcxN2NlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAt
MCwwICsxLDU0IEBACisvKiBHU3RyZWFtZXIgT3BlbkNETSBjb21tb24gZW5jcnlwdGlvbiBkZWNy
eXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYm
IFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFQgICAgICAgICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5
cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChvYmop
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
TUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0KSkKKyNkZWZp
bmUgV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQs
IFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19NRURJ
QV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCkpCisjZGVmaW5lIFdFQktJ
VF9JU19NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBUKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHQgICAgICAgIFdlYktpdE1lZGlh
T3BlbkNETURlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlw
dENsYXNzICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlIFdlYktpdE1lZGlhT3BlbkNETURlY3J5
cHRQcml2YXRlOworCitHVHlwZSB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2dldF90eXBl
KHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHQgeworICAgIFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgcGFyZW50OworCisgICAgV2ViS2l0TWVkaWFP
cGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhT3Bl
bkNETURlY3J5cHRDbGFzcyB7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dENsYXNzIHBhcmVudENsYXNzOworfTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIEVOQUJM
RShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKaW5kZXggZjJkZGUxMjQxODc5Li40YzFjZTFmMDUwNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dApAQCAtMjgyLDYgKzI4MiwxMiBAQCBzZXQoUGx1Z2luUHJvY2Vzc19MSUJSQVJJ
RVMKICAgICBXZWJLaXQKICkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJM
RV9PUEVOQ0RNKQorICBsaXN0KEFQUEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICkKK2VuZGlmICgpCisKIGlmIChF
TkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKICAgICAjIEZvciBwbGF0Zm9ybXMgdGhhdCB3YW50
IHRvIHVzZSBzeXN0ZW0tcHJvdmlkZWQgT3BlbkdMIChFUykgLyBFR0wgaGVhZGVycywKICAgICAj
IHRoZXNlIGluY2x1ZGUgZGlyZWN0b3JpZXMsIGxpYnJhcmllcyBvciBkZWZpbml0aW9ucyBuZWVk
IHRvIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDlmZTEzYTE2NzUyNi4uYWFjM2JkNGE4M2IxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA2LTI0ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNh
bHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJ
bXBsZW1lbnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgYWNjZXNzIHRvIHRoZSBPcGVu
Q0RNIGhlYWRlcnMuCisKIDIwMjAtMDYtMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBPcHRpb25zR1RLLmNt
YWtlIGFuZCBORVdTIGZvciAyLjI5LjIgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L0ZpbmRPcGVuQ0RNLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVlZDM4M2NjOTlmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCkBAIC0wLDAgKzEsNjkg
QEAKKyMucnN0CisjIEZpbmRPcGVuQ0RNCisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgRmluZHMgdGhl
IE9wZW5DRE0gbGlicmFyeS4KKyMKKyMgVGhpcyB3aWxsIGRlZmluZSB0aGUgZm9sbG93aW5nIHZh
cmlhYmxlczoKKyMKKyMgYGBPUEVOQ0RNX0ZPVU5EYGAKKyMgICAgIFRydWUgaWYgdGhlIHJlcXVl
c3RlZCB2ZXJzaW9uIG9mIGdjcnlwdCB3YXMgZm91bmQKKyMgYGBPUEVOQ0RNX1ZFUlNJT05gYAor
IyAgICAgVGhlIHZlcnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9J
TkNMVURFX0RJUlNgYAorIyAgICAgVGhlIGdjcnlwdCBpbmNsdWRlIGRpcmVjdG9yaWVzCisjIGBg
T1BFTkNETV9MSUJSQVJJRVNgYAorIyAgICAgVGhlIGxpbmtlciBsaWJyYXJpZXMgbmVlZGVkIHRv
IHVzZSB0aGUgZ2NyeXB0IGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9y
IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBg
YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisjIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4KKyMgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULAorIyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyMgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworZmluZF9saWJyYXJ5KE9QRU5DRE1fTElCUkFSWQorICBOQU1FUyBsaWJvY2RtLnNv
CispCitmaW5kX3BhdGgoT1BFTkNETV9JTkNMVURFX0RJUgorICBOQU1FUyBvcGVuX2NkbS5oCisg
IFBBVEhfU1VGRklYRVMgIldQRUZyYW1ld29yay9vY2RtLyIKKykKKworaW5jbHVkZShGaW5kUGFj
a2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKworZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9h
cmdzKE9wZW5jZG0KKyAgICBGT1VORF9WQVIgT1BFTkNETV9GT1VORAorICAgIFJFUVVJUkVEX1ZB
UlMgT1BFTkNETV9MSUJSQVJZIE9QRU5DRE1fSU5DTFVERV9ESVIKKykKK2lmIChPUEVOQ0RNX0ZP
VU5EKQorICAgIHNldChPUEVOQ0RNX0xJQlJBUklFUyAke09QRU5DRE1fTElCUkFSWX0pCisgICAg
c2V0KE9QRU5DRE1fSU5DTFVERV9ESVJTICR7T1BFTkNETV9JTkNMVURFX0RJUn0pCitlbmRpZiAo
KQorCittYXJrX2FzX2FkdmFuY2VkKE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElS
KQorCitpbmNsdWRlKEZlYXR1cmVTdW1tYXJ5KQorc2V0X3BhY2thZ2VfcHJvcGVydGllcyhPcGVu
Y2RtIFBST1BFUlRJRVMKKyAgICBERVNDUklQVElPTiAiT3BlbkNETSBEUk0gZnJhbWV3b3JrIgor
ICAgIFVSTCAiaHR0cHM6Ly9naXRodWIuY29tL3Jka2NlbnRyYWwvVGh1bmRlciIKKykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UKaW5kZXggODExMGUzN2MwNDczLi42ODkxOTQ1NjE0M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlCkBAIC0xODcsNiArMTg3LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSBQUklWQVRFIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVW
QUxJREFUSU9OIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShF
TkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyBQ
UklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCitXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1BFTkNETSBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQUklW
QVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BPSU5URVJf
TE9DSyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1JFU09VUkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQpAQCAtNDI3LDYgKzQyOCwxMCBA
QCBpZiAoVVNFX1NZU1RFTUQpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVf
RU5DUllQVEVEX01FRElBIEFORCBFTkFCTEVfT1BFTkNETSkKKyAgZmluZF9wYWNrYWdlKE9wZW5D
RE0gUkVRVUlSRUQpCitlbmRpZiAoKQorCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODIyNDcKIGlmIChFTkFCTEVEX0NPTVBJTEVSX1NBTklUSVpFUlMpCiAgICAg
c2V0KEVOQUJMRV9JTlRST1NQRUNUSU9OIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9P
cHRpb25zV1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggMWUz
MmYxNmU5ZDJjLi4wZWU0YzU5OTc4MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC00NSw2ICs0
NSw3IEBAIGluY2x1ZGUoR1N0cmVhbWVyRGVmaW5pdGlvbnMpCiBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIFBVQkxJQyBPRkYpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRVNTSUJJTElUWSBQVUJM
SUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVE
X01FRElBIFBVQkxJQyAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBVQkxJQyBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBVQkxJ
QyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBVQkxJ
QyBPTikKQEAgLTE5OCw2ICsxOTksMTAgQEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgp
CiBlbmRpZiAoKQogCitpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5D
RE0pCisgIGZpbmRfcGFja2FnZShPcGVuQ0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogYWRkX2Rl
ZmluaXRpb25zKC1EQlVJTERJTkdfV1BFX189MSkKIGFkZF9kZWZpbml0aW9ucygtREdFVFRFWFRf
UEFDS0FHRT0iV1BFIikKIGFkZF9kZWZpbml0aW9ucygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2Nt
YWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IGUyYWEzOTY2Mjc1Ny4uMWJjOTc5ZTczMTM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xODIsNiArMTgyLDcgQEAgbWFjcm8o
V0VCS0lUX09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTkVU
V09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFICJUb29nbGUgbmV0d29yayBjYWNoZSBz
dGFsZS13aGlsZS1yZXZhbGlkYXRlIGNhY2hpbmcgc3RyYXRlZ3kiIFBSSVZBVEUgT0ZGKQogICAg
IFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9OT1RJRklDQVRJT05TICJUb2dnbGUgTm90aWZp
Y2F0aW9ucyBzdXBwb3J0IiBQUklWQVRFIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9PRkZTQ1JFRU5fQ0FOVkFTICJUb2dnbGUgT2Zmc2NyZWVuQ2FudmFzIHN1cHBvcnQiIFBS
SVZBVEUgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9PUEVOQ0RNICJUb2dn
bGUgRU1FIFYzIE9wZW5DRE0gc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyAiVG9nZ2xlIE9yaWVudGF0aW9uIEV2
ZW50cyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFC
TEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIICJUb2dnbGUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5n
IHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9Q
QVlNRU5UX1JFUVVFU1QgIlRvZ2dsZSBQYXltZW50IFJlcXVlc3Qgc3VwcG9ydCIgUFJJVkFURSBP
RkYpCkBAIC0yNTUsNiArMjU2LDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBX
RUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIEVOQUJMRV9W
SURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU09VUkNFIEVOQUJM
RV9WSURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU1RSRUFNIEVO
QUJMRV9WSURFTykKKyAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfT1BFTkNETSBFTkFC
TEVfRU5DUllQVEVEX01FRElBKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9WSURF
T19QUkVTRU5UQVRJT05fTU9ERSBFTkFCTEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBF
TkQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIEVOQUJMRV9WSURFTykKICAg
ICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVE9VQ0hfU0xJREVSIEVOQUJMRV9UT1VDSF9F
VkVOVFMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggYWIwYTk4ZDdkMDZhLi41NTFjMDZkNjg3MDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAyMC0wNi0yNCAgWGFi
aWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
U3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3VwcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTUwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCB0
byBidWlsZCBPcGVuQ0RNIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGVyZSBpcyBhbgorICAgICAg
ICBvcHQgaW4gZW52IHZhciB0byBnZXQgSkhCdWlsZCBidWlsZGluZyBUaHVuZGVyIGl0cyBXaWRl
dmluZQorICAgICAgICBkZXBlbmRlbmNpZXMuIFdlIGFsc28gaW5jbHVkZSBhIGNvdXBsZSBvZiBH
U3RyZWFtZXIgcGF0Y2hlcyBuZWVkZWQKKyAgICAgICAgdG8gZ2V0IGtleSBJRHMgaW4gdGhlIGRl
Y3J5cHRvcnMuCisKKyAgICAgICAgV2lkZXZpbmUgaXMgb2J2aW91c2x5IHByb3ByaWV0YXJ5IGFu
ZCBhcyB5b3UgbmVlZCB0byBiZSBsaWNlbnNlZAorICAgICAgICB0byBhY2Nlc3MgaXQsIHlvdSBu
ZWVkIGNyZWRlbnRpYWxzIHRvIGJ1aWxkIGl0LgorCisgICAgICAgIFdlIGFsc28gYWRkIHRlc3Rz
IGZvciBCb3hQdHIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Cb3hQdHIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkJveFB0ckxvZ2dlcjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkJveFB0ckxvZ2dlcjo6Qm94UHRyTG9nZ2VyKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmJveFB0ckxvZ2dlckRlbGV0ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisgICAgICAgICogZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBnc3Ry
ZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0
aW9uLWRhdGEucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1w
bHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEt
ZGVmYXVsdC1raWQucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGd0ay9pbnN0YWxsLWRlcGVuZGVu
Y2llczoKKyAgICAgICAgKiB3cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXM6CisgICAgICAgICogamhi
dWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5OgorICAgICAgICAoaW5pdCk6CisKKzIwMjAtMDUtMjYg
IFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbV1RGXSBJbXBsZW1lbnQgbmV3IEJveFB0ciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0JveFB0ci5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyOjpjcmVhdGUpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyOjpCb3hQdHJMb2dnZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Ym94UHRyTG9nZ2VyRGVsZXRlcik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNi0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBBZGQgQVBJIHRvIGFsbG93
IGFwcGxpY2F0aW9ucyB0byBoYW5kbGUgdGhlIEhUVFAgYXV0aGVudGljYXRpb24gY3JlZGVudGlh
bCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggYzBj
ZjA5ODczNzdkLi44ZWFhOTBjYWU0MmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KQEAgLTEzNSw2ICsxMzUsNyBAQCBteSAoCiAgICAgJG5ldHdvcmtDYWNoZVN0YWxl
V2hpbGVSZXZhbGlkYXRlU3VwcG9ydCwKICAgICAkbm90aWZpY2F0aW9uc1N1cHBvcnQsCiAgICAg
JG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQsCisgICAgJG9wZW5DRE1TdXBwb3J0LAogICAgICRvcmll
bnRhdGlvbkV2ZW50c1N1cHBvcnQsCiAgICAgJG92ZXJmbG93U2Nyb2xsaW5nVG91Y2hTdXBwb3J0
LAogICAgICRwYXltZW50UmVxdWVzdFN1cHBvcnQsCkBAIC00NDgsNiArNDQ5LDkgQEAgbXkgQGZl
YXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJvZmZzY3JlZW4tY2FudmFzIiwgZGVzYyA9PiAi
VG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X09GRlNDUkVFTl9DQU5WQVMiLCB2YWx1ZSA9PiBcJG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQgfSwK
IAorICAgIHsgb3B0aW9uID0+ICJvcGVuY2RtIiwgZGVzYyA9PiAiVG9nZ2xlIE9wZW5DRE0gc3Vw
cG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUEVOQ0RNIiwgdmFsdWUgPT4gXCRvcGVu
Q0RNU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gIm9yaWVudGF0aW9uLWV2ZW50cyIsIGRl
c2MgPT4gIlRvZ2dsZSBPcmllbnRhdGlvbiBFdmVudHMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9PiBcJG9yaWVudGF0aW9uRXZl
bnRzU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAzNjAyYjBi
YzU2YTkuLmYzMWQzMWE3OWNiMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC0y
OCw2ICsyOCw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBUZXN0cy9XVEYvQXRvbVN0cmlu
Zy5jcHAKICAgICBUZXN0cy9XVEYvQml0bWFwLmNwcAogICAgIFRlc3RzL1dURi9CbG9vbUZpbHRl
ci5jcHAKKyAgICBUZXN0cy9XVEYvQm94UHRyLmNwcAogICAgIFRlc3RzL1dURi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5jcHAKICAgICBUZXN0cy9XVEYvQ1N0cmluZy5jcHAKICAgICBUZXN0cy9XVEYv
Q2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAyODlhMDcwNTRiOWUuLmIyYWUwMjk3NjE3MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTU1OCw2ICs1NTgsNyBAQAogCQk3QzgzREYxNDFEMEE1OTBDMDBGRUJDRjMgLyogUmVmLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQTQyN0FBMTgw
REEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovOyB9OwogCQk3QzgzREYxNTFEMEE1OTBDMDBGRUJD
RjMgLyogUmVmQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkJEMTk5NzFBMkRCMDVCMDA2RENGMEEgLyogUmVmQ291bnRlci5jcHAgKi87
IH07CiAJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWZQdHIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBNDI3QTgxODBEOUIwNzAwQ0Qy
NEQ3IC8qIFJlZlB0ci5jcHAgKi87IH07CisJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAvKiBC
b3hQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBNDI3QUUxODBEQTYwRjAwQ0QyNEQ3IC8qIEJveFB0ci5jcHAgKi87IH07CiAJCTdDODNERjFE
MUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAq
LzsgfTsKIAkJN0M4M0RGMjQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJldGFpblB0ci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDI5QjFCMTQ4NkIyNTkw
MDgxN0RBOSAvKiBSZXRhaW5QdHIubW0gKi87IH07CiAJCTdDODNERjI2MUQwQTU5MEMwMEZFQkNG
MyAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyog
U2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovOyB9OwpAQCAtMjMzMCw2ICsyMzMx
LDcgQEAKIAkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJlZi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0E0MjdBQzE4MERBNjBGMDBDRDI0RDcgLyogTW92ZU9ubHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTW92ZU9ubHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBNDI3QUQx
ODBEQTYwRjAwQ0QyNEQ3IC8qIFJlZkxvZ2dlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZMb2dnZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNDI3QUUxODBEQTYwRjAwQ0QyNEQ3
IC8qIEJveFB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3hQ
dHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E3MjBFNTE4RjFBMEU4MDBB
ODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTNBQkE4MDgxNkREQUI5MTAwMkRCMkZBIC8qIFN0cmluZ0hhc2hlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdIYXNoZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDQTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDA0LDYgKzQwMDYsNyBAQAog
CQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9tU3RyaW5nLmNwcCAqLywKIAkJCQlG
RTJEOTQ3MzI0NUVCMkRGMDBFNDgxMzUgLyogQml0bWFwLmNwcCAqLywKIAkJCQlFNDAwMTkzMDFB
Q0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAorCQkJCTkzQTQyN0FFMTgwREE2
MEYwMENEMjRENyAvKiBCb3hQdHIuY3BwICovLAogCQkJCTA0NTFBNUE2MjM1RTQzOEUwMDlERjk0
NSAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdBOTY2REExNDBFQ0NDODAw
NUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJRTMwMkJE
QTkyNDA0QjkyMzAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgKi8sCkBAIC00NzIx
LDYgKzQ3MjQsNyBAQAogCQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEQUQxNTAxRDc3QTlGNjAwMjEyNTg2IC8qIEJsb2NrUHRy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFOUMxRDBBNTkwQzAwRkVCQ0YzIC8qIEJsb29t
RmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAv
KiBCb3hQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDREQjIzOTYyMzVFNDNFQzAwMzI4RjE3
IC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUEw
MUQwQTU5MEMwMEZFQkNGMyAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0QjkyNDAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJU
dXBsZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0JveFB0ci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Cb3hQ
dHIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYmY0ODIwYzk0
ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQm94
UHRyLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkxvZ2dlci5oIgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4K
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdHJ1Y3QgQm94UHRyTG9nZ2VyIHsKKyAg
ICBCb3hQdHJMb2dnZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAgc3RhdGljIEJveFB0ckxvZ2dl
ciogY3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpIHsgcmV0dXJuIG5ldyBCb3hQdHJMb2dnZXIobmFt
ZSk7IH0KKyAgICBjb25zdCBjaGFyJiBuYW1lOworfTsKKworQm94UHRyTG9nZ2VyOjpCb3hQdHJM
b2dnZXIoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG5hbWUgeyAqbmFtZSB9Cit7CisgICAgbG9n
KCkgPDwgImNyZWF0ZSgiIDw8IG5hbWUgPDwgIikgIjsKK30KKwordm9pZCBib3hQdHJMb2dnZXJE
ZWxldGVyKEJveFB0ckxvZ2dlciogbG9nZ2VyKQoreworICAgIGxvZygpIDw8ICJkZWxldGUoIiA8
PCAmbG9nZ2VyLT5uYW1lIDw8ICIpICI7CisgICAgZGVsZXRlIGxvZ2dlcjsKK30KKworfTsKKwor
bmFtZXNwYWNlIFdURiB7CisKK1dURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIoVGVzdFdlYktpdEFQ
STo6Qm94UHRyTG9nZ2VyLCBUZXN0V2ViS2l0QVBJOjpib3hQdHJMb2dnZXJEZWxldGVyKTsKKwor
fQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV1RGX0JveFB0ciwgQmFzaWMp
Cit7CisgICAgeworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBlbXB0eTsKKyAgICAgICAg
RVhQRUNUX0VRKGZhbHNlLCBzdGF0aWNfY2FzdDxib29sPihlbXB0eSkpOworICAgIH0KKyAgICBF
WFBFQ1RfU1RSRVEoIiIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
Qm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94
UHRyPEJveFB0ckxvZ2dlcj4gcHRyID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBFWFBFQ1Rf
RVEodHJ1ZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocHRyKSk7CisgICAgICAgIEVYUEVDVF9FUShhLCBw
dHItPmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEtPm5hbWUsICgqcHRyKS0+bmFtZSk7Cisg
ICAgfQorICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3Ry
KCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxv
Z2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAxID0gY3Jl
YXRlQm94UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMihwMSk7CisgICAg
ICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYSwgcDItPmdl
dCgpKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgZGVsZXRlKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0g
Qm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4g
cDEgPSBjcmVhdGVCb3hQdHIoYSk7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAyID0g
cDE7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEo
YSwgcDItPmdldCgpKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgZGVsZXRl
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9n
Z2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0
ckxvZ2dlcj4gcDEgPSBjcmVhdGVCb3hQdHIoYSk7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dn
ZXI+IHAyID0gV1RGTW92ZShwMSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nh
c3Q8Ym9vbD4ocDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHAyLT5nZXQoKSk7CisgICAgfQor
ICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6
Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAxID0gY3JlYXRlQm94
UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMihXVEZNb3ZlKHAxKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpKTsKKyAgICAgICAg
RVhQRUNUX0VRKGEsIHAyLT5nZXQoKSk7CisgICAgfQorICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRl
KGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAg
IEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJv
eFB0cjxCb3hQdHJMb2dnZXI+IHB0ciA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgRVhQRUNU
X0VRKGEsIHB0ci0+Z2V0KCkpOworICAgICAgICBwdHIgPSBudWxscHRyOworICAgICAgICBFWFBF
Q1RfRVEoZmFsc2UsIHN0YXRpY19jYXN0PGJvb2w+KHB0cikpOworICAgIH0KKyAgICBFWFBFQ1Rf
U1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQor
CitURVNUKFdURl9Cb3hQdHIsIEFzc2lnbm1lbnQpCit7CisgICAgeworICAgICAgICBCb3hQdHJM
b2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQdHJMb2dn
ZXIqIGIgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYiIpOworICAgICAgICBCb3hQdHI8Qm94UHRy
TG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dl
cj4gcDIgPSBjcmVhdGVCb3hQdHIoYik7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkp
OworICAgICAgICBFWFBFQ1RfRVEoYiwgcDItPmdldCgpKTsKKyAgICAgICAgbG9nKCkgPDwgInwg
IjsKKyAgICAgICAgcDEgPSBwMjsKKyAgICAgICAgRVhQRUNUX0VRKGIsIHAxLT5nZXQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShiLCBwMi0+Z2V0KCkpOworICAgICAgICBsb2coKSA8PCAifCAiOwor
ICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBjcmVhdGUoYikgfCBkZWxldGUoYSkg
fCBkZWxldGUoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBC
b3hQdHJMb2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQ
dHJMb2dnZXIqIGIgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYiIpOworICAgICAgICBCb3hQdHI8
Qm94UHRyTG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0
ckxvZ2dlcj4gcDIgPSBjcmVhdGVCb3hQdHIoYik7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+
Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYiwgcDItPmdldCgpKTsKKyAgICAgICAgbG9nKCkg
PDwgInwgIjsKKyAgICAgICAgcDEgPSBXVEZNb3ZlKHAyKTsKKyAgICAgICAgRVhQRUNUX0VRKGIs
IHAxLT5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4o
cDIpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJj
cmVhdGUoYSkgY3JlYXRlKGIpIHwgZGVsZXRlKGEpIHwgZGVsZXRlKGIpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9n
Z2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcHRyID0gY3Jl
YXRlQm94UHRyKGEpOworICAgICAgICBFWFBFQ1RfRVEoYSwgcHRyLT5nZXQoKSk7CisgICAgICAg
IGxvZygpIDw8ICJ8ICI7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1w
cmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi13YXJu
aW5nLW9wdGlvbiIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NlbGYtYXNz
aWduLW92ZXJsb2FkZWQiCisjZW5kaWYKKyAgICAgICAgcHRyID0gcHRyOworI2lmIENPTVBJTEVS
KENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisgICAgICAgIEVY
UEVDVF9FUShhLCBwdHItPmdldCgpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICB9Cisg
ICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgfCB8IGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dl
cjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHB0ciA9IGNyZWF0
ZUJveFB0cihhKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0KCkpOworI2lmIENPTVBJ
TEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3NlbGYtbW92ZSIKKyNlbmRpZgorICAgICAgICBwdHIgPSBXVEZN
b3ZlKHB0cik7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCisjZW5kaWYKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0KCkpOworICAgIH0KKyAg
ICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitURVNUKFdURl9Cb3hQdHIsIE9wZXJhdG9ycykKK3sKKyAgICB7CisgICAgICAg
IEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJv
eFB0ckxvZ2dlciogYiA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJiIik7CisgICAgICAgIEJveFB0
cjxCb3hQdHJMb2dnZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94
UHRyTG9nZ2VyPiBwMiA9IGNyZWF0ZUJveFB0cihiKTsKKyAgICAgICAgRVhQRUNUX0VRKCpwMSwg
KnAxKTsKKyAgICAgICAgRVhQRUNUX05FKCpwMSwgKnAyKTsKKyAgICB9CisgICAgRVhQRUNUX1NU
UkVRKCJjcmVhdGUoYSkgY3JlYXRlKGIpIGRlbGV0ZShiKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBCb3hQdHJMb2dnZXIqIGEgPSBCb3hQdHJM
b2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMSA9IGNy
ZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDIocDEpOworICAg
ICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpLCB0cnVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKCFwMSwgZmFsc2UpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBk
ZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBCb3hQ
dHI8Qm94UHRyTG9nZ2VyPiBlbXB0eTsKKyAgICAgICAgRVhQRUNUX0VRKCFlbXB0eSwgdHJ1ZSk7
CisgICAgICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxib29sPihlbXB0eSksIGZhbHNlKTsKKyAg
ICB9CisgICAgRVhQRUNUX1NUUkVRKCIiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK307
CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0
cmVhbWVyL2poYnVpbGQubW9kdWxlcwppbmRleCA5NTZmMTI2ZDViNzUuLjBjMWE4OTRiNWM4MiAx
MDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9n
c3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCkBAIC0xMSw2ICsxMSwxMiBAQAogICAgICAgPGRlcCBw
YWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2
Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdHJlYW1lci12YWFwaSIvPgorICAgICAgPGlmIGNv
bmRpdGlvbi1zZXQ9Ik9wZW5DRE0iPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4K
KyAgICAgICAgPGRlcCBwYWNrYWdlPSJ3aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9
InRodW5kZXItY2RtaS13aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIt
bmFub3NlcnZpY2VzIi8+CisgICAgICA8L2lmPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21l
dGFtb2R1bGU+CiAKQEAgLTE5LDYgKzI1LDggQEAKICAgICAgIGhyZWY9Imh0dHA6Ly9nc3RyZWFt
ZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIg
bmFtZT0iZ2l0aHViLXRhcmJhbGwiCiAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vIi8+
CisgIDxyZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0aHViLXNzaCIKKyAgICAgIGhyZWY9
ImdpdEBnaXRodWIuY29tOiIvPgogICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20iCiAgICAgICBocmVmPSJodHRwczovL2Nocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vd2VibS8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJhb21l
ZGlhLmdvb2dsZXNvdXJjZS5jb20iCkBAIC03OSw2ICs4Nyw3IEBACiAKICAgICA8YnJhbmNoIGhh
c2g9InNoYTI1Njo0MGJiM2JhZmRhMjVjMGI3MzljOGZjMzZlNDgzODBmY2NmNjFjNGQzZjgzNzQ3
ZTk3YWMzZjliMDE3MWIxMzE5IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMt
Z29vZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIi
PgogICAgICAgPHBhdGNoIGZpbGU9Imdvb2QtMDAwMS1xdGRlbXV4LVNwZWNpZnktUkVESVJFQ1Qt
aW5mb3JtYXRpb24taW4tZXJyb3ItbWVzc2FnLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdl
ZCB1cHN0cmVhbSwgc2hvdWxkIGJlIHNoaXBwZWQgaW4gMS4xNi4zIC0tPgorICAgICAgPHBhdGNo
IGZpbGU9ImdzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVy
LXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNo
PgogICA8L21lc29uPgogCkBAIC05Miw2ICsxMDEsNyBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgog
ICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2OmYxY2I3YWEyMzg5NTY5YTUzNDM2NjFhYWU0NzNmMGE5
NDBhOTBiODcyMDAxODI0YmM0N2ZhODA3MmEwNDFlNzQiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFk
L2dzdC1wbHVnaW5zLWJhZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJz
aW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgy
NjRwYXJzZS1Qb3N0LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0i
MSIvPiA8IS0tIE1lcmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5m
cmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8z
ODYtLT4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1w
YXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgog
ICA8L21lc29uPgogCkBAIC0xMjUsNCArMTM1LDg5IEBACiAgICAgICAgICAgIGNoZWNrb3V0ZGly
PSJsaWJ2YS0ke3ZlcnNpb259IiByZXBvPSJnaXRodWItdGFyYmFsbCIvPgogICA8L21lc29uPgog
CisgIDxjbWFrZSBpZD0idGh1bmRlciIKKyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZF
UkVOQ0U9JHt2ZXJzaW9ufSAtRFBPUlQ9ODA4MQorICAgICAgICAgICAgICAgICAgICAtREJJTkRJ
Tkc9MC4wLjAuMCAtRElETEVfVElNRT0xODAKKyAgICAgICAgICAgICAgICAgICAgLURQRVJTSVNU
RU5UX1BBVEg9L3RtcC90aHVuZGVyL3BlcnNpc3RlbnQKKyAgICAgICAgICAgICAgICAgICAgLURW
T0xBVElMRV9QQVRIPS90bXAvdGh1bmRlci92b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAt
RERBVEFfUEFUSD0ke3ByZWZpeH0vc2hhcmUvV1BFRnJhbWV3b3JrCisgICAgICAgICAgICAgICAg
ICAgIC1EU1lTVEVNX1BBVEg9JHtwcmVmaXh9L2xpYi93cGVmcmFtZXdvcmsvcGx1Z2lucworICAg
ICAgICAgICAgICAgICAgICAtRFBST1hZU1RVQl9QQVRIPSR7cHJlZml4fS9saWIvd3BlZnJhbWV3
b3JrL3Byb3h5c3R1YnMKKyAgICAgICAgICAgICAgICAgICAgLURPT01BREpVU1Q9IC1EQlVJTERf
VFlQRT1SZWxlYXNlU3ltYm9scworICAgICAgICAgICAgICAgICAgICAtREJMVUVUT09USF9TVVBQ
T1JUPU9GRiAtRFZJUlRVQUxJTlBVVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURDT01QT1NJ
VE9SQ0xJRU5UPU9GRiAtRENPTVBPU0lUT1JDTElFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EQlJPQURDQVNUPU9GRiAtRENETUk9T04gLURDRE1JX0JDTV9ORVhVU19TVlA9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EQ0RNSV9BREFQVEVSX0lNUExFTUVOVEFUSU9OPWdzdHJlYW1lcgor
ICAgICAgICAgICAgICAgICAgICAtREdTVFJFQU1FUkNMSUVOVD1PRkYgLURQUk9WSVNJT05QUk9Y
WT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURTRUNVUklUWUFHRU5UPU9GRiAtRENPTVBPU0lU
T1JTRVJWRVJQTFVHSU49T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1dFQktJVEJS
T1dTRVI9T0ZGIC1EUExVR0lOX1dFQlNFUlZFUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fRVNQSUFMPU9GRiAtRE5FVFdPUktDT05UUk9MPU9GRiI+CisgICAgPGJyYW5jaCByZXBv
PSJnaXRodWItdGFyYmFsbCIgbW9kdWxlPSJyZGtjZW50cmFsL1RodW5kZXIvdGFyYmFsbC8ke3Zl
cnNpb259IiB2ZXJzaW9uPSI2YWRlZWUwMDZmZWNkZDFiMmJjNDliZDM2MGQ0OWZjNTcxOGRlYjYx
IiBjaGVja291dGRpcj0idGh1bmRlciIvPgorICA8L2NtYWtlPgorCisgIDxhdXRvdG9vbHMgaWQ9
IndpZGV2aW5lIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iCisgICAgICAgICAgICAg
YXV0b2dlbi1zaD0iYnVpbGQucHkiIGF1dG9nZW5hcmdzPSJ4ODYtNjQgLXIgLURPRU1DUllQVE9f
S0VZQk9YX1BBVEhfUFJFRklYPSR7cHJlZml4fSIKKyAgICAgICAgICAgICBtYWtlYXJncz0iQlVJ
TERUWVBFPVJlbGVhc2UgLWoxIgorICAgICAgICAgICAgIG1ha2VpbnN0YWxsYXJncz0iQlVJTERU
WVBFPVJlbGVhc2UgLWoxIC1mIE1ha2VmaWxlLmluc3RhbGwiID4KKyAgICA8ZGVwZW5kZW5jaWVz
PgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+Cisg
ICAgPGJyYW5jaCByZXBvPSJnaXRodWItc3NoIiBtb2R1bGU9Ik1ldHJvbG9naWNhbC93aWRldmlu
ZS5naXQiIGNoZWNrb3V0ZGlyPSJ3aWRldmluZSIgdGFnPSIyNjRjMTM3NTAxYjI4OWUzNTZiMTFk
YWNjMzI5YjA1NjM2ZWE5Mzk2Ii8+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxjbWFrZSBpZD0idGh1
bmRlci1jZG1pLXdpZGV2aW5lIiBjbWFrZWFyZ3M9Ii1EQ01BS0VfQlVJTERfVFlQRT1SZWxXaXRo
RGViSW5mbyI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIKKyAgICAgICAgICAg
IG1vZHVsZT0iV2ViUGxhdGZvcm1Gb3JFbWJlZGRlZC9PQ0RNLVdpZGV2aW5lL3RhcmJhbGwvJHt2
ZXJzaW9ufSIKKyAgICAgICAgICAgIHZlcnNpb249IjlkYzM5NjRiMDMzOWFiYjcwZDY2ZTRmOTMx
NjMyMzI0YTA3NWQ2ZDQiIGNoZWNrb3V0ZGlyPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAg
ICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICA8
ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIDwvY21ha2U+
CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIKKyAgICAgICAgIGNtYWtlYXJn
cz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtREJVSUxEX1RZUEU9UmVsZWFzZVN5bWJv
bHMKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQ09CQUxUPU9GRiAtRFBMVUdJTl9DT01N
QU5ERVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0RFVklDRUlORk89T0ZGIC1E
UExVR0lOX0RJU1BMQVlJTkZPPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ERVZJ
Q0VJREVOVElGSUNBVElPTj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRFNSRVNP
TFVUSU9OPU9GRiAtRFBMVUdJTl9ESENQU0VSVkVSPU9GRgorICAgICAgICAgICAgICAgICAgICAt
RFBMVUdJTl9ESUFMU0VSVkVSPU9GRiAtRFBMVUdJTl9ESUNUSU9OQVJZPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRFBMVUdJTl9JT0NPTk5FQ1RPUj1PRkYgLURQTFVHSU5fRUdMVEVTVD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRlJPTlRQQU5FTD1PRkYgLURQTFVHSU5fTE9D
QVRJT05TWU5DPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9NT05JVE9SPU9GRiAt
RFBMVUdJTl9ORVRXT1JLQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5f
T1BFTkNETUk9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQVVUT1NU
QVJUPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfT09QPXRydWUK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfV0lERVZJTkU9T04KKyAgICAg
ICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQ0xFQVJLRVk9T0ZGCisgICAgICAgICAg
ICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX1BMQVlSRUFEWT1PRkYKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fT1BFTkNETUlfTkFHUkE9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1E
UExVR0lOX09QRU5DRE1JX05DQVM9T0ZGIC1EUExVR0lOX0JMVUVUT09USD1PRkYKKyAgICAgICAg
ICAgICAgICAgICAgLURQTFVHSU5fQkxVRVRPT1RIUkVNT1RFQ09OVFJPTD1PRkYKKyAgICAgICAg
ICAgICAgICAgICAgLURQTFVHSU5fUkVNT1RFQ09OVFJPTD1PRkYgLURQTFVHSU5fU05BUFNIT1Q9
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1NZU1RFTUNPTU1BTkRTPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9GSUxFVFJBTlNGRVI9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX1RFU1RDT05UUk9MTEVSPU9GRiAtRFBMVUdJTl9KU09OUlBDPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9URVNUVVRJTElUWT1PRkYgLURQTFVHSU5fVElN
RVNZTkM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RSQUNFQ09OVFJPTD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fVk9MVU1FQ09OVFJPTD1PRkYKKyAgICAgICAg
ICAgICAgICAgICAgLURQTFVHSU5fV0VCS0lUQlJPV1NFUj1PRkYgLURQTFVHSU5fUlRTUENMSUVO
VD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VCUEE9T0ZGIC1EUExVR0lOX1dF
QlBST1hZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XRUJTRVJWRVI9T0ZGIC1E
UExVR0lOX1dFQlNIRUxMPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XSUZJQ09O
VFJPTD1PRkYgLURQTFVHSU5fUEFDS0FHRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX1BMQVlFUklORk89T0ZGIC1EUExVR0lOX1BPV0VSPU9GRgorICAgICAgICAgICAgICAgICAg
ICAtRFBMVUdJTl9QUk9DRVNTTU9OSVRPUj1PRkYgLURQTFVHSU5fU1RSRUFNRVI9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX1NQQVJLPU9GRiAtRFBMQVRGT1JNX0xJTlVYPU9OCisg
ICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX01FU1NFTkdFUj1PRkYgLURQTFVHSU5fU0VDVVJJ
VFlBR0VOVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUlBDTElOSz1PRkYgLURQ
TFVHSU5fQ09NUE9TSVRPUj1PRkYiPgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRhcmJhbGwi
CisgICAgICAgICAgICBtb2R1bGU9InJka2NlbnRyYWwvVGh1bmRlck5hbm9TZXJ2aWNlcy90YXJi
YWxsLyR7dmVyc2lvbn0iCisgICAgICAgICAgICB2ZXJzaW9uPSJkZTlmM2Q0MGQ4NDA4ZWU4MTFj
NDhmNDg2YzliMTRmNzUyYzk3MzQ1IgorICAgICAgICAgICAgY2hlY2tvdXRkaXI9InRodW5kZXIt
bmFub3NlcnZpY2VzIi8+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0i
dGh1bmRlciIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4K
KyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9jbWFrZT4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1n
aXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11
eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9n
c3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44Zjk5NDZmMGU5YjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQt
MDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKQEAgLTAsMCArMSwyNDcg
QEAKK0Zyb20gMDA1MmYzZDgzMTVlOGNlZmIwNGE2MmE2NGNhYzE3Y2JmYmM2YjhiNiBNb24gU2Vw
IDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJsaWUgVHVybmVyIDxjaHR1cm5lQGdtYWlsLmNv
bT4KK0RhdGU6IEZyaSwgMjUgTWF5IDIwMTggMDk6NDM6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRD
SF0gUGFyc2UgcGxheXJlYWR5IHBheWxvYWQuCisKK0xvb2sgYXQgdGhlIHBsYXlyZWFkeSBzcGVj
aWZpYyBkYXRhIHBheWxvYWQgdG8gZXh0cmFjdCBkZWZhdWx0IGtleSBpZHMKK2ZvciBkZWNyeXB0
aW5nIHNhbXBsZXMuIFRoZSBmb3JtYXQgb2YgdGhpcyBwYXlsb2FkIHNlZW1zIHRvIGJlCitwcm9w
cmlldGFyeS4KKworU2lnbmVkLW9mZi1ieTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZh
cmlzQGlnYWxpYS5jb20+CistLS0KKyBleHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMg
ICAgfCAgMTQgKystCisgZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIHwgMTM4
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNz
bWFuaWZlc3QuaCB8ICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3Nk
ZW11eC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCitpbmRleCBiY2VhOGNh
Li40ZmE5NWI5IDEwMDY0NAorLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5j
CisrKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMKK0BAIC00OTUsNyArNDk1
LDE5IEBAIGdzdF9tc3NfZGVtdXhfc2V0dXBfc3RyZWFtcyAoR3N0QWRhcHRpdmVEZW11eCAqIGRl
bXV4KQorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKHByb3RlY3Rpb25fc3lz
dGVtX2lkLCBwcm90ZWN0aW9uX2J1ZmZlciwKKyAgICAgICAgICAgInNtb290aC1zdHJlYW1pbmci
KTsKKyAKKy0gICAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLCAiUXVldWVpbmcgUHJvdGVjdGlv
biBldmVudCBvbiBzb3VyY2UgcGFkIik7CisrICAgICAgR3N0QnVmZmVyICprZXlfaWQgPSBnc3Rf
bXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKG1zc2RlbXV4LT5tYW5pZmVzdCk7CisrICAgICAgaWYg
KCFnc3RfYnVmZmVyX2dldF9zaXplIChrZXlfaWQpKSB7CisrICAgICAgICBHU1RfV0FSTklOR19P
QkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAicHJvdGVjdGVkIG1hbmlmZXN0LCBidXQgbm8g
a2V5IGlkcyBhdmFpbGFibGUiKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX0xPR19P
QkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAiQWRkaW5nIGtleSBpZCB0byB0aGUgcHJvdGVj
dGlvbiBldmVudCBvZiBzaXplICVsdSIsCisrICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6
ZSAoa2V5X2lkKSk7CisrICAgICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9ldmVu
dF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2ZW50KTsKKysgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIsIGtleV9pZCwgTlVMTCk7Cisr
ICAgICAgfQorKworKyAgICAgIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0sICJRdWV1aW5nIFByb3Rl
Y3Rpb24gZXZlbnQgb24gc291cmNlIHBhZCIpOworICAgICAgIGdzdF9hZGFwdGl2ZV9kZW11eF9z
dHJlYW1fcXVldWVfZXZlbnQgKChHc3RBZGFwdGl2ZURlbXV4U3RyZWFtICopIHN0cmVhbSwKKyAg
ICAgICAgICAgZXZlbnQpOworICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByb3RlY3Rpb25fYnVm
ZmVyKTsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMg
Yi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKK2luZGV4IGM4NTVjYjMuLmRm
MzEzMzAgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMK
KysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYworQEAgLTI4LDYgKzI4
LDggQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgor
ICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorKyNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KKysj
aW5jbHVkZSA8bGlieG1sL3hwYXRoSW50ZXJuYWxzLmg+CisgCisgLyogZm9yIHBhcnNpbmcgaDI2
NCBjb2RlYyBkYXRhICovCisgI2luY2x1ZGUgPGdzdC9jb2RlY3BhcnNlcnMvZ3N0aDI2NHBhcnNl
ci5oPgorQEAgLTEwOSw2ICsxMTEsMTAgQEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVzdAorICAgR1N0
cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1faWQ7CisgICBnY2hhciAqcHJvdGVjdGlvbl9kYXRhOwor
IAorKyAgLy8gRklYTUU6IFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBrZXkgaWRzIHByZXNlbnQgaW4g
cHJvdGVjdGVkIG1hbmlmZXN0cy4KKysgIGdjaGFyICprZXlfaWQ7CisrICBnc2l6ZSBrZXlfaWRf
bGVuOworKworICAgR1NMaXN0ICpzdHJlYW1zOworIH07CisgCitAQCAtMzAwLDYgKzMwNiwxMjIg
QEAgX2dzdF9tc3Nfc3RyZWFtX2luaXQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIEdzdE1z
c1N0cmVhbSAqIHN0cmVhbSwKKyAgIGdzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2luaXQgKCZzdHJl
YW0tPmZyYWdtZW50X3BhcnNlcik7CisgfQorIAorK3N0YXRpYyB2b2lkCisrX2dzdF9tc3NfcGFy
c2VfcHJvdGVjdGlvbl9kYXRhIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorK3sKKysgIGd1
Y2hhciAqZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEgPSBOVUxMOworKyAgZ3NpemUgZGVjb2RlZF9w
cm90ZWN0aW9uX2RhdGFfbGVuID0gMDsKKysgIHhtbENoYXIgKnByb3RlY3Rpb25fZGF0YV90ZXh0
ID0gTlVMTDsKKysgIGludCBwcm90ZWN0aW9uX2RhdGFfdGV4dF9sZW4gPSAwOworKyAgeG1sRG9j
UHRyIHByb3RlY3Rpb25fZGF0YV94bWwgPSBOVUxMOworKyAgLy8gTm90ZSwgdGhpcyBkb2VzIG5v
dCBuZWVkIHRvIGZyZWUnZCwgZnJlZWluZyB0aGUgZG9jIHB0ciB3aWxsIGZyZWUgdGhpcy4KKysg
IHhtbE5vZGUgKnByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSBOVUxMOworKyAgY29uc3Qg
eG1sQ2hhciAqcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IE5VTEw7CisrICB4bWxYUGF0aENv
bnRleHRQdHIgeHBhdGhfY3R4ID0gTlVMTDsKKysgIHhtbFhQYXRoT2JqZWN0UHRyIHhwYXRoX29i
aiA9IE5VTEw7CisrICB4bWxOb2RlU2V0UHRyIGtleV9pZF9ub2RlID0gTlVMTDsKKysgIGdzaXpl
IHByb3RlY3Rpb25fZGF0YV94bWxfbGVuID0gMDsKKysgIGd1Y2hhciAqc3RhcnRfdGFnID0gTlVM
TDsKKysKKysgIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhID0KKysgICAgICBnX2Jhc2U2NF9kZWNv
ZGUgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGEsICZkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YV9s
ZW4pOworKworKyAgc3RhcnRfdGFnID0gZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGE7CisrCisrICAv
LyBUaGUgcHJvdGVjdGlvbiBkYXRhIHN0YXJ0cyB3aXRoIGEgMTAtYnl0ZSBQbGF5UmVhZHkgdmVy
c2lvbgorKyAgLy8gaGVhZGVyIHRoYXQgbmVlZHMgdG8gYmUgc2tpcHBlZCBvdmVyIHRvIGF2b2lk
IFhNTCBwYXJzaW5nCisrICAvLyBlcnJvcnMuCisrICB3aGlsZSAoc3RhcnRfdGFnICYmICpzdGFy
dF90YWcgIT0gJzwnKQorKyAgICBzdGFydF90YWcrKzsKKysKKysgIGlmICghc3RhcnRfdGFnKSB7
CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBmaW5kIGEgc3RhcnQgdGFnIGluIHByb3RlY3Rp
b24gZGF0YSBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICBwcm90ZWN0
aW9uX2RhdGFfeG1sX2xlbiA9CisrICAgICAgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuIC0g
KHN0YXJ0X3RhZyAtIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhKTsKKysgIHByb3RlY3Rpb25fZGF0
YV94bWwgPQorKyAgICAgIHhtbFJlYWRNZW1vcnkgKChjb25zdCBnY2hhciAqKSBzdGFydF90YWcs
IHByb3RlY3Rpb25fZGF0YV94bWxfbGVuLAorKyAgICAgICJwcm90ZWN0aW9uX2RhdGEiLCAidXRm
LTE2IiwgMCk7CisrCisrICBpZiAoIXByb3RlY3Rpb25fZGF0YV94bWwpIHsKKysgICAgR1NUX0VS
Uk9SICgiZmFpbGVkIHRvIHBhcnNlIHByb3RlY3Rpb24gZGF0YSBYTUwiKTsKKysgICAgZ290byBi
ZWFjaDsKKysgIH0KKysKKysgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAo
R1NUX0NBVF9ERUZBVUxUKSA+PSBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICB4bWxEb2NEdW1w
TWVtb3J5RW5jIChwcm90ZWN0aW9uX2RhdGFfeG1sLCAmcHJvdGVjdGlvbl9kYXRhX3RleHQsCisr
ICAgICAgICAmcHJvdGVjdGlvbl9kYXRhX3RleHRfbGVuLCAidXRmOCIpOworKyAgICBHU1RfTUVN
RFVNUCAoInByb3RlY3Rpb24gZGF0YSBYTUwiLCBwcm90ZWN0aW9uX2RhdGFfdGV4dCwKKysgICAg
ICAgIHByb3RlY3Rpb25fZGF0YV90ZXh0X2xlbik7CisrICAgIHhtbEZyZWUgKHByb3RlY3Rpb25f
ZGF0YV90ZXh0KTsKKysgIH0KKysKKysgIHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSB4
bWxEb2NHZXRSb290RWxlbWVudCAocHJvdGVjdGlvbl9kYXRhX3htbCk7CisrICBpZiAocHJvdGVj
dGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFIHx8CisrICAg
ICAgeG1sU3RyY21wIChwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT5uYW1lLAorKyAgICAg
ICAgICAoY29uc3QgeG1sQ2hhciAqKSAiV1JNSEVBREVSIikgfHwgIXByb3RlY3Rpb25fZGF0YV9y
b290X2VsZW1lbnQtPm5zKSB7CisrICAgIEdTVF9FUlJPUiAoImludmFsaWQgcHJvdGVjdGlvbiBk
YXRhIFhNTCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgeHBhdGhfY3R4ID0geG1s
WFBhdGhOZXdDb250ZXh0IChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysgIGlmICgheHBhdGhfY3R4
KSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjcmVhdGUgeHBhdGggY29udGV4dCIpOwor
KyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9
IHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zLT5ocmVmOworKyAgaWYgKHhtbFhQYXRo
UmVnaXN0ZXJOcyAoeHBhdGhfY3R4LCAoY29uc3QgeG1sQ2hhciAqKSAicHJoZHIiLAorKyAgICAg
ICAgICBwcm90ZWN0aW9uX2RhdGFfbmFtZXNwYWNlKSA8IDApIHsKKysgICAgR1NUX0VSUk9SICgi
ZmFpbGVkIHRvIHJlZ2lzdGVyIFhNTCBuYW1lc3BhY2UiKTsKKysgICAgZ290byBiZWFjaDsKKysg
IH0KKysKKysgIHhwYXRoX29iaiA9CisrICAgICAgeG1sWFBhdGhFdmFsRXhwcmVzc2lvbiAoKGNv
bnN0IHhtbENoYXIgKikgIi8vcHJoZHI6S0lEIiwgeHBhdGhfY3R4KTsKKysgIGlmICgheHBhdGhf
b2JqKSB7CisrICAgIEdTVF9ERUJVRyAoImZhaWxlZCB0byBldmFsIFhQYXRoIGV4cHJlc3Npb24i
KTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGtleV9pZF9ub2RlID0geHBhdGhfb2Jq
LT5ub2Rlc2V0dmFsOworKyAgaW50IG51bV9rZXlfaWRzID0ga2V5X2lkX25vZGUgPyBrZXlfaWRf
bm9kZS0+bm9kZU5yIDogMDsKKysKKysgIEdTVF9ERUJVRyAoImZvdW5kICVkIGtleSBpZHMiLCBu
dW1fa2V5X2lkcyk7CisrCisrICBpZiAobnVtX2tleV9pZHMgIT0gMCAmJiAoa2V5X2lkX25vZGUt
Pm5vZGVUYWJbMF0tPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkpIHsKKysgICAgeG1sQ2hhciAq
ZW5jb2RlZF9rZXlfaWQgPSB4bWxOb2RlR2V0Q29udGVudCAoa2V5X2lkX25vZGUtPm5vZGVUYWJb
MF0pOworKyAgICBnc2l6ZSBkZWNvZGVkX2tleV9pZF9sZW47CisrICAgIGd1Y2hhciAqZGVjb2Rl
ZF9rZXlfaWQgPQorKyAgICAgICAgZ19iYXNlNjRfZGVjb2RlICgoY29uc3QgZ2NoYXIgKikgZW5j
b2RlZF9rZXlfaWQsICZkZWNvZGVkX2tleV9pZF9sZW4pOworKworKyAgICBHU1RfTUVNRFVNUCAo
ImtleSByZXRyaWV2ZWQiLCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysK
KysgICAgbWFuaWZlc3QtPmtleV9pZCA9IGdfcmVhbGxvYyAobWFuaWZlc3QtPmtleV9pZCwgZGVj
b2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWVtY3B5IChtYW5pZmVzdC0+a2V5X2lkLCBkZWNvZGVk
X2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWFuaWZlc3QtPmtleV9pZF9sZW4g
PSBkZWNvZGVkX2tleV9pZF9sZW47CisrCisrICAgIHhtbEZyZWUgKGVuY29kZWRfa2V5X2lkKTsK
KysgICAgZ19mcmVlIChkZWNvZGVkX2tleV9pZCk7CisrICB9IGVsc2UgeworKyAgICBHU1RfRVJS
T1IgKCJpbnZhbGlkIFhNTCBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisr
YmVhY2g6CisrICBpZiAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpCisrICAgIGdfZnJlZSAoZGVj
b2RlZF9wcm90ZWN0aW9uX2RhdGEpOworKyAgaWYgKHhwYXRoX2N0eCkKKysgICAgeG1sWFBhdGhG
cmVlQ29udGV4dCAoeHBhdGhfY3R4KTsKKysgIGlmICh4cGF0aF9vYmopCisrICAgIHhtbFhQYXRo
RnJlZU9iamVjdCAoeHBhdGhfb2JqKTsKKysgIGlmIChwcm90ZWN0aW9uX2RhdGFfeG1sKQorKyAg
ICB4bWxGcmVlRG9jIChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysKKysgIHJldHVybjsKKyt9Cisg
Cisgc3RhdGljIHZvaWQKKyBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVz
dCAqIG1hbmlmZXN0LAorQEAgLTMyOSw2ICs0NTEsNyBAQCBfZ3N0X21zc19wYXJzZV9wcm90ZWN0
aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorIAorICAgICAgIG1hbmlmZXN0LT5wcm90
ZWN0aW9uX3N5c3RlbV9pZCA9IHN5c3RlbV9pZDsKKyAgICAgICBtYW5pZmVzdC0+cHJvdGVjdGlv
bl9kYXRhID0gKGdjaGFyICopIHhtbE5vZGVHZXRDb250ZW50IChub2RlaXRlcik7CisrICAgICAg
X2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChtYW5pZmVzdCk7CisgICAgICAgeG1sRnJl
ZSAoc3lzdGVtX2lkX2F0dHJpYnV0ZSk7CisgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0zOTQs
NiArNTE3LDkgQEAgZ3N0X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCisgICAg
IH0KKyAgIH0KKyAKKysgIG1hbmlmZXN0LT5rZXlfaWQgPSBOVUxMOworKyAgbWFuaWZlc3QtPmtl
eV9pZF9sZW4gPSAwOworKworICAgZm9yIChub2RlaXRlciA9IHJvb3QtPmNoaWxkcmVuOyBub2Rl
aXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRlci0+bmV4dCkgeworICAgICBpZiAobm9kZWl0ZXItPnR5
cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQorICAgICAgICAgJiYgKHN0cmNtcCAoKGNvbnN0IGNoYXIg
Kikgbm9kZWl0ZXItPm5hbWUsICJTdHJlYW1JbmRleCIpID09IDApKSB7CitAQCAtNDQwLDYgKzU2
Niw5IEBAIGdzdF9tc3NfbWFuaWZlc3RfZnJlZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkK
KyAKKyAgIGdfc2xpc3RfZnJlZV9mdWxsIChtYW5pZmVzdC0+c3RyZWFtcywgKEdEZXN0cm95Tm90
aWZ5KSBnc3RfbXNzX3N0cmVhbV9mcmVlKTsKKyAKKysgIGlmIChtYW5pZmVzdC0+a2V5X2lkKQor
KyAgICBnX2ZyZWUgKG1hbmlmZXN0LT5rZXlfaWQpOworKworICAgaWYgKG1hbmlmZXN0LT5wcm90
ZWN0aW9uX3N5c3RlbV9pZCAhPSBOVUxMKQorICAgICBnX3N0cmluZ19mcmVlIChtYW5pZmVzdC0+
cHJvdGVjdGlvbl9zeXN0ZW1faWQsIFRSVUUpOworICAgeG1sRnJlZSAobWFuaWZlc3QtPnByb3Rl
Y3Rpb25fZGF0YSk7CitAQCAtNDYyLDYgKzU5MSwxNSBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9w
cm90ZWN0aW9uX2RhdGEgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisgICByZXR1cm4gbWFu
aWZlc3QtPnByb3RlY3Rpb25fZGF0YTsKKyB9CisgCisrR3N0QnVmZmVyICoKKytnc3RfbXNzX21h
bmlmZXN0X2dldF9rZXlfaWQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisreworKyAgR3N0
QnVmZmVyICprZXlfaWRfYnVmZmVyID0KKysgICAgICBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAo
TlVMTCwgbWFuaWZlc3QtPmtleV9pZF9sZW4sIE5VTEwpOworKyAgZ3N0X2J1ZmZlcl9maWxsIChr
ZXlfaWRfYnVmZmVyLCAwLCBtYW5pZmVzdC0+a2V5X2lkLCBtYW5pZmVzdC0+a2V5X2lkX2xlbik7
CisrICByZXR1cm4ga2V5X2lkX2J1ZmZlcjsKKyt9CisrCisgR1NMaXN0ICoKKyBnc3RfbXNzX21h
bmlmZXN0X2dldF9zdHJlYW1zIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorIHsKK2RpZmYg
LS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggYi9leHQvc21vb3Ro
c3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKK2luZGV4IDAzYjA2NmEuLjRlNmFkNzMgMTAwNjQ0
CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKKysrKyBiL2V4dC9z
bW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAorQEAgLTU2LDYgKzU2LDcgQEAgR3N0Q2xv
Y2tUaW1lIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X21pbl9mcmFnbWVudF9kdXJhdGlvbiAoR3N0TXNz
TWFuaWZlc3QgKiBtYW5pZmUKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3By
b3RlY3Rpb25fc3lzdGVtX2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyBjb25zdCBn
Y2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZl
c3QgKiBtYW5pZmVzdCk7CisgZ2Jvb2xlYW4gZ3N0X21zc19tYW5pZmVzdF9nZXRfbGl2ZV9zZWVr
X3JhbmdlIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LCBnaW50NjQgKiBzdGFydCwgZ2ludDY0
ICogc3RvcCk7CisrR3N0QnVmZmVyICogZ3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyAKKyBHc3RNc3NTdHJlYW1UeXBlIGdzdF9tc3Nfc3Ry
ZWFtX2dldF90eXBlIChHc3RNc3NTdHJlYW0gKnN0cmVhbSk7CisgR3N0Q2FwcyAqIGdzdF9tc3Nf
c3RyZWFtX2dldF9jYXBzIChHc3RNc3NTdHJlYW0gKiBzdHJlYW0pOworLS0gCisyLjIwLjEKKwpk
aWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAy
LUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRj
aCBiL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1p
Zi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2gKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNWY1YmIzNDhhMWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1nb29kLTAwMDIt
Q2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRlZC1hLWRlZmF1bHQta2lkLnBhdGNo
CkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGE4MTZkOGRhYjZiYjMzNzcwMTUwMjg5YTRhZWRlNDNl
MmY3YWU0NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGFybGllIFR1cm5lciA8
Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIE1heSAyMDE5IDIzOjM0OjQzICswMjAw
CitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIGFuIHVwc3RyZWFtIGRlbXV4ZXIgcHJvdmlkZWQg
YSBkZWZhdWx0IGtpZC4KKworU21vb3RoIHN0cmVhbWluZyBkZW11eGVycyBkbyBub3Qgc2VuZCBi
b3hlcyBjb250YWluaW5nIG1ldGFkYXRhIGFib3V0Cit0aGUgc3RyZWFtLiBUaGV5IGhhdmUgdG8g
c2VuZCBtZXRhZGF0YSAib3V0LW9mLWJhbmQiLgorCitGb3IgcGlmZiBlbmNvZGVkIHN0cmVhbXMs
IGlmIG5vIGJveCBoYXMgYmVlbiBmb3VuZCBjb250YWluaW5nIGEgZGVmYXVsdAora2lkIGZvciB0
aGUgc2FtcGxlLCBjaGVjayBpZiBhbiB1cHN0cmVhbSBkZW11eGVyIGhhcyBwcm92aWRlZCBvbmUg
dmlhIGEKK3Byb3RlY3Rpb24gZXZlbnQsIGFuZCB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrLgorCitT
aWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNv
bT4KKy0tLQorIGdzdC9pc29tcDQvcXRkZW11eC5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCsp
CisKK2RpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11
eC5jCitpbmRleCBjZjE1ZmFkNDYuLmU0NDliNDgwYyAxMDA2NDQKKy0tLSBhL2dzdC9pc29tcDQv
cXRkZW11eC5jCisrKysgYi9nc3QvaXNvbXA0L3F0ZGVtdXguYworQEAgLTQ1MSw2ICs0NTEsNyBA
QCBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0KKyAgIGd1aW50MzIgcHJvdGVjdGlvbl9zY2hlbWVfdmVy
c2lvbjsKKyAgIGdwb2ludGVyIHByb3RlY3Rpb25fc2NoZW1lX2luZm87ICAgICAgLyogc3BlY2lm
aWMgdG8gdGhlIHByb3RlY3Rpb24gc2NoZW1lICovCisgICBHUXVldWUgcHJvdGVjdGlvbl9zY2hl
bWVfZXZlbnRfcXVldWU7CisrICBHc3RCdWZmZXIgKmRlZmF1bHRfa2lkOworIAorICAgZ2ludCBy
ZWZfY291bnQ7ICAgICAgICAgICAgICAgLyogYXRvbWljICovCisgfTsKK0BAIC0yMDA4LDYgKzIw
MDksNyBAQCBfY3JlYXRlX3N0cmVhbSAoR3N0UVREZW11eCAqIGRlbXV4LCBndWludDMyIHRyYWNr
X2lkKQorICAgc3RyZWFtLT5zdHJlYW1fdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7
CisgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChzdHJlYW0tPnN0cmVhbV90YWdzLCBHU1RfVEFH
X1NDT1BFX1NUUkVBTSk7CisgICBnX3F1ZXVlX2luaXQgKCZzdHJlYW0tPnByb3RlY3Rpb25fc2No
ZW1lX2V2ZW50X3F1ZXVlKTsKKysgIHN0cmVhbS0+ZGVmYXVsdF9raWQgPSBOVUxMOworICAgc3Ry
ZWFtLT5yZWZfY291bnQgPSAxOworICAgLyogY29uc2lzdGVudCBkZWZhdWx0IGZvciBwdXNoIGJh
c2VkIG1vZGUgKi8KKyAgIGdzdF9zZWdtZW50X2luaXQgKCZzdHJlYW0tPnNlZ21lbnQsIEdTVF9G
T1JNQVRfVElNRSk7CitAQCAtMjQ3Niw2ICsyNDc4LDMyIEBAIGdzdF9xdGRlbXV4X2hhbmRsZV9z
aW5rX2V2ZW50IChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgIGNh
c2UgR1NUX0VWRU5UX1BST1RFQ1RJT046CisgICAgIHsKKyAgICAgICBjb25zdCBnY2hhciAqc3lz
dGVtX2lkID0gTlVMTDsKKysgICAgICBHc3RCdWZmZXIgKmRlZmF1bHRfa2V5X2lkID0gTlVMTDsK
KysgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKysgICAgICBRdERlbXV4U3Ry
ZWFtICpzdHJlYW0gPSBOVUxMOworKyAgICAgIEdzdE1hcEluZm8gbWFwOworKworKyAgICAgIHN0
cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7CisrICAgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQ
RV9CVUZGRVIpKSB7CisrICAgICAgICBnc3Rfc3RydWN0dXJlX2dldCAoc3RydWN0dXJlLCAia2V5
X2lkIiwgR1NUX1RZUEVfQlVGRkVSLAorKyAgICAgICAgICAgICZkZWZhdWx0X2tleV9pZCwgTlVM
TCk7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKKysgICAgICAgICAgICAicmVj
ZWl2ZWQgYSBkZWZhdWx0IGtleSBpZCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAorKyAgICAg
ICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGRlZmF1bHRfa2V5X2lkKSk7CisrCisrICAgICAg
ICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkg
Pj0KKysgICAgICAgICAgICBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICAgICAgICBnc3RfYnVm
ZmVyX21hcCAoZGVmYXVsdF9rZXlfaWQsICZtYXAsIEdTVF9NQVBfUkVBRCk7CisrICAgICAgICAg
IEdTVF9NRU1EVU1QX09CSkVDVCAoZGVtdXgsICJkZWZhdWx0IGtleSBpZCIsIChndWludDggKikg
bWFwLmRhdGEsCisrICAgICAgICAgICAgICBtYXAuc2l6ZSk7CisrICAgICAgICAgIGdzdF9idWZm
ZXJfdW5tYXAgKGRlZmF1bHRfa2V5X2lkLCAmbWFwKTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmIChRVERFTVVYX05fU1RSRUFNUyAoZGVtdXgpKSB7CisrICAgICAgICAgIHN0cmVhbSA9IFFU
REVNVVhfTlRIX1NUUkVBTSAoZGVtdXgsIDApOworKyAgICAgICAgICBzdHJlYW0tPmRlZmF1bHRf
a2lkID0gZGVmYXVsdF9rZXlfaWQ7CisrICAgICAgICB9CisrICAgICAgfQorIAorICAgICAgIGdz
dF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uIChldmVudCwgJnN5c3RlbV9pZCwgTlVMTCwgTlVMTCk7
CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZWNlaXZlZCBwcm90ZWN0aW9uIGV2
ZW50IGZvciBzeXN0ZW0gSUQgJXMiLAorQEAgLTI2ODgsNiArMjcxNiw4IEBAIGdzdF9xdGRlbXV4
X3N0cmVhbV9jbGVhciAoUXREZW11eFN0cmVhbSAqIHN0cmVhbSkKKyAgIGdfcXVldWVfZm9yZWFj
aCAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUsCisgICAgICAgKEdGdW5j
KSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwpOworICAgZ19xdWV1ZV9jbGVhciAoJnN0cmVhbS0+cHJv
dGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUpOworKyAgaWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQp
CisrICAgIGdzdF9idWZmZXJfdW5yZWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpOworICAgZ3N0X3F0
ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21lbnRzX2RhdGEgKHN0cmVhbSk7CisgICBnc3RfcXRkZW11
eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19kYXRhIChzdHJlYW0pOworIH0KK0BAIC0yOTU0LDYgKzI5
ODQsMTkgQEAgcXRkZW11eF9wYXJzZV9waWZmIChHc3RRVERlbXV4ICogcXRkZW11eCwgY29uc3Qg
Z3VpbnQ4ICogYnVmZmVyLCBnaW50IGxlbmd0aCwKKyAgICAgdXNlc19zdWJfc2FtcGxlX2VuY3J5
cHRpb24gPSBUUlVFOworICAgfQorIAorKyAgLy8gSW4gdGhlIGNhc2Ugb2Ygc21vb3RoIHN0cmVh
bWluZywgd2UgbmV2ZXIgZ2V0IG1vb3YgYm94ZXMgYW5kIHRoZWlyCisrICAvLyBkZWZhdWx0IGVu
Y3J5cHRpb24gbWV0YWRhdGEuIEluc3RlYWQsIHRoZSBkZW11eGVyIGhhcyB0byBwYXJzZSB0aGlz
CisrICAvLyBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBwYXlsb2Fk
cyBhbmQgbWFrZSBpdCBhdmFpbGJsZQorKyAgLy8gc29tZWhvdyB0byB1cy4KKysgIGlmICghZ3N0
X3N0cnVjdHVyZV9oYXNfZmllbGQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgImtpZCIp
KSB7CisrICAgIGlmICghc3RyZWFtLT5kZWZhdWx0X2tpZCkgeworKyAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVCAocXRkZW11eCwgIk5vIGF2YWlsYWJsZSBrZXkgaWQgZm9yIHNhbXBsZSIpOworKyAg
ICB9IGVsc2UgeworKyAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzc19pbmZvLT5kZWZhdWx0X3By
b3BlcnRpZXMsICJraWQiLCBHU1RfVFlQRV9CVUZGRVIsCisrICAgICAgICAgIHN0cmVhbS0+ZGVm
YXVsdF9raWQsIE5VTEwpOworKyAgICB9CisrICB9CisrCisgICBpZiAoIWdzdF9zdHJ1Y3R1cmVf
Z2V0X3VpbnQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgIml2X3NpemUiLAorICAgICAg
ICAgICAmaXZfc2l6ZSkpIHsKKyAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgIkVycm9y
IGdldHRpbmcgZW5jcnlwdGlvbiBJViBzaXplIGZpZWxkIik7CistLSAKKzIuMjAuMQorCmRpZmYg
LS1naXQgYS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMgYi9Ub29scy9ndGsvaW5zdGFs
bC1kZXBlbmRlbmNpZXMKaW5kZXggNjEzNjdiNTAwY2EzLi45ZmJlM2U0ZDk4Y2MgMTAwNzU1Ci0t
LSBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcworKysgYi9Ub29scy9ndGsvaW5zdGFs
bC1kZXBlbmRlbmNpZXMKQEAgLTE5MCw2ICsxOTAsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5k
ZW5jaWVzV2l0aEFwdCB7CiAgICAgICAgIGdpdCBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVj
dGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwKKyAgICAgICAg
Z3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBsaWJjcm9jbzMtZGV2
IFwKICAgICAgICAgbGliY3VwczItZGV2IFwKQEAgLTM3OCw2ICszNzksNyBAQCBmdW5jdGlvbiBp
bnN0YWxsRGVwZW5kZW5jaWVzV2l0aFBhY21hbiB7CiAgICAgICAgIGdudXRscyBcCiAgICAgICAg
IGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVt
YXMgXAorICAgICAgICBneXAgXAogICAgICAgICBpY29uLW5hbWluZy11dGlscyBcCiAgICAgICAg
IGxpYmNyb2NvIFwKICAgICAgICAgbGliY3VwcyBcCkBAIC01NjEsNiArNTYzLDcgQEAgZnVuY3Rp
b24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhEbmYgewogICAgICAgICBnbnV0bHMtZGV2ZWwgXAog
ICAgICAgICBnb2JqZWN0LWludHJvc3BlY3Rpb24gXAogICAgICAgICBnc2V0dGluZ3MtZGVza3Rv
cC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRp
bHMgXAogICAgICAgICBpdHN0b29sIFwKICAgICAgICAgbGliWGZvbnQyLWRldmVsIFwKZGlmZiAt
LWdpdCBhL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weSBiL1Rvb2xzL2poYnVpbGQv
amhidWlsZHJjX2NvbW1vbi5weQppbmRleCBiYmJkYmYzNjAzOWYuLjNlMjYxZTcyZDdiYSAxMDA2
NDQKLS0tIGEvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5CisrKyBiL1Rvb2xzL2po
YnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQpAQCAtODMsMyArODMsOCBAQCBkZWYgaW5pdChqaGJ1
aWxkcmNfZ2xvYmFscywgamhidWlsZF9wbGF0Zm9ybSk6CiAKICAgICBpZiAneDg2XzY0JyBpbiBw
bGF0Zm9ybS5tYWNoaW5lKCk6CiAgICAgICAgIGpoYnVpbGRyY19nbG9iYWxzWydjb25kaXRpb25z
J10uYWRkKCd4ODZfNjQnKQorCisgICAgaWYgJ0pIQlVJTERfRU5BQkxFX09QRU5DRE0nIGluIG9z
LmVudmlyb246CisgICAgICAgIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPSBvcy5lbnZpcm9uWydK
SEJVSUxEX0VOQUJMRV9PUEVOQ0RNJ10ubG93ZXIoKQorICAgICAgICBpZiBqaGJ1aWxkX2VuYWJs
ZV9vcGVuY2RtID09ICd5ZXMnIG9yIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJzEnIG9yIGpo
YnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJ3RydWUnOgorICAgICAgICAgICAgamhidWlsZHJjX2ds
b2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQoJ09wZW5DRE0nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd3Bl
L2luc3RhbGwtZGVwZW5kZW5jaWVzIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCmlu
ZGV4IGFkODI2MjEzNWU5ZC4uMWUyYWVkMzY0M2M3IDEwMDc1NQotLS0gYS9Ub29scy93cGUvaW5z
dGFsbC1kZXBlbmRlbmNpZXMKKysrIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCkBA
IC0xMjAsNiArMTIwLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQgewog
ICAgIHBhY2thZ2VzPSIkcGFja2FnZXMgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGlu
Z3MtZGVza3RvcC1zY2hlbWFzLWRldiBcCisgICAgICAgIGd5cCBcCiAgICAgICAgIGxpYmVnbDEt
bWVzYS1kZXYgXAogICAgICAgICBsaWJleHBhdDEtZGV2IFwKICAgICAgICAgbGliZmRrLWFhYy1k
ZXYgXApAQCAtMjM5LDYgKzI0MCw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRo
UGFjbWFuIHsKICAgICAgICAgZXhwYXQgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGlu
Z3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGliZmRrLWFhYyBc
CiAgICAgICAgIGxpYnByb3h5IFwKICAgICAgICAgbGlicHNsIFwKQEAgLTM1OSw2ICszNjEsNyBA
QCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aERuZiB7CiAgICAgICAgIGZkay1hYWMt
ZGV2ZWwgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFz
LWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGlibW91bnQtZGV2ZWwgXAogICAgICAg
ICBsaWJwcm94eS1kZXZlbCBcCiAgICAgICAgIGxpYnBzbC1kZXZlbCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402721</attachid>
            <date>2020-06-24 23:57:45 -0700</date>
            <delta_ts>2020-07-03 08:37:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>163423</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNDBkYjJmYTgwNWUuLjVi
MWQ1ZjMyODczZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA2LTI0ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA2LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9u
c0dUSy5jbWFrZSBhbmQgTkVXUyBmb3IgMi4yOS4yIHJlbGVhc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODE5MWQxYTJhNjYy
Li43YTFhNGI3YWU3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjAtMDYtMjQgIFhhYmllciBS
b2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVh
bWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEJveFB0ci5oIHRoYXQg
aW5jbHVkZXMgQm94UHRyPFQ+IGFzIGFsaWFzIG9mCisgICAgICAgIEJveDxzdGQ6OnVuaXF1ZV9w
dHI8VD4+LiBXZSBkaXNjdXNzZWQgYWJvdXQgdGhpcyBjbGFzcyBvbiBidWcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OSBhbmQgd2UgYWdyZWVk
IG9uCisgICAgICAgIHRoaXMgYWxpYXMgYmVpbmcgdGhlIGJlc3QgaWRlYS4gQXBhcnQgZnJvbSB0
aGUgYWxpYXMgSSdtIGFkZGluZyBhCisgICAgICAgIGNvdXBsZSBvZiBoZWxwZXJzIGxpa2UgYSBj
cmVhdGUgZnVuY3Rpb24gYW5kIHRoZSBvcGVyYXRvcj09LgorCisgICAgICAgIFRoaXMgYWxzbyBp
bmNsdWRlcyBzb21lIGJpdHMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBPcGVuQ0RNIHN1cHBvcnQuCisK
KyAgICAgICAgVGVzdHM6IEJveFB0ciBBUEkgdGVzdHMgYWRkZWQuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQm94UHRyLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpCb3hQdHJEZWxldGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Y3JlYXRlQm94UHRyKToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5o
OgorCisyMDIwLTA1LTI2ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW1dURl0gSW1wbGVtZW50IG5ldyBCb3hQdHIgY2xhc3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjM3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwdXJwb3NlIG9m
IHRoaXMgY2xhc3MgaXMgdG8gaG9sZCBDLWxpa2UgcG9pbnRlciBvYmplY3RzIGluCisgICAgICAg
IHNoYXJhYmxlIHdheSB0aGF0IGFyZSBub3QgcmVmIGNvdW50ZWQgYW5kIHRoYXQgcmVxdWlyZSBh
IGN1c3RvbQorICAgICAgICBkZWxldGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0JveFB0ci5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6Qm94UHRyRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChXVEY6OkJveFB0
cjo6Qm94UHRyKToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvcj0pOgorICAgICAgICAo
V1RGOjpCb3hQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChXVEY6OkJveFB0cjo6b3BlcmF0b3Iq
IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRy
OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpvcGVyYXRvciEgY29u
c3QpOgorICAgICAgICAoV1RGOjpCb3hQdHI6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAg
ICAoV1RGOjpCb3hQdHI6OkRhdGE6OkRhdGEpOgorICAgICAgICAoV1RGOjpCb3hQdHI6OkRhdGE6
On5EYXRhKToKKyAgICAgICAgKFdURjo6Qm94UHRyOjpEYXRhOjpvcGVyYXRvciEgY29uc3QpOgor
ICAgICAgICAoV1RGOjpCb3hQdHI6OkRhdGE6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAg
ICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKwogMjAyMC0wNi0yMyAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBXVEY6OnNldE1haW5UaHJlYWRDYWxs
YmFja3NQYXVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQ5NmRhNzg1MjY1ZS4uMGU0ODkxZjI2ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkwRjhGMkI5MDE3MkUwMEYwMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25U
aHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOUIxNzJGMjU5NDAw
N0RCREE1IC8qIENvbnZlcnNpb25Nb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnZlcnNpb25Nb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2
NCAvKiBCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMyNzRBMUMxN0Y0QjcwMENGNjU2NiAvKiBCb3hQ
dHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm94UHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTQ5NTgzMUM1NzFDQzkwMDQxM0E0OCAvKiBPcmRlck1h
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9yZGVyTWFrZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzEyMENCNEI3NzAwNDc5NjM1IC8qIERl
YnVnSGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z0hlYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NUI2MzIyMENCNEI3NzAwNDc5NjM1IC8q
IERlYnVnSGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWJ1
Z0hlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU2LDYgKzk1Nyw3IEBA
CiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJ
MEZCMzk5QjgyMEFGNUE1ODAwMTdFMjEzIC8qIEJvb2xlYW5MYXR0aWNlLmggKi8sCiAJCQkJMEY5
MzI3NEExQzE3RjRCNzAwQ0Y2NTY0IC8qIEJveC5oICovLAorCQkJCTBGOTMyNzRBMUMxN0Y0Qjcw
MENGNjU2NiAvKiBCb3hQdHIuaCAqLywKIAkJCQk3QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyog
QnJpZ2FuZC5oICovLAogCQkJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0
LmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2Nh
dG9yLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Cb3hQdHIuaCBiL1NvdXJjZS9X
VEYvd3RmL0JveFB0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ZTRhNTIzNDNlNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvQm94UHRyLmgK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQm94UHRyRGVsZXRlciB7CisgICAgdm9pZCBvcGVy
YXRvcigpKFQqKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cit9OworCisjZGVmaW5l
IFdURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIodHlwZU5hbWUsIGRlbGV0ZXJGdW5jKSAgICAgICAg
XAorICAgIHRlbXBsYXRlPD4gc3RydWN0IEJveFB0ckRlbGV0ZXI8dHlwZU5hbWU+ICAgICAgICAg
IFwKKyAgICB7IFwKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpICh0eXBlTmFtZSogcHRyKSBjb25z
dCBcCisgICAgICAgIHsgXAorICAgICAgICAgICAgZGVsZXRlckZ1bmMocHRyKTsgXAorICAgICAg
ICB9IFwKKyAgICB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQm94UHRyID0gQm94
PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj47CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitCb3hQdHI8VD4gY3JlYXRlQm94UHRyKFQqIHB0cikKK3sKKyAgICByZXR1cm4gQm94
PHN0ZDo6dW5pcXVlX3B0cjxULCBCb3hQdHJEZWxldGVyPFQ+Pj46OmNyZWF0ZShwdHIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveFB0cjxUPiYg
bGhzLCBjb25zdCBCb3hQdHI8VD4mIHJocykKK3sKKyAgICBpZiAoIWxocyAmJiAhcmhzKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbGhzIHx8ICFyaHMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghbGhzLT5nZXQoKSAmJiAhcmhzLT5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWxocy0+Z2V0KCkgfHwgIXJocy0+Z2V0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAqbGhzID09ICpyaHM7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmNyZWF0ZUJveFB0cjsKK3VzaW5nIFdURjo6Qm94
UHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzEzMjA3NWQzZWIuLmI3YTdjYjI0YmFkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVB
REVSUwogICAgIEJsb29tRmlsdGVyLmgKICAgICBCb29sZWFuTGF0dGljZS5oCiAgICAgQm94LmgK
KyAgICBCb3hQdHIuaAogICAgIEJyaWdhbmQuaAogICAgIEJ1YmJsZVNvcnQuaAogICAgIEJ1bXBQ
b2ludGVyQWxsb2NhdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IDcxY2Q1MTI5ZWE3
Yi4uNzY5YjNmNjBhMzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTQwMSw2ICs0MDEs
MTAgQEAKICNkZWZpbmUgRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMgMAogI2VuZGlmCiAKKyNpZiAh
ZGVmaW5lZChFTkFCTEVfT1BFTkNETSkKKyNkZWZpbmUgRU5BQkxFX09QRU5DRE0gMAorI2VuZGlm
CisKICNpZiAhZGVmaW5lZChFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTKQogI2RlZmluZSBFTkFC
TEVfT1JJRU5UQVRJT05fRVZFTlRTIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDBlYWQ2ZWEyM2E1
My4uNGMwYTQ4ZTFkMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgxIEBACisyMDIwLTA2LTI0
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQgT3BlbkNETSBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRl
ZCB0aGUgT3BlbkNETSBzdXBwb3J0IGluIHRoZSBDRE1PcGVuQ0RNIGFuZAorICAgICAgICBDRE1Q
cm94eU9wZW5DRE0gcmVsYXRlZCBjbGFzc2VzLiBDRE1PcGVuQ0RNIGNsYXNzZXMgY2hlY2sgZm9y
CisgICAgICAgIFdpZGV2aW5lIHN1cHBvcnQgaW4gT3BlbkNETSBhbmQgZ2x1ZXMgdGhlIEphdmFT
Y3JpcHQgQVBJIHRvIHRoZQorICAgICAgICBPcGVuQ0RNL1RodW5kZXIgZnJhbWV3b3JrLiBCdWls
ZGluZyB0aGlzIGlzIG9wdGlvbmFsIGFuZCAtLW9wZW5jZG0KKyAgICAgICAgcGFyYW1ldGVyIG5l
ZWRzIHRvIGJlIHBhc3NlZCB0byBidWlsZC13ZWJraXQgdG8gZ2V0IGl0LgorCisgICAgICAgIENE
TVByb3h5IHJlbGF0ZWQgbmVlZGVkIGNoYW5nZXMgYmVjYXVzZSBvZiBzZXZlcmFsIHJlYXNvbnMu
IEZpcnN0CisgICAgICAgIGlzIHRoYXQgS2V5IHdhcyBjb25zaWRlcmluZyBvbmx5IGEgVmVjdG9y
PHVpbnQ4X3Q+IGFzIGEgdHlwZSBhbmQKKyAgICAgICAgT3BlbkNETSBoYXMgc2Vzc2lvbiBvYmpl
Y3RzLiBLZXkgaXMgYWxzbyByZW5hbWVkIHRvIEtleUhhbmRsZSBhcworICAgICAgICB0aGlzIG5h
bWUgcmVmbGVjdHMgaW4gYSBiZXR0ZXIgd2F5IHRoZSBwdXJwb3NlIG9mIHRoZSBjbGFzcy4gVGhp
cworICAgICAgICBibGVlZHMgb3V0IHRvIGFsbCBDRE1Qcm94eSByZWxhdGVkIGNsYXNzZXMuIEl0
IGFsc28gZ2V0cyBhCisgICAgICAgIGNyZWF0aW9uVGltZSB0byBiZSBhYmxlIHRvIG1lcmdlIEtl
eUhhbmRsZXMgdGhhdCB3YXMgbm90CisgICAgICAgIGNvbnNpZGVyZWQuIEtleVN0b3JlIGdldHMg
c3VwcG9ydCBmb3IgbWVyZ2Ugc3RyYXRlZ2llcworICAgICAgICAoQ2xlYXJLZXkgcmVtYWlucyBh
cyBOb09wIGFuZCBPcGVuQ0RNIGJlY29tZXMKKyAgICAgICAgUmVwbGFjZUlmTmV3ZXIpLiBDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eSBnZXRzIHN1cHBvcnQgdG8gcmVtb3ZlCisgICAgICAgIGl0c2Vs
ZiBmcm9tIHRoZSBDRE1TZXNzaW9uUHJveHkuIFRoZXJlIGlzIGFsc28gdGhlIHN1cHBvcnQgZm9y
IGEKKyAgICAgICAgc2h1dGRvd24gdG8gb3ZlcmNvbWUgYSBsaW1pdGF0aW9uIG9mIE9wZW5DRE0g
d2l0aCB0aGUgc2Vzc2lvbnMgYXMKKyAgICAgICAgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGFycml2
ZXMgbGF0ZSBhbmQgT3BlbkNETSBjYW4ndCBoYW5kbGUgc28KKyAgICAgICAgbWFueSBzZXNzaW9u
cywgd2hpY2ggY2F1c2VzIGZhaWx1cmVzICh0aGlzIGlzIG9wdCBpbiB0aHJ1IGFuIGVudgorICAg
ICAgICB2YXIgc2luY2UgaXQgd291bGQgbWFrZSB0aGUgSlMgb2JqZWN0cyBjcmlwcGxlZCBhbmQg
Y2FuIGNyZWF0ZQorICAgICAgICBpc3N1ZXMgaWYgdGhlIG9iamVjdHMgZ2V0IG1vcmUgaW50ZXJh
Y3Rpb25zKS4KKworICAgICAgICBSZWdhcmRpbmcgQ2xlYXJLZXksIHdlIGFkYXB0IHRoZSBjaGFu
Z2VzIHRvIHRoZSBDRE1Qcm94eSBjbGFzc2VzCisgICAgICAgIGFuZCBkZS1jYWJsZSBwcm90ZWN0
aW9uIHN5c3RlbSBmcm9tIHRoZSBkZWNyeXB0b3JzIGFzIHRoZSBPcGVuQ0RNCisgICAgICAgIGRl
Y3J5cHRvciBjb3VsZCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBzeXN0ZW0uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBZb3VUdWJlIFRWIDIwMTkgdGVzdHMgYXJlIGdyZWVuLgorCisgICAgICAgICog
SGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmg6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleUhhbmRsZTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXlIYW5kbGU6OmNyZWF0aW9uVGltZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleUhhbmRsZTo6dGFrZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
SGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnNldE1lcmdl
U3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3Jl
OjpyZXBsYWNlSWZOZXdlck1lcmdlU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5SGFu
ZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5SGFu
ZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxv
Y2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXlIYW5kbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmdldE9yV2FpdEZvcktleVZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25Qcm94eTo6Z2V0UmVtb3ZlZEZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjpjcmVhdGlv
blRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0YXR1c0N1cnJl
bnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Oktl
eUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6S2V5U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6Om5vT3BNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjpzZXRNZXJnZVN0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzaHV0ZG93
bik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFuY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnNodXRkb3duKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OkNETUluc3RhbmNlUHJveHkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlU2Vzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzaHV0ZG93bik6CisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc09wZW5DRE1SYW5rZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVWZWN0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3Rvcmllcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcDogQWRkZWQu
CisgICAgICAgIChvcGVuQ0RNTGljZW5zZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdERh
dGFNRDUpOgorICAgICAgICAoV2ViQ29yZTo6c2Vzc2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0p
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFj
dG9yeU9wZW5DRE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3Bl
bkNETTo6Y3JlYXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OnN1cHBvcnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFj
dG9yeU9wZW5DRE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVzdG5lc3Nl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3Rp
dmVJZGVudGlmaWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVu
aXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cml2YXRlT3BlbkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJp
dmF0ZU9wZW5DRE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
aXZhdGVPcGVuQ0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25z
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVT
ZXNzaW9uSWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpD
RE1JbnN0YW5jZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RN
Ojppbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VPcGVuQ0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24pOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VSZXNwb25zZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleVVwZGF0ZWRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlzVXBkYXRlRG9uZUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmVycm9yQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVx
dWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TTo6c2Vzc2lvbkZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNl
c3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpjbG9zZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktleVVzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmguCisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ0RNOjpPQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9u
S2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5
T3BlbkNETS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpn
ZXREZWNyeXB0aW9uU2Vzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eU9w
ZW5DRE06OmRlY3J5cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvQ0RNUHJveHlPcGVuQ0RNLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkluaXREYXRhOjpJbml0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbml0RGF0YTo6cGF5bG9hZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJFTUVVdGlsaXRpZXM6OmlzV2lkZXZpbmVLZXlTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2lu
aXQpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAodHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh0cmFuc2Zvcm1J
blBsYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfY2xhc3Nf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2luaXQpOgorICAg
ICAgICAoZmluYWxpemUpOgorICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAg
KGNkbVByb3h5QXR0YWNoZWQpOgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVy
Lmg6IEFkZGVkLgorCiAyMDIwLTA2LTI0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdt
YWlsLmNvbT4KIAogICAgICAgICBSZW1vdmUgW0NhbGxiYWNrTmVlZHNPcGVyYXRvckVxdWFsXSBl
eHRlbmRlZCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDk2M2YwYzFiZDViYy4uMjZh
MDY2YmVhYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE2MDIsMyArMTYwMiw3IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICAke1dlYkNvcmVfREVSSVZFRF9T
T1VSQ0VTX0RJUn0vV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgKICAgICAke1dlYkNvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oCiApCisKK2lm
IChFTkFCTEVfT1BFTkNETSkKKyAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmgpCitl
bmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDE2MDll
OTFiYzBkNC4uMWZhNDQ1ZmZhMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCkBAIC0xODAsNiArMTgwLDI3IEBAIGlmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7TElCR0NSWVBUX0xJ
QlJBUklFU30gLWxncGctZXJyb3IKICAgICApCisKKyAgICBpZiAoRU5BQkxFX09QRU5DRE0pCisg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisg
ICAgICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvb3BlbmNk
bSIKKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xV
REVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICAg
ICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAg
ICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisgICAg
ICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBpZiAoVVNFX0NBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMjRkMjBiNjQ2OGJhLi5kZGY3
YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAt
MTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25zdAog
ICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRhdGEoKTsKIH0KIAorY29uc3QgdWlu
dDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSk7Cit9CisKIFNoYXJlZEJ1
ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoc2l6ZV90IHBvc2l0aW9uKSBj
b25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9uIDwgbV9zaXplKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4ZmU3MDFiMTliLi41MWVlNmQ0ZmMx
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMDYsNiArMTA2
LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkg
YW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgY29uc3QgdWludDhfdCogZGF0
YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0ZXMgYW4gQXJyYXlCdWZmZXIgYW5k
IGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRzIHRvIHRoYXQKICAgICAvLyBBcnJh
eUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1ZmZlcnMgaW50byBhIGZsYXQgYnVm
ZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZjZDY2YWQxZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApA
QCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENsZWFyS2V5LAogICAgICAgICBGYWly
UGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lmIEVOQUJMRShPUEVOQ0RNKQorICAg
ICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2aXJ0dWFsIEltcGxlbWVudGF0aW9u
VHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETU9wZW5DRE1UeXBlcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MGJlMWM0M2RlZDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1P
cGVuQ0RNVHlwZXMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlIDxv
cGVuX2NkbS5oPgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K1dURl9ERUZJTkVfQk9YUFRSX0RFTEVURVIoT3BlbkNETVNlc3Npb24sIG9wZW5jZG1fZGVzdHJ1
Y3Rfc2Vzc2lvbikKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHAKaW5kZXggMWM0NjJmMGI2NTQzLi5kMTlhYzBlN2YxODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTEsMzUgKzkyLDgzIEBAIHN0YXRpYyBTdHJpbmcg
dmVjdG9yVG9IZXhTdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWMpCiAKIH0gLy8gbmFt
ZXNwYWNlIHt9CiAKLVN0cmluZyBLZXk6OmlkQXNTdHJpbmcoKSBjb25zdAorU3RyaW5nIEtleUhh
bmRsZTo6aWRBc1N0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2
ZWN0b3JUb0hleFN0cmluZyhtX2lkKSwgIl0iKTsKIH0KIAotU3RyaW5nIEtleTo6dmFsdWVBc1N0
cmluZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1fdmFsdWUpLCAi
XSIpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rvcjx1aW50OF90Pj4obV92
YWx1ZSkpIHsKKyAgICAgICAgYXV0byBrZXlEYXRhVmFsdWUgPSBXVEY6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleURhdGFWYWx1ZSksICJdIik7CisgICAgfQorCisgICAgcmV0dXJuICJbb3Bh
cXVlIGtleSB2YWx1ZV0iX3M7Cit9CisKK1N0cmluZyBLZXlIYW5kbGU6OmNyZWF0aW9uVGltZUFz
U3RyaW5nKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CisgICAgbV9j
cmVhdGlvblRpbWUuZHVtcChzdHJlYW0pOworICAgIHJldHVybiBzdHJlYW0udG9TdHJpbmcoKTsK
K30KKworYm9vbCBLZXlIYW5kbGU6OnRha2VWYWx1ZUlmRGlmZmVyZW50KEtleUhhbmRsZVZhbHVl
VmFyaWFudCYmIHZhbHVlKQoreworICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAg
IG1fdmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBLZXlIYW5kbGU6Om9wZXJhdG9yPShjb25zdCBL
ZXlIYW5kbGUmIG90aGVyKQoreworICAgIG1faWQgPSBvdGhlci5tX2lkOworICAgIG1fdmFsdWUg
PSBvdGhlci5tX3ZhbHVlOworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9j
cmVhdGlvblRpbWUgPSBvdGhlci5tX2NyZWF0aW9uVGltZTsKK30KKwordm9pZCBLZXlTdG9yZTo6
c2V0TWVyZ2VTdHJhdGVneShNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KQoreworICAgIG1fbWVyZ2VT
dHJhdGVneSA9IHN0cmF0ZWd5OworICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHsKKyAgICBjYXNlIE1l
cmdlU3RyYXRlZ3k6Ok5vT3A6CisgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uID0gbm9P
cE1lcmdlU3RyYXRlZ3k7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVyZ2VTdHJhdGVneTo6
UmVwbGFjZUlmTmV3ZXI6CisgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uID0gcmVwbGFj
ZUlmTmV3ZXJNZXJnZVN0cmF0ZWd5OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCi1i
b29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0Citib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJl
ZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewogICAgICAgICByZXR1cm4g
KnN0b3JlZEtleSA9PSBrZXlJRDsKICAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOwogfQogCiB2b2lk
IEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBtZXJnaW5nICV1
IG5ldyBrZXlzIGludG8gYSBrZXkgc3RvcmUgb2YgJXUga2V5cyIsIG90aGVyLm51bUtleXMoKSwg
bnVtS2V5cygpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKSB7CiAgICAgICAg
IC8vIE5PVEU6IERvIHdlIGNhcmUgdGhhdCB3ZSB3aWxsIG5vdCBhcHBlbmQgYSBrZXkgaWYgaXQg
bWF0Y2hlcyBhIGtleSBJRAogICAgICAgICAvLyBpbiB0aGUga2V5c3RvcmUgYW5kIGhhcyBkaWZm
ZXJlbnQgZGF0YS4gU2hvdWxkIHdlIG92ZXJ3cml0ZT8gV2hpY2ggaXMgIm5ld2VyIj8KICAgICAg
ICAgLy8gRG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgICAg
IGlmIChtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtl
eSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KSA9PSBXVEY6Om5vdEZvdW5kKQorICAg
ICAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7IHJldHVybiAqa2V5
ID09ICpzdG9yZWRLZXk7IH0pOworICAgICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eCA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgaGFwcGVuIHdpdGggREFT
SCBwbGF5ZXJzLCBpdCBzZWVtcyBoYXJtbGVzcyB0byBpZ25vcmUgaXQuCi0gICAgICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBpZ25vcmVkIGEga2V5IHdpdGggdGhlIHNhbWUgSUQg
YW5kIGRpZmZlcmVudCBkYXRhIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyBrZXlzIHdpdGggdGhlIHNhbWUgSUQiKTsKKyAg
ICAgICAgICAgIG1fbWVyZ2VTdHJhdGVneUZ1bmN0aW9uKG1fa2V5c1trZXlXaXRoTWF0Y2hpbmdL
ZXlJREluZGV4XSwga2V5KTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQK
QEAgLTEyOSwxNSArMTc4LDE1IEBAIHZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3Jl
JiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9CiAKLUNETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0CitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykgY29uc3QKIHsKICAgICBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9K
U0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVz
VmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gc3RhdHVzOwog
ICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OmFkZEtleXMo
VmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29sIEtleVN0b3JlOjphZGRLZXlzKFZl
Y3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQogewogICAgIGJvb2wgZGlkS2V5U3Rv
cmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtleSA6IG5ld0tleXMpIHsKQEAgLTE0
NywxNiArMTk2LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+
PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOwogfQogCi1ib29sIEtl
eVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRy
PEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOwot
ICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5V2l0
aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQ
dHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9y
ZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBX
VEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9r
ZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyBy
ZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IGtleVdpdGhNYXRjaGlu
Z0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3JlQ2hhbmdlKQorICAgICAgICAgICAg
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8g
a2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAogICAg
ICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyArMjE5LDcgQEAgYm9vbCBLZXlTdG9y
ZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBh
cyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBhbGwKICAgICAgICAgLy8gcHJhY3Rp
Y2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVtIG9mIDIga2V5cy4KICAgICAgICAg
c3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCi0gICAgICAgICAgICBbXShj
b25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtleT4mIGIpIHsKKyAgICAgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYg
YikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpiOwogICAgICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtMTgzLDcgKzIzNCw3IEBAIHZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9t
KGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVtb3ZlKGtleSk7CiB9CiAKLWJvb2wg
S2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQorYm9vbCBLZXlTdG9yZTo6
cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkpCiB7CiAgICAgYm9vbCBzdG9yZUNo
YW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyNTUsMTggQEAgYm9vbCBLZXlTdG9yZTo6cmVt
b3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsKIH0K
IAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3ZvaWQgS2V5U3RvcmU6OnJlcGxhY2VJZk5ld2VyTWVy
Z2VTdHJhdGVneShSZWZQdHI8S2V5SGFuZGxlPiYgZGVzdGluYXRpb24sIGNvbnN0IFJlZlB0cjxL
ZXlIYW5kbGU+JiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCpkZXN0aW5hdGlvbiA9PSAqb3JpZ2lu
KTsKKyAgICBpZiAoZGVzdGluYXRpb24tPm1fY3JlYXRpb25UaW1lIDwgb3JpZ2luLT5tX2NyZWF0
aW9uVGltZSkKKyAgICAgICAgZGVzdGluYXRpb24gPSBvcmlnaW47Cit9CisKK2NvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+JiBLZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQp
IGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAg
aWYgKCprZXkgPT0ga2V5SUQpCi0gICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFs
c2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSAr
Mjk2LDExIEBAIHZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGlu
c3RhbmNlKQogICAgIG1faW5zdGFuY2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IENETVByb3h5OjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
UmVmUHRyPEtleUhhbmRsZT4gQ0RNUHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtl
eUlEKSBjb25zdAogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwog
ICAgIEFTU0VSVChtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4g
bV9rZXlTdG9yZS5rZXlWYWx1ZShrZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFu
ZGxlKGtleUlEKTsKIH0KIAogdm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBj
b25zdApAQCAtMjYxLDcgKzMxOSw3IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KCkgY29uc3QKICAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQog
Ci1PcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4g
Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29u
c3QKIHsKICAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxs
eSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVj
cnlwdG9ycyBvbmx5IGdldApAQCAtMjgxLDMyICszMzksNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKQogCiAgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1
ZShrZXlJRCk7CisgICAgICAgIFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShr
ZXlJRCk7CisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIH0KICAgICAKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQg
JXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZh
aWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wg
Q0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAK
LWJvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAorYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAg
ICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxl
PiBoYW5kbGUgPSBrZXlIYW5kbGUoa2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFu
ZGxlLnJlbGVhc2VOb25OdWxsKCkpOworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQ+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlE
KSBjb25zdAoreworICAgIGlmIChhdXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRs
ZShrZXlJRCkpCisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1
ZSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkKQEAgLTM2MCw2ICs0MjcsMTggQEAgdm9pZCBDRE1J
bnN0YW5jZVByb3h5Ojp0cmFja1Nlc3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkm
IHNlc3Npb24pCiAgICAgbV9zZXNzaW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBp
bnN0YW5jZSkKKyAgICA6IG1faW5zdGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJv
eHkoKQoreworICAgIGlmICghbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5z
dGFuY2UtPnJlbW92ZVNlc3Npb24oKnRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgKaW5kZXggZjJjM2UzNGVmNTkw
Li42YzJkZTQ5NGU2ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMzQsMzUgKzM0LDYwIEBACiAjaW5jbHVkZSAiQ0RNSW5z
dGFuY2VTZXNzaW9uLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0JveFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3Bl
bkNETVR5cGVzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLZXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3VzaW5nIEtleUlEVHlwZSA9IFZlY3Rvcjx1aW50
OF90PjsKK3VzaW5nIEtleUhhbmRsZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8CisgICAgVmVjdG9y
PHVpbnQ4X3Q+CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgLCBCb3hQdHI8T3BlbkNETVNlc3Np
b24+CisjZW5kaWYKKz47CisKK2NsYXNzIEtleUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxLZXlIYW5kbGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czsKIAotICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVh
dGUoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50
OF90PiYmIGtleVZhbHVlKQorICAgIHN0YXRpYyBSZWZQdHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5
U3RhdHVzIHN0YXR1cywgS2V5SURUeXBlJiYga2V5SUQsIEtleUhhbmRsZVZhbHVlVmFyaWFudCYm
IGtleUhhbmRsZVZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5
KHN0YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEtleUhhbmRsZShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZN
b3ZlKGtleUhhbmRsZVZhbHVlKSkpOwogICAgIH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFz
U2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5k
YXRhKCksIG1faWQuc2l6ZSgpKTsgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUo
KSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgYm9vbCB0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlI
YW5kbGVWYWx1ZVZhcmlhbnQmJik7CisKKyAgICBjb25zdCBLZXlJRFR5cGUmIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2
YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBjb25zdCBXYWxsVGltZSYgY3JlYXRpb25UaW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9jcmVhdGlvblRpbWU7IH0KKyAgICBib29sIGlzU3RhdHVzQ3VycmVu
dGx5VmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdHVzID09IENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUgfHwgbV9zdGF0dXMgPT0gQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQKKyAgICAgICAgICAgIHx8IG1fc3RhdHVz
ID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOworICAg
IH0KIAogICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKKyAgICBTdHJpbmcgY3JlYXRpb25UaW1lQXNTdHJpbmcoKSBjb25zdDsK
KworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEtleUhhbmRsZSYpOworICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBvdGhlcikgeyBBU1NFUlQob3RoZXIpOyAqdGhp
cyA9ICpvdGhlcjsgfQogCiAgICAgLy8gVHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0
aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5IHZhbHVlIGFuZCBzdGF0dXMuCi0gICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiBrMS5t
X2lkID09IGsyLm1faWQ7IH0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAm
aywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlE
OyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlELCBjb25zdCBLZXkgJmspIHsgcmV0dXJuIGsgPT0ga2V5SUQ7IH0KLSAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcjwoY29uc3QgS2V5JiBrMSwgY29uc3QgS2V5JiBrMikKKyAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmazEsIGNvbnN0IEtleUhhbmRsZSAmazIpIHsg
cmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5SGFuZGxlICZrLCBjb25zdCBLZXlJRFR5cGUmIGtleUlEKSB7IHJldHVybiBrLm1f
aWQgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUlEVHlw
ZSYga2V5SUQsIGNvbnN0IEtleUhhbmRsZSAmaykgeyByZXR1cm4gayA9PSBrZXlJRDsgfQorICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXlIYW5kbGUmIGsxLCBjb25zdCBLZXlIYW5k
bGUmIGsyKQogICAgIHsKICAgICAgICAgLy8gS2V5IElEcyBhcmUgY29tcGFyZWQgYXMgZm9sbG93
czogRm9yIGtleSBJRHMgQSBvZiBsZW5ndGggbSBhbmQKICAgICAgICAgLy8gQiBvZiBsZW5ndGgg
biwgYXNzaWduZWQgc3VjaCB0aGF0IG0gPD0gbiwgbGV0IEEgPCBCIGlmIGFuZCBvbmx5CkBAIC04
NCwzMSArMTA5LDM4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbnVtU2Vzc2lvblJlZmVyZW5j
ZXMoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bVNlc3Npb25S
ZWZlcmVuY2VzOyB9CiAgICAgZnJpZW5kIGNsYXNzIEtleVN0b3JlOwogCi0gICAgS2V5KEtleVN0
YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBr
ZXlWYWx1ZSkKLSAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5SUQp
KSwgbV92YWx1ZShXVEZNb3ZlKGtleVZhbHVlKSkgeyB9CisgICAgS2V5SGFuZGxlKEtleVN0YXR1
cyBzdGF0dXMsIEtleUlEVHlwZSYmIGtleUlELCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiBrZXlI
YW5kbGVWYWx1ZSkKKyAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5
SUQpKSwgbV92YWx1ZShXVEZNb3ZlKGtleUhhbmRsZVZhbHVlKSkgeyB9CiAKICAgICBLZXlTdGF0
dXMgbV9zdGF0dXM7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1faWQ7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IG1fdmFsdWU7CisgICAgS2V5SURUeXBlIG1faWQ7CisgICAgS2V5SGFuZGxlVmFsdWVWYXJp
YW50IG1fdmFsdWU7CisgICAgV2FsbFRpbWUgbV9jcmVhdGlvblRpbWUgeyBXYWxsVGltZTo6bm93
KCkgfTsKICAgICB1bnNpZ25lZCBtX251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OwogfTsKIAog
Y2xhc3MgS2V5U3RvcmUgewogcHVibGljOgogICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOworICAgIGVudW0gY2xhc3MgTWVyZ2VT
dHJhdGVneSB7IE5vT3AsIFJlcGxhY2VJZk5ld2VyIH07CisgICAgdXNpbmcgTWVyZ2VTdHJhdGVn
eUZ1bmN0aW9uID0gRnVuY3Rpb248dm9pZChSZWZQdHI8S2V5SGFuZGxlPiYsIGNvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+Jik+OwogCi0gICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0OwotICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90
aGVyKTsKLSAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7
CisgICAgS2V5U3RvcmUoTWVyZ2VTdHJhdGVneSBtZXJnZVN0cmF0ZWd5ID0gTWVyZ2VTdHJhdGVn
eTo6Tm9PcCkgeyBzZXRNZXJnZVN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpOyB9CisKKyAgICBib29s
IGNvbnRhaW5zS2V5SUQoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgdm9pZCBtZXJnZShj
b25zdCBLZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmKTsKICAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1fa2V5cy5jbGVhcigpOyB9Ci0gICAg
Ym9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7Ci0gICAgYm9vbCBhZGQoUmVmUHRy
PEtleT4mJik7Ci0gICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleT4mKTsKKyAgICBib29s
IGFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiYmKTsKKyAgICBib29sIGFkZChSZWZQ
dHI8S2V5SGFuZGxlPiYmKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBSZWZQdHI8S2V5SGFuZGxl
PiYpOwogICAgIGJvb2wgaGFzS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0K
ICAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNpemUoKTsgfQot
ICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3Q7Ci0gICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBc1JlbGVhc2VkKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIGtleUhhbmRsZShjb25zdCBLZXlJ
RFR5cGUmKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgYWxsS2V5c0FzKENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzKSBjb25zdDsKICAgICBLZXlTdGF0dXNWZWN0b3IgY29udmVydFRv
SlNLZXlTdGF0dXNWZWN0b3IoKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2tleXMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBzZXRNZXJnZVN0cmF0ZWd5KE1lcmdl
U3RyYXRlZ3kpOwogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9
CiAgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CkBAIC0x
MjAsNyArMTUyLDEyIEBAIHB1YmxpYzoKICAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBt
X2tleXMucmVuZCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tl
eXM7CisgICAgc3RhdGljIHZvaWQgbm9PcE1lcmdlU3RyYXRlZ3koUmVmUHRyPEtleUhhbmRsZT4m
LCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYpIHsgfQorICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VJ
Zk5ld2VyTWVyZ2VTdHJhdGVneShSZWZQdHI8S2V5SGFuZGxlPiYsIGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+Jik7CisKKyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5czsKKyAgICBN
ZXJnZVN0cmF0ZWd5IG1fbWVyZ2VTdHJhdGVneTsKKyAgICBNZXJnZVN0cmF0ZWd5RnVuY3Rpb24g
bV9tZXJnZVN0cmF0ZWd5RnVuY3Rpb247CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5OwpA
QCAtMTI5LDIxICsxNjYsMzAgQEAgY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKIC8vIGZyb20gYmFj
a2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgogY2xhc3MgQ0RNUHJveHkgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworICAgIHN0YXRp
YyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMgPSA3X3M7CiAKICAgICB2
aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgdXBkYXRlS2V5U3RvcmUo
Y29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKTsKICAgICB2b2lkIHNldEluc3RhbmNlKENETUlu
c3RhbmNlUHJveHkqKTsKKyAgICB2b2lkIHNldE1lcmdlU3RyYXRlZ3koS2V5U3RvcmU6Ok1lcmdl
U3RyYXRlZ3kgc3RyYXRlZ3kpIHsgbV9rZXlTdG9yZS5zZXRNZXJnZVN0cmF0ZWd5KHN0cmF0ZWd5
KTsgfQorCisgICAgdm9pZCBzaHV0ZG93bigpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICB9CiAK
IHByb3RlY3RlZDoKLSAgICBWZWN0b3I8dWludDhfdD4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IHRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29u
c3Q7Ci0gICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRPcldhaXRGb3JLZXkoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgUmVmUHRyPEtleUhhbmRsZT4ga2V5
SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNv
bnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQoY29u
c3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IHRyeVdh
aXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8UmVm
PEtleUhhbmRsZT4+IGdldE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmKSBjb25z
dDsKKyAgICBPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlhbnQ+IGdldE9yV2FpdEZvcktleVZh
bHVlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKSBjb25zdDsKICAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAg
Y29uc3QgQ0RNSW5zdGFuY2VQcm94eSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3Rh
bmNlOyB9CiAKIHByaXZhdGU6CiAgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKQEAg
LTE3OCwxOSArMjI0LDM0IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZl
Y3RvcjxDRE1Qcm94eUZhY3RvcnkqPiYgcmVnaXN0ZXJlZEZhY3RvcmllcygpOwogfTsKIAorY2xh
c3MgQ0RNSW5zdGFuY2VQcm94eTsKKwogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgOiBw
dWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCkgeyBtX2luc3RhbmNlLmNsZWFyKCk7
IH0KKyAgICB2b2lkIGdldFJlbW92ZWRGcm9tSW5zdGFuY2VQcm94eSgpOworCitwcm90ZWN0ZWQ6
CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoQ0RNSW5zdGFuY2VQcm94eSYpOworICAgIGNv
bnN0IFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4mIGNkbUluc3RhbmNlUHJveHkoKSBjb25zdCB7
IHJldHVybiBtX2luc3RhbmNlOyB9CisKK3ByaXZhdGU6CisgICAgV2Vha1B0cjxDRE1JbnN0YW5j
ZVByb3h5PiBtX2luc3RhbmNlOwogfTsKIAogLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Np
b24gbWFuYWdlbWVudCBjb2RlIGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcwogLy8gZnJv
bSAicmVhbCBDRE0iIHN0YXRlIGNoYW5nZXMgdG8gSlMuCi1jbGFzcyBDRE1JbnN0YW5jZVByb3h5
IDogcHVibGljIENETUluc3RhbmNlIHsKK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMg
Q0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVByb3h5PiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ0RNSW5zdGFuY2VQcm94eShjb25zdCBTdHJpbmcmIGtleVN5
c3RlbSkKKyAgICBleHBsaWNpdCBDRE1JbnN0YW5jZVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtLCBLZXlTdG9yZTo6TWVyZ2VTdHJhdGVneSBtZXJnZVN0cmF0ZWd5ID0gS2V5U3RvcmU6Ok1l
cmdlU3RyYXRlZ3k6Ok5vT3ApCiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgICAgICBtX2NkbVByb3h5ID0gQ0RNUHJveHlGYWN0b3J5OjpjcmVhdGVDRE1Qcm94eUZv
cktleVN5c3RlbShrZXlTeXN0ZW0pOwotICAgICAgICBpZiAobV9jZG1Qcm94eSkKKyAgICAgICAg
aWYgKG1fY2RtUHJveHkpIHsKICAgICAgICAgICAgIG1fY2RtUHJveHktPnNldEluc3RhbmNlKHRo
aXMpOworICAgICAgICAgICAgbV9jZG1Qcm94eS0+c2V0TWVyZ2VTdHJhdGVneShtZXJnZVN0cmF0
ZWd5KTsKKyAgICAgICAgfQorICAgICAgICBtX2tleVN0b3JlLnNldE1lcmdlU3RyYXRlZ3kobWVy
Z2VTdHJhdGVneSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRl
ZmF1bHQ7CiAKQEAgLTE5OSw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxL
ZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOwogCiAgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1l
dGhvZHMgLSBtYWluIHRocmVhZCBvbmx5LgotICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBj
b25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAg
Y29uc3QgUmVmUHRyPENETVByb3h5PiYgcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
cktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlw
dG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CiAgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQog
CkBAIC0yMDcsNiArMjY4LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9y
S2V5KCk7CiAgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogCisgICAgdm9pZCByZW1v
dmVTZXNzaW9uKGNvbnN0IENETUluc3RhbmNlU2Vzc2lvblByb3h5JiBzZXNzaW9uKSB7IG1fc2Vz
c2lvbnMucmVtb3ZlKHNlc3Npb24pOyB9CisgICAgdmlydHVhbCB2b2lkIHNodXRkb3duKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOworICAgICAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX3Nlc3Npb25z
KQorICAgICAgICAgICAgc2Vzc2lvbi5zaHV0ZG93bigpOworICAgICAgICBtX3Nlc3Npb25zLmNs
ZWFyKCk7CisgICAgICAgIG1fY2RtUHJveHktPnNodXRkb3duKCk7CisgICAgICAgIG1fY2RtUHJv
eHkgPSBudWxscHRyOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgdHJhY2tTZXNzaW9u
KGNvbnN0IENETUluc3RhbmNlU2Vzc2lvblByb3h5Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcAppbmRleCA2NTMyMmVkOTllOTcuLjBjZjVlNTk0ZTNlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcApAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJl
dHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBw
YXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQorc3RhdGljIE9wdGlv
bmFsPFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBK
U09OOjpPYmplY3QmIHJvb3QpCiB7CiAgICAgLy8gSWYgdGhlICdrZXlzJyBrZXkgaXMgcHJlc2Vu
dCBpbiB0aGUgcm9vdCBvYmplY3QsIHBhcnNlIHRoZSBKU09OIGZ1cnRoZXIKICAgICAvLyBhY2Nv
cmRpbmcgdG8gdGhlIHNwZWNpZmllZCAnbGljZW5zZScgZm9ybWF0LgpAQCAtNzYsNyArNzYsNyBA
QCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0
KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdAogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtl
eXNBcnJheSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPEtleT4+IGRlY29kZWRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVj
b2RlZEtleXM7CiAgICAgYm9vbCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+
YmVnaW4oKSwga2V5c0FycmF5LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0
IGF1dG8mIHZhbHVlKSB7CiAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmpl
Y3Q7CkBAIC05MSwxMSArOTEsMTIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5
Pj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QKICAgICAgICAg
ICAgIGlmICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0
LT5nZXRTdHJpbmcoImsiLCBrZXlWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7
Ci0gICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0
YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0p
KQorICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKKyAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlIYW5kbGVWYWx1ZURhdGE7CisgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0
VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUo
a2V5VmFsdWUsIHsga2V5SGFuZGxlVmFsdWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6Y3JlYXRlKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwg
V1RGTW92ZShrZXlWYWx1ZURhdGEpKSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQo
S2V5SGFuZGxlOjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwg
V1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpA
QCAtNTI0LDcgKzUyNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0
ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgICAgIE9wdGlv
bmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdl
ZCkgewogICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBo
YXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAg
bV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICAgICAg
cGFyZW50SW5zdGFuY2UoKS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAgICAgICAgICAg
Y2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAg
ICAgICAgIH0KIApAQCAtNTM0LDcgKzUzNSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAK
ICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkp
IHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNl
IGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9r
ZXlTdG9yZSk7CisgICAgICAgIHBhcmVudEluc3RhbmNlKCkucmVtb3ZlQWxsS2V5c0Zyb20obV9r
ZXlTdG9yZSk7CiAgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBk
aXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVk
ZWQpOwogICAgICAgICByZXR1cm47CkBAIC01OTIsNyArNTkzLDcgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9u
SWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwg
cmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAv
LyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzUmVsZWFzZWQoKTsKKyAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
ZXNzYWdlOwogICAgIHsKICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRz
IHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CkBA
IC02MjEsNiArNjIyLDEzIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnN0b3Jl
UmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQogewogfQogCitDRE1JbnN0YW5jZUNsZWFy
S2V5JiBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UoKSBjb25zdAor
eworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZVByb3h5KCk7CisgICAgQVNTRVJUKGlu
c3RhbmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VDbGVhcktleSY+KCpp
bnN0YW5jZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4YmYzNjI3
MmFkYjYuLjEwNzkwODYwODBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC05MSw3
ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklk
KGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xhc3MgQ0RNSW5zdGFuY2VDbGVh
cktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5h
bCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZUNs
ZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwpAQCAtMTA4LDcg
KzEwOCw3IEBAIHB1YmxpYzoKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFs
IDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCi0gICAgICAg
IDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsgfQorICAgICAgICA6IENETUluc3RhbmNlU2Vz
c2lvblByb3h5KHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlw
ZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGlu
aXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNl
KGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmLCBMaWNlbnNl
VXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlw
ZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBm
aW5hbDsKQEAgLTExNiw4ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVTZXNzaW9u
RGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFj
ayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcm
KSBmaW5hbDsKIHByaXZhdGU6CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgcGFyZW50SW5zdGFu
Y2UoKSBjb25zdDsKKwogICAgIFN0cmluZyBtX3Nlc3Npb25JRDsKLSAgICBDRE1JbnN0YW5jZUNs
ZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOwogICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDhhYzlhYjMxOGU2Zi4uZjJiMTA3NGM2
MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtNTAsNiArNTAsOSBAQAogCiAj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJXZWJLaXRDbGVhcktleURlY3J5
cHRvckdTdHJlYW1lci5oIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIldlYktpdE9w
ZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
VklERU8pCkBAIC0yNzUsNiArMjc4LDE0IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihPcHRp
b25hbDxWZWN0b3I8U3RyaW5nPj4mJiBvcHRpb25zKQogICAgIHJldHVybiBpc0dTdHJlYW1lcklu
aXRpYWxpemVkOwogfQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9Q
RU5DRE0pCitib29sIGlzT3BlbkNETVJhbmtlZCgpCit7CisgICAgY29uc3QgY2hhciogdmFsdWUg
PSBnX2dldGVudigiV0VCS0lUX0VNRV9SQU5LX1BSSU9SSVRZIik7CisgICAgcmV0dXJuIHZhbHVl
ICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJPcGVuQ0RNIik7Cit9CisjZW5kaWYK
KwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpCiB7
CiAgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyKCkpCkBAIC0yODMsNyArMjk0LDExIEBAIGJv
b2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKQogICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxh
ZywgW10gewogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgICAgIGdzdF9lbGVtZW50
X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAx
MDAsIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworICAgICAgICBnc3RfZWxlbWVudF9y
ZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXkiLCBHU1RfUkFOS19QUklNQVJZICsgMjAw
LCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAg
ICAgICAgdW5zaWduZWQgb3BlbkNETVJhbmsgPSBpc09wZW5DRE1SYW5rZWQoKSA/IDMwMCA6IDEw
MDsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG9wZW5jZG0i
LCBHU1RfUkFOS19QUklNQVJZICsgb3BlbkNETVJhbmssIFdFQktJVF9UWVBFX01FRElBX09QRU5D
RE1fREVDUllQVCk7CisjZW5kaWYKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
QEAgLTM4Miw2ICszOTcsMTMgQEAgUmVmPFNoYXJlZEJ1ZmZlcj4gR3N0TWFwcGVkQnVmZmVyOjpj
cmVhdGVTaGFyZWRCdWZmZXIoKQogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgqdGhp
cyk7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZVZlY3Rvcigp
Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgIHZhbHVlLmFwcGVuZChkYXRhKCks
IHNpemUoKSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCiBib29sIGlzR1N0cmVhbWVyUGx1Z2lu
QXZhaWxhYmxlKGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgR1JlZlB0cjxHc3RQbHVnaW4+IHBs
dWdpbiA9IGFkb3B0R1JlZihnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4oZ3N0X3JlZ2lzdHJ5X2dl
dCgpLCBuYW1lKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggYTFlNTYyNDRiMTdlLi4w
MmEwMmMwNTc3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKQEAgLTczLDYgKzczLDkgQEAg
Ym9vbCBpbml0aWFsaXplR1N0cmVhbWVyKE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiYmID0gV1RG
OjpudWxsb3B0KTsKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxl
bWVudHMoKTsKIHVuc2lnbmVkIGdldEdzdFBsYXlGbGFnKGNvbnN0IGNoYXIqIG5pY2spOwogdWlu
dDY0X3QgdG9Hc3RVbnNpZ25lZDY0VGltZShjb25zdCBNZWRpYVRpbWUmKTsKKyNpZiBFTkFCTEUo
T1BFTkNETSkKK2Jvb2wgaXNPcGVuQ0RNUmFua2VkKCk7CisjZW5kaWYKIAogaW5saW5lIEdzdENs
b2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIHsKQEAg
LTgxLDYgKzg0LDExIEBAIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3Qg
TWVkaWFUaW1lICZtZWRpYVRpbWUpCiAKIGNsYXNzIEdzdE1hcHBlZEJ1ZmZlciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxHc3RNYXBwZWRCdWZmZXI+IHsKIHB1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0QnVmZmVy
PiYgYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVh
dGUoYnVmZmVyLmdldCgpLCBmbGFncyk7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxHc3RN
YXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3Mp
CiAgICAgewogICAgICAgICBHc3RNYXBJbmZvIGluZm87CkBAIC0xMDYsNiArMTE0LDcgQEAgcHVi
bGljOgogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2luZm8uc2l6ZSk7IH0KICAgICBib29sIGlzU2hhcmFibGUoKSBjb25zdCB7IHJldHVybiAh
KG1faW5mby5mbGFncyAmIEdTVF9NQVBfV1JJVEUpOyB9CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4g
Y3JlYXRlU2hhcmVkQnVmZmVyKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNyZWF0ZVZlY3Rvcigp
OwogCiBwcml2YXRlOgogICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
TWFwSW5mbyYmIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IDg3MDFhYTY1NjhkMy4uYjI5MTYzOWQwNGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjE1LDYgKzIxNSwx
MSBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIoKQogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc3Bvc2luZyBwbGF5
ZXIiKTsKICAgICBtX2lzUGxheWVyU2h1dHRpbmdEb3duLnN0b3JlKHRydWUpOwogCisjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisgICAgaWYgKG1fY2RtSW5z
dGFuY2UgJiYgIWdfc3RyY21wMChnX2dldGVudigiV0VCS0lUX0VNRV9SRUxFQVNFX09QRU5DRE1f
V0lUSF9QTEFZRVJfREVTVFJVQ1RJT04iKSwgInllcyIpKQorICAgICAgICBtX2NkbUluc3RhbmNl
LT5zaHV0ZG93bigpOworI2VuZGlmCisKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9hdWRpb1Ry
YWNrcy52YWx1ZXMoKSkKICAgICAgICAgdHJhY2stPmRpc2Nvbm5lY3QoKTsKIApAQCAtMzUxMCw3
ICszNTE1LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0
aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYgaW5pdEQKICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcg
aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0
YS5wYXlsb2FkKCktPnNpemUoKSk7CisgICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0
aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCAlcyBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRh
LnBheWxvYWRDb250YWluZXJUeXBlKCkudXRmOCgpLmRhdGEoKQorICAgICAgICAgICAgLCBpbml0
RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFz
IiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5k
YXRhKCkpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIHdlYWtUaGlzLT5t
X3BsYXllci0+aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENv
bnRhaW5lclR5cGUoKSwgaW5pdERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigp
KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCmlu
ZGV4IDBmOWE2OGQyY2Q2ZC4uMzdlODQ3MDZlMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
RmFjdG9yeUdTdHJlYW1lci5jcHAKQEAgLTMzLDE3ICszMywyOSBAQAogCiAjaW5jbHVkZSAiQ0RN
UHJveHlDbGVhcktleS5oIgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3Bl
bkNETS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDRE1GYWN0b3J5
OjpwbGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3Rvcmll
cykKIHsKICAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRv
bigpKTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0
b3J5T3BlbkNETTo6c2luZ2xldG9uKCkpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxDRE1Qcm94eUZh
Y3RvcnkqPiBDRE1Qcm94eUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoKQogewog
ICAgIFZlY3RvcjxDRE1Qcm94eUZhY3RvcnkqPiBmYWN0b3JpZXM7CisjaWYgRU5BQkxFKE9QRU5D
RE0pCisgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgZmFjdG9y
aWVzLnVuY2hlY2tlZEFwcGVuZCgmQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNl
bHNlCiAgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisjZW5kaWYKICAg
ICBmYWN0b3JpZXMudW5jaGVja2VkQXBwZW5kKCZDRE1Qcm94eUZhY3RvcnlDbGVhcktleTo6c2lu
Z2xldG9uKCkpOwogICAgIHJldHVybiBmYWN0b3JpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RN
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZhOTQ5YjQ3NTJm
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvQ0RNT3BlbkNETS5jcHAKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorI2luY2x1ZGUg
IkNETVJlc3RyaWN0aW9ucy5oIgorI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk1lZGlhS2V5TWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJNZWRpYUtleVN0YXR1cy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmICgh
ZGVmaW5lZChHU1RfRElTQUJMRV9HU1RfREVCVUcpKQorI2luY2x1ZGUgPHd0Zi9NRDUuaD4KK0dT
VF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0
ZWdvcnkpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlw
dERlYnVnQ2F0ZWdvcnkKKyNlbmRpZgorCituYW1lc3BhY2UgeworCit1c2luZyBPcGVuQ0RNS2V5
U3RhdHVzID0gS2V5U3RhdHVzOworCit9CisKK3N0YXRpYyBMaWNlbnNlVHlwZSBvcGVuQ0RNTGlj
ZW5zZVR5cGUoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZSBsaWNlbnNl
VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGxpY2Vuc2VUeXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpUZW1wb3Jhcnk6CisgICAgICAgIHJldHVy
biBUZW1wb3Jhcnk7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vu
c2VUeXBlOjpQZXJzaXN0ZW50VXNhZ2VSZWNvcmQ6CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50
VXNhZ2VSZWNvcmQ7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vu
c2VUeXBlOjpQZXJzaXN0ZW50TGljZW5zZToKKyAgICAgICAgcmV0dXJuIFBlcnNpc3RlbnRMaWNl
bnNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gVGVtcG9yYXJ5OworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgKCFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykpCitTdHJpbmcgaW5pdERhdGFNRDUo
Y29uc3QgSW5pdERhdGEmIGluaXREYXRhKQoreworICAgIFdURjo6TUQ1IG1kNTsKKyAgICBtZDUu
YWRkQnl0ZXMoaW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBpbml0RGF0YS5w
YXlsb2FkKCktPnNpemUoKSk7CisKKyAgICBXVEY6Ok1ENTo6RGlnZXN0IGRpZ2VzdDsKKyAgICBt
ZDUuY2hlY2tzdW0oZGlnZXN0KTsKKworICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVuY29kZSgm
ZGlnZXN0WzBdLCBXVEY6Ok1ENTo6aGFzaFNpemUpOworfQorI2VuZGlmCisKK3N0YXRpYyBDRE1J
bnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZSBzZXNzaW9uTG9hZEZhaWx1cmVGcm9t
T3BlbkNETShjb25zdCBTdHJpbmcmIGxvYWRTdGF0dXMpCit7CisgICAgaWYgKGxvYWRTdGF0dXMg
PT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9h
ZEZhaWx1cmU6Ok5vbmU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlNlc3Npb25Ob3RGb3VuZCIp
CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6
Tm9TZXNzaW9uRGF0YTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiTWlzbWF0Y2hlZFNlc3Npb25U
eXBlIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWls
dXJlOjpNaXNtYXRjaGVkU2Vzc2lvblR5cGU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlF1b3Rh
RXhjZWVkZWQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9h
ZEZhaWx1cmU6OlF1b3RhRXhjZWVkZWQ7CisgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6
U2Vzc2lvbkxvYWRGYWlsdXJlOjpPdGhlcjsKK30KKworc3RhdGljIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICAv
LyBGYWlsIG9uIGxhcmdlIGJ1ZmZlcnMgd2hvc2Ugc2l6ZSBkb2Vzbid0IGZpdCBpbnRvIGEgMzIt
Yml0IHVuc2lnbmVkIGludGVnZXIuCisgICAgc2l6ZV90IHNpemUgPSBidWZmZXIuc2l6ZSgpOwor
ICAgIGlmIChzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMg
YXMgSlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KKyAgICBTdHJpbmcg
anNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OworICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2Jq
ZWN0OworICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkgfHwgIXZh
bHVlLT5hc09iamVjdChvYmplY3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK0NETUZhY3RvcnlPcGVuQ0RNJiBDRE1GYWN0b3J5T3BlbkNETTo6
c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RNRmFjdG9yeU9wZW5D
RE0+IHNfZmFjdG9yeTsKKyAgICByZXR1cm4gc19mYWN0b3J5OworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8Q0RNUHJpdmF0ZT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETShjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKSk7
CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q0RNUHJpdmF0ZU9wZW5DRE0+KGtleVN5c3RlbSk7Cit9
CisKK1JlZlB0cjxDRE1Qcm94eT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETVByb3h5KGNv
bnN0IFN0cmluZyYga2V5U3lzdGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0c0tleVN5c3RlbShr
ZXlTeXN0ZW0pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5T3BlbkNETShrZXlT
eXN0ZW0pKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3RvcnlPcGVuQ0RNOjpz
dXBwb3J0ZWRLZXlTeXN0ZW1zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVN5c3RlbXM7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc3RkOjpzdHJpbmcg
ZW1wdHlTdHJpbmc7CisgICAgICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwgMCBtZWFucyBzdXBw
b3J0ZWQsIGhlbmNlIHNvbWV0aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0ZWQuCisgICAgICAg
IGlmICghb3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OnNf
V2lkZXZpbmVLZXlTeXN0ZW0sIGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAgICAgICAgICAgc3Vw
cG9ydGVkS2V5U3lzdGVtcy5hcHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX1dpZGV2aW5l
S2V5U3lzdGVtKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBwb3J0ZWRLZXlTeXN0
ZW1zLmlzRW1wdHkoKSAmJiBpc09wZW5DRE1SYW5rZWQoKSkKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRF9XSVRIX01FU1NBR0UoIk5vIGtleSBzeXN0ZW1zIHN1cHBvcnRlZCBvbiBPcGVu
Q0RNIGFuZCBPcGVuQ0RNIGlzIHByZWZlcnJlZC4gSXMgVGh1bmRlciBydW5uaW5nPyBBcmUgdGhl
IHBsdWdpbnMgYnVpbHQ/Iik7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXR1cm4gc3VwcG9ydGVk
S2V5U3lzdGVtczsKK30KKworYm9vbCBDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydHNLZXlTeXN0
ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCit7CisgICAgcmV0dXJuIENETUZhY3RvcnlPcGVu
Q0RNOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRLZXlTeXN0ZW1zKCkuY29udGFpbnMoa2V5U3lzdGVt
KTsKK30KKworVmVjdG9yPEF0b21TdHJpbmc+IENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJ
bml0RGF0YVR5cGVzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZs
YWc7CisgICAgc3RhdGljIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVz
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIHN1cHBvcnRlZElu
aXREYXRhVHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgc3VwcG9ydGVk
SW5pdERhdGFUeXBlcy51bmNoZWNrZWRBcHBlbmQoQXRvbVN0cmluZygia2V5aWRzIikpOworICAg
ICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5nKCJj
ZW5jIikpOworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChB
dG9tU3RyaW5nKCJ3ZWJtIikpOworICAgIH0pOworICAgIHJldHVybiBzdXBwb3J0ZWRJbml0RGF0
YVR5cGVzOworfQorCitib29sIENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRp
b24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikgY29uc3QK
K3sKKyAgICBmb3IgKGF1dG8mIGF1ZGlvQ2FwYWJpbGl0eSA6IGNvbmZpZ3VyYXRpb24uYXVkaW9D
YXBhYmlsaXRpZXMpIHsKKyAgICAgICAgaWYgKG9wZW5jZG1faXNfdHlwZV9zdXBwb3J0ZWQobV9r
ZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSwgYXVkaW9DYXBhYmlsaXR5LmNvbnRlbnRUeXBlLnV0Zjgo
KS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIHZpZGVvQ2FwYWJpbGl0eSA6IGNvbmZpZ3VyYXRpb24udmlkZW9DYXBhYmlsaXRpZXMpIHsK
KyAgICAgICAgaWYgKG9wZW5jZG1faXNfdHlwZV9zdXBwb3J0ZWQobV9rZXlTeXN0ZW0udXRmOCgp
LmRhdGEoKSwgdmlkZW9DYXBhYmlsaXR5LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVj
dG9yPEF0b21TdHJpbmc+IENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRSb2J1c3RuZXNzZXMo
KSBjb25zdAoreworICAgIHJldHVybiB7IGVtcHR5QXRvbSgpIH07Cit9CisKK0NETVJlcXVpcmVt
ZW50IENETVByaXZhdGVPcGVuQ0RNOjpkaXN0aW5jdGl2ZUlkZW50aWZpZXJzUmVxdWlyZW1lbnQo
Y29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENETVJlcXVpcmVtZW50OjpPcHRpb25hbDsKK30KKworQ0RN
UmVxdWlyZW1lbnQgQ0RNUHJpdmF0ZU9wZW5DRE06OnBlcnNpc3RlbnRTdGF0ZVJlcXVpcmVtZW50
KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMm
KSBjb25zdAoreworICAgIHJldHVybiBDRE1SZXF1aXJlbWVudDo6T3B0aW9uYWw7Cit9CisKK2Jv
b2wgQ0RNUHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZlSWRlbnRpZmllcnNBcmVVbmlxdWVQZXJP
cmlnaW5BbmRDbGVhcmFibGUoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8Q0RNSW5zdGFuY2U+IENETVByaXZh
dGVPcGVuQ0RNOjpjcmVhdGVJbnN0YW5jZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
RE1JbnN0YW5jZU9wZW5DRE0obV9rZXlTeXN0ZW0pKTsKK30KKwordm9pZCBDRE1Qcml2YXRlT3Bl
bkNETTo6bG9hZEFuZEluaXRpYWxpemUoKQoreworICAgIC8vIE5vLW9wLgorfQorCitib29sIENE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcygpIGNvbnN0Cit7Cisg
ICAgLy8gU2VydmVyIGNlcnRpZmljYXRlcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2Vzc2lvbnMoKSBj
b25zdAoreworICAgIC8vIFNlc3Npb25zIGFyZSBzdXBwb3J0ZWQuCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRv
bVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBjb25z
dAoreworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBvYmpl
Y3QgaW4ga2V5aWRzIGNhc2UuCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGluaXREYXRhVHlwZSwgImtleWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1ZmZl
ciBhcyBDRU5DIGluaXREYXRhLiBGSVhNRTogVmFsaWRhdGUgaXQgaXMgYWN0dWFsbHkgQ0VOQy4K
KyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAiY2Vu
YyIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1ZmZlciBhcyBXZWJNIGluaXREYXRhLgorICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJ3ZWJtIikgJiYg
IWluaXREYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVPcGVuQ0RNOjpzYW5p
dGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHJlc3BvbnNlLmNvcHkoKTsKK30KKworT3B0aW9uYWw8U3RyaW5nPiBDRE1Qcml2YXRl
T3BlbkNETTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNlc3Npb25JZDsKK30KKworQ0RNSW5zdGFuY2VPcGVuQ0RNOjpDRE1J
bnN0YW5jZU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisgICAgOiBDRE1JbnN0YW5j
ZVByb3h5KGtleVN5c3RlbSwgS2V5U3RvcmU6Ok1lcmdlU3RyYXRlZ3k6OlJlcGxhY2VJZk5ld2Vy
KSwgbV9vcGVuQ0RNU3lzdGVtKG9wZW5jZG1fY3JlYXRlX3N5c3RlbShrZXlTeXN0ZW0udXRmOCgp
LmRhdGEoKSkpCisgICAgLCBtX2tleVN5c3RlbShrZXlTeXN0ZW0pCit7Cit9CisKK3ZvaWQgQ0RN
SW5zdGFuY2VPcGVuQ0RNOjppbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5
U3lzdGVtQ29uZmlndXJhdGlvbiYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQ
ZXJzaXN0ZW50U3RhdGUKKyAgICAsIFN1Y2Nlc3NDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAg
IGNhbGxiYWNrKFN1Y2NlZWRlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRT
ZXJ2ZXJDZXJ0aWZpY2F0ZShSZWY8U2hhcmVkQnVmZmVyPiYmIGNlcnRpZmljYXRlLCAgU3VjY2Vz
c0NhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soIW9wZW5jZG1fc3lzdGVtX3Nl
dF9zZXJ2ZXJfY2VydGlmaWNhdGUobV9vcGVuQ0RNU3lzdGVtLmdldCgpLCBjb25zdF9jYXN0PHVp
bnQ4X3QqPihjZXJ0aWZpY2F0ZS0+ZGF0YUFzVUludDhQdHIoKSksIGNlcnRpZmljYXRlLT5zaXpl
KCkpCisgICAgICAgID8gU3VjY2VlZGVkIDogRmFpbGVkKTsKK30KKwordm9pZCBDRE1JbnN0YW5j
ZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNKENETUluc3RhbmNlT3BlbkNETSYgaW5zdGFuY2UpCisgICAgOiBDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eShpbnN0YW5jZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3MucHJvY2Vzc19jaGFsbGVuZ2VfY2Fs
bGJhY2sgPSBbXShPcGVuQ0RNU2Vzc2lvbiosIHZvaWQqIHVzZXJEYXRhLCBjb25zdCBjaGFyW10s
IGNvbnN0IHVpbnQ4X3QgY2hhbGxlbmdlW10KKyAgICAgICAgLCBjb25zdCB1aW50MTZfdCBjaGFs
bGVuZ2VMZW5ndGgpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBu
b3RpZmljYXRpb24iKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VX
ZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkp
LCBidWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShjaGFsbGVuZ2UKKyAgICAg
ICAgICAgICwgY2hhbGxlbmdlTGVuZ3RoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICgh
c2Vzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZXNzaW9uLT5j
aGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsK
KyAgICB9OworICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3Mua2V5X3VwZGF0ZV9jYWxsYmFj
ayA9IFtdKE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IHVpbnQ4X3Qga2V5
SUREYXRhW10sIGNvbnN0IHVpbnQ4X3Qga2V5SURMZW5ndGgpIHsKKyAgICAgICAgR1NUX0RFQlVH
KCJHb3QgJ2tleSB1cGRhdGVkJyBPQ0RNIG5vdGlmaWNhdGlvbiIpOworICAgICAgICBLZXlJRFR5
cGUga2V5SUQ7CisgICAgICAgIGtleUlELmFwcGVuZChrZXlJRERhdGEsIGtleUlETGVuZ3RoKTsK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19j
YXN0PENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBrZXlJRCA9IFdURk1v
dmUoa2V5SUQpXSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmtleVVwZGF0ZWRDYWxsYmFj
ayhXVEZNb3ZlKGtleUlEKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vz
c2lvbkNhbGxiYWNrcy5rZXlzX3VwZGF0ZWRfY2FsbGJhY2sgPSBbXShjb25zdCBPcGVuQ0RNU2Vz
c2lvbiosIHZvaWQqIHVzZXJEYXRhKSB7CisgICAgICAgIEdTVF9ERUJVRygiR290ICdhbGwga2V5
cyB1cGRhdGVkJyBPQ0RNIG5vdGlmaWNhdGlvbiIpOworICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtzZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETSo+KHVzZXJEYXRhKSldKCkgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmtleXNVcGRhdGVEb25lQ2Fs
bGJhY2soKTsKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJh
Y2tzLmVycm9yX21lc3NhZ2VfY2FsbGJhY2sgPSBbXShPcGVuQ0RNU2Vzc2lvbiosIHZvaWQqIHVz
ZXJEYXRhLCBjb25zdCBjaGFyIG1lc3NhZ2VbXSkgeworICAgICAgICBHU1RfRVJST1IoIkdvdCAn
ZXJyb3InIE9DRE0gbm90aWZpY2F0aW9uOiAlcyIsIG1lc3NhZ2UpOworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFtzZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETSo+KHVzZXJEYXRhKSksIGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG1lc3NhZ2UKKyAgICAgICAgICAgICwgc3RybGVuKG1lc3NhZ2UpKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBzZXNzaW9uLT5lcnJvckNhbGxiYWNrKFdURk1vdmUoYnVmZmVyKSk7Cisg
ICAgICAgIH0pOworICAgIH07Cit9CisKK1JlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUlu
c3RhbmNlT3BlbkNETTo6Y3JlYXRlU2Vzc2lvbigpCit7CisgICAgUmVmUHRyPENETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE0+IG5ld1Nlc3Npb24gPSBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNz
aW9uT3BlbkNETSgqdGhpcykpOworICAgIEFTU0VSVChuZXdTZXNzaW9uKTsKKyAgICB0cmFja1Nl
c3Npb24oKm5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdTZXNzaW9uOworfQorCitzdGF0aWMg
c3RkOjpwYWlyPFJlZlB0cjxTaGFyZWRCdWZmZXI+LCBPcHRpb25hbDxXZWJDb3JlOjpNZWRpYUtl
eU1lc3NhZ2VUeXBlPj4gcGFyc2VSZXNwb25zZU1lc3NhZ2UoY29uc3QgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4mIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCksIFdURjo6bnVsbG9wdCk7CisKKyAgICBP
cHRpb25hbDxXZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlPiBtZXNzYWdlVHlwZTsKKyAgICBT
dHJpbmcgbWVzc2FnZShTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUoKSkpOwor
ICAgIHNpemVfdCB0eXBlUG9zaXRpb24gPSBtZXNzYWdlLmZpbmQoIjpUeXBlOiIpOworICAgIFN0
cmluZyByZXF1ZXN0VHlwZShtZXNzYWdlLmNoYXJhY3RlcnM4KCksIHR5cGVQb3NpdGlvbiAhPSBu
b3RGb3VuZCA/IHR5cGVQb3NpdGlvbiA6IDApOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDB1Owor
ICAgIGlmICghcmVxdWVzdFR5cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxlbmd0aCgpICE9
IG1lc3NhZ2UubGVuZ3RoKCkpCisgICAgICAgIG9mZnNldCA9IHR5cGVQb3NpdGlvbiArIDY7CisK
KyAgICBpZiAocmVxdWVzdFR5cGUubGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgbWVzc2FnZVR5cGUg
PSBtYWtlT3B0aW9uYWwoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4o
cmVxdWVzdFR5cGUudG9JbnQoKSkpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2UuY2hhcmFjdGVyczgoKSArIG9mZnNldCwgbWVzc2FnZS5z
aXplSW5CeXRlcygpIC0gb2Zmc2V0KSwgbWVzc2FnZVR5cGUpOworfQorCit2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbk9wZW5DRE06OmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFJlZlB0cjxTaGFy
ZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIGF1dG8gbWVzc2FnZUFuZFJlcXVlc3RUeXBlID0g
cGFyc2VSZXNwb25zZU1lc3NhZ2UoYnVmZmVyKTsKKworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxl
ZCBhcyBhIHJlc3VsdCBvZiBlLmcuIHJlcXVlc3RMaWNlbnNlKCkgYnV0IHVwZGF0ZSgpIG9yIHJl
bW92ZSgpIGFzIHdlbGwuCisgICAgLy8gVGhpcyBjYWxsZWQgbm90IGFzIGEgcmVzcG9uc2UgdG8g
QVBJIGNhbGwgaXMgYWxzbyBwb3NzaWJsZS4KKyAgICBpZiAoIW1fY2hhbGxlbmdlQ2FsbGJhY2tz
LmlzRW1wdHkoKSkgeworICAgICAgICBtX21lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2VBbmRSZXF1
ZXN0VHlwZS5maXJzdCk7CisgICAgICAgIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiA9IG1lc3Nh
Z2VBbmRSZXF1ZXN0VHlwZS5zZWNvbmQgPT0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpNZXNzYWdlVHlw
ZTo6SW5kaXZpZHVhbGl6YXRpb25SZXF1ZXN0OworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYg
Y2hhbGxlbmdlQ2FsbGJhY2sgOiBtX2NoYWxsZW5nZUNhbGxiYWNrcykKKyAgICAgICAgICAgIGNo
YWxsZW5nZUNhbGxiYWNrKCk7CisgICAgICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7
CisgICAgfSBlbHNlIGlmICghbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcykKKyAgICAgICAgICAgIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sodHJ1ZSwg
bWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LmNvcHlSZWYoKSk7CisgICAgICAgIG1fc2Vzc2lv
bkNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9j
bGllbnQgJiYgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLnNlY29uZC5oYXNWYWx1ZSgpKQorICAgICAg
ICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlKHN0YXRpY19jYXN0PENETU1lc3NhZ2VUeXBlPiht
ZXNzYWdlQW5kUmVxdWVzdFR5cGUuc2Vjb25kLnZhbHVlKCkpLCBtZXNzYWdlQW5kUmVxdWVzdFR5
cGUuZmlyc3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NU
X0RJU0FCTEVfR1NUX0RFQlVHKSB8fCAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29u
c3QgY2hhciogdG9TdHJpbmcoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQor
eworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1czo6VXNhYmxlOgorICAgICAgICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBp
cmVkIjsKKyAgICBjYXNlIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoK
KyAgICAgICAgcmV0dXJuICJSZWxlYXNlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0
cmljdGVkIjsKKyAgICBjYXNlIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXRE
b3duc2NhbGVkOgorICAgICAgICByZXR1cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2Ug
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJl
dHVybiAiU3RhdHVzUGVuZGluZyI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6SW50ZXJuYWxFcnJvcjoKKyAgICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
ICJ1bmtub3duIjsKKyAgICB9Cit9CisjZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXMgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYg
a2V5SUQpIGNvbnN0Cit7CisgICAgT3BlbkNETUtleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24g
JiYgIW1fc2Vzc2lvbklELmlzRW1wdHkoKSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNz
aW9uLmdldCgpLCBrZXlJRC5kYXRhKCksIGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOwor
CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJu
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVk
OgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7
CisgICAgY2FzZSBSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpSZWxlYXNlZDsKKyAgICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAg
IHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsK
KyAgICBjYXNlIE91dHB1dERvd25zY2FsZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6T3V0cHV0RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRp
bmc6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVz
UGVuZGluZzsKKyAgICBjYXNlIEludGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzOjpJbnRlcm5hbEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQp
Cit7CisgICAgR1NUX01FTURVTVAoInVwZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5z
aXplKCkpOworCisgICAgYXV0byBrZXlTdGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9E
RUJVRygidXBkYXRlZCB3aXRoIHdpdGgga2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1
cykpOworICAgIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5
SGFuZGxlOjpjcmVhdGUoa2V5U3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgQm94UHRyPE9wZW5DRE1T
ZXNzaW9uPigpKSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5c1Vw
ZGF0ZURvbmVDYWxsYmFjaygpCit7CisgICAgR1NUX0RFQlVHKCJ1cGRhdGUgZG9uZSIpOworICAg
IGlmIChtX2RvZXNLZXlTdG9yZU5lZWRNZXJnaW5nKSB7CisgICAgICAgIG1fZG9lc0tleVN0b3Jl
TmVlZE1lcmdpbmcgPSBmYWxzZTsKKyAgICAgICAgYXV0byBpbnN0YW5jZSA9IGNkbUluc3RhbmNl
T3BlbkNETSgpOworICAgICAgICBpZiAoaW5zdGFuY2UpCisgICAgICAgICAgICBpbnN0YW5jZS0+
bWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICB9CisKKyAgICBpZiAobV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcy5pc0VtcHR5KCkgJiYgbV9jbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQt
PnVwZGF0ZUtleVN0YXR1c2VzKG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3Io
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25DaGFu
Z2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAgICAgICBzZXNzaW9u
Q2hhbmdlZENhbGxiYWNrKHRydWUsIG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxs
YmFja3MuY2xlYXIoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjplcnJv
ckNhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgbWVzc2FnZSkKK3sKKyAgICBHU1RfRVJS
T1IoIkNETSBlcnJvciIpOworICAgIEdTVF9NRU1EVU1QKCJlcnJvciBkdW1wIiwgbWVzc2FnZS0+
ZGF0YUFzVUludDhQdHIoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFsbGVuZ2VDYWxsYmFja3MpCisgICAgICAgIGNoYWxs
ZW5nZUNhbGxiYWNrKCk7CisgICAgbV9jaGFsbGVuZ2VDYWxsYmFja3MuY2xlYXIoKTsKKworICAg
IGZvciAoYXV0byYgc2Vzc2lvbkNoYW5nZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxs
YmFja3MpCisgICAgICAgIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2soZmFsc2UsIG1lc3NhZ2UuY29w
eVJlZigpKTsKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUg
bGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBpbml0RGF0YVNoYXJlZEJ1ZmZlcgorICAgICwgTGljZW5zZUNhbGxiYWNrJiYgY2Fs
bGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBV
VUlEIG9yIHN5c3RlbSBJRD8KKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VPcGVuQ0RN
KCk7CisgICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICBtX2luaXREYXRhID0gSW5pdERhdGEoaW5z
dGFuY2UtPmtleVN5c3RlbSgpLCBXVEZNb3ZlKGluaXREYXRhU2hhcmVkQnVmZmVyKSk7CisKKyAg
ICBHU1RfVFJBQ0UoIkdvaW5nIHRvIHJlcXVlc3QgYSBuZXcgc2Vzc2lvbiBpZCwgaW5pdCBkYXRh
IHNpemUgJWx1IGFuZCBNRDUgJXMiLCBtX2luaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpLCBpbml0
RGF0YU1ENShtX2luaXREYXRhKS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfTUVNRFVNUCgiaW5p
dCBkYXRhIiwgbV9pbml0RGF0YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIG1faW5pdERh
dGEucGF5bG9hZCgpLT5zaXplKCkpOworCisgICAgT3BlbkNETVNlc3Npb24qIHNlc3Npb24gPSBu
dWxscHRyOworICAgIG9wZW5jZG1fY29uc3RydWN0X3Nlc3Npb24oJmluc3RhbmNlLT5vcGVuQ0RN
U3lzdGVtKCksIG9wZW5DRE1MaWNlbnNlVHlwZShsaWNlbnNlVHlwZSksIGluaXREYXRhVHlwZS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpCisgICAgICAgICwgbV9pbml0RGF0YS5wYXlsb2FkKCktPmRh
dGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCksIG51bGxwdHIsIDAs
ICZtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLCB0aGlzLCAmc2Vzc2lvbik7CisgICAgaWYgKCFz
ZXNzaW9uKSB7CisgICAgICAgIEdTVF9FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBzZXNzaW9uIik7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXls
b2FkKCk7CisgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwg
ZmFsc2UsIEZhaWxlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zZXNzaW9uLnJl
c2V0KHNlc3Npb24pOworICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpmcm9tVVRGOChvcGVuY2Rt
X3Nlc3Npb25faWQobV9zZXNzaW9uLmdldCgpKSk7CisKKyAgICBhdXRvIGdlbmVyYXRlQ2hhbGxl
bmdlID0gW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGlmIChtX3Nlc3Np
b25JRC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigiY291bGQgbm90IGNyZWF0
ZSBzZXNzaW9uIGlkIik7CisgICAgICAgICAgICBjYWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCB7IH0sIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJjcmVhdGVkIGludmFsaWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgbV9zZXNz
aW9uSUQsIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgZ2V0UmVtb3ZlZEZyb21JbnN0YW5j
ZVByb3h5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBHU1Rf
REVCVUcoImNyZWF0ZWQgdmFsaWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBjYWxsYmFjayhtX21lc3NhZ2UuY29weVJlZigpLnJlbGVhc2VOb25OdWxs
KCksIG1fc2Vzc2lvbklELCBtX25lZWRzSW5kaXZpZHVhbGl6YXRpb24sIFN1Y2NlZWRlZCk7Cisg
ICAgfTsKKworICAgIGlmIChtX3Nlc3Npb25JRC5pc0VtcHR5KCkgfHwgaXNWYWxpZCgpKQorICAg
ICAgICBnZW5lcmF0ZUNoYWxsZW5nZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFsbGVuZ2VD
YWxsYmFja3MuYXBwZW5kKFdURk1vdmUoZ2VuZXJhdGVDaGFsbGVuZ2UpKTsKK30KKwordm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzZXNzaW9uRmFpbHVyZSgpCit7CisgICAgZm9yIChh
dXRvJiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykK
KyAgICAgICAgc2Vzc2lvbkNoYW5nZWRDYWxsYmFjayhmYWxzZSwgbnVsbHB0cik7CisgICAgbV9z
ZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vz
c2lvbk9wZW5DRE06OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIExpY2Vu
c2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJh
Y2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgc2Vzc2lvbklE
ID09IG1fc2Vzc2lvbklEKTsKKworICAgIEdTVF9UUkFDRSgiVXBkYXRpbmcgc2Vzc2lvbiAlcyIs
IHNlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
a3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1Y2Nl
c3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
IGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2tleVN0b3JlLmlzRW1w
dHkoKSk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIG1fa2V5U3RvcmUuY29udmVy
dFRvSlNLZXlTdGF0dXNWZWN0b3IoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nl
c3NWYWx1ZTo6U3VjY2VlZGVkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFVzaW5nIEpTT04gcmVwb25zZSBtZXNzYWdlcyBpcyBtdWNoIGNsZWFuZXIg
dGhhbiB1c2luZyBzdHJpbmcgcHJlZml4ZXMsIEkgYmVsaWV2ZSB0aGVyZQorICAgICAgICAgICAg
ICAgIC8vIHdpbGwgZXZlbiBiZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3BlYyB3aGVyZSBub3QgaGF2
aW5nIHN0cnVjdHVyZWQgZGF0YSB3aWxsIGJlIGJhZC4KKyAgICAgICAgICAgICAgICBhdXRvIG1l
c3NhZ2VBbmRSZXF1ZXN0VHlwZSA9IHBhcnNlUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdCkgeworICAgICAgICAg
ICAgICAgICAgICBHU1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZUFu
ZFJlcXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBHU1RfTUVN
RFVNUCgibWVzc2FnZSIsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC0+ZGF0YUFzVUludDhQ
dHIoKSwgbWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LT5zaXplKCkpOworICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIHN0ZDo6
bWFrZV9wYWlyKG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5zZWNvbmQudmFsdWVPcihNZWRpYUtleU1l
c3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICwgbWVz
c2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0LnJlbGVhc2VOb25OdWxsKCkpLCBTdWNjZXNzVmFsdWU6
OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgR1NUX0VSUk9SKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCIs
IGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNj
ZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJ1cGRhdGUgbGljZW5zZSByZXBv
cnRlZCBlcnJvciBzdGF0ZSIpOworICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsK
KyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlz
RW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fdXBkYXRlKG1fc2Vzc2lvbi5nZXQoKSwgcmVzcG9u
c2UtPmRhdGFBc1VJbnQ4UHRyKCksIHJlc3BvbnNlLT5zaXplKCkpKQorICAgICAgICBzZXNzaW9u
RmFpbHVyZSgpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmxvYWRTZXNz
aW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiwg
TG9hZFNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vz
c2lvbklELCBzZXNzaW9uSUQgPT0gbV9zZXNzaW9uSUQpOworCisgICAgbV9zZXNzaW9uQ2hhbmdl
ZENhbGxiYWNrcy5hcHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJv
b2wgc3VjY2VzcywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpIG11dGFibGUgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9y
ZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNpbmcgSlNPTiBy
ZXBvbnNlIG1lc3NhZ2VzIGlzIG11Y2ggY2xlYW5lciB0aGFuIHVzaW5nIHN0cmluZyBwcmVmaXhl
cywgSSBiZWxpZXZlIHRoZXJlCisgICAgICAgICAgICAgICAgLy8gd2lsbCBldmVuIGJlIG90aGVy
IHBhcnRzIG9mIHRoZSBzcGVjIHdoZXJlIG5vdCBoYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpbGwg
YmUgYmFkLgorICAgICAgICAgICAgICAgIGF1dG8gbWVzc2FnZUFuZFJlcXVlc3RUeXBlID0gcGFy
c2VSZXNwb25zZU1lc3NhZ2UoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZUFu
ZFJlcXVlc3RUeXBlLmZpcnN0KSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiZ290
IG1lc3NhZ2Ugb2Ygc2l6ZSAlbHUiLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3QtPnNpemUo
KSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9NRU1EVU1QKCJtZXNzYWdlIiwgbWVzc2FnZUFu
ZFJlcXVlc3RUeXBlLmZpcnN0LT5kYXRhQXNVSW50OFB0cigpLCBtZXNzYWdlQW5kUmVxdWVzdFR5
cGUuZmlyc3QtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0LCBzdGQ6Om1ha2VfcGFpcihtZXNzYWdlQW5kUmVxdWVzdFR5cGUu
c2Vjb25kLnZhbHVlT3IoTWVkaWFLZXlNZXNzYWdlVHlwZTo6TGljZW5zZVJlcXVlc3QpCisgICAg
ICAgICAgICAgICAgICAgICAgICAsIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJzdC5yZWxlYXNl
Tm9uTnVsbCgpKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6
Tm9uZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NU
X0VSUk9SKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIGJ1ZmZl
ciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFp
bGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckRhdGEg
PSBidWZmZXIgPyBidWZmZXItPmRhdGEoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIGJ1
ZmZlclNpemUgPSBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDA7CisgICAgICAgICAgICBTdHJp
bmcgcmVzcG9uc2UoU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KGJ1ZmZlckRhdGEpLCBidWZmZXJTaXplKSk7CisgICAgICAgICAg
ICBHU1RfRVJST1IoInNlc3Npb24gJXMgbm90IGxvYWRlZCwgcmVhc29uICVzIiwgbV9zZXNzaW9u
SUQudXRmOCgpLmRhdGEoKSwgcmVzcG9uc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBj
YWxsYmFjayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNz
VmFsdWU6OkZhaWxlZCwgc2Vzc2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0ocmVzcG9uc2UpKTsK
KyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlz
RW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fbG9hZChtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAg
ICBzZXNzaW9uRmFpbHVyZSgpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06
OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgQ2xvc2VTZXNzaW9uQ2FsbGJh
Y2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9u
SUQgPT0gc2Vzc2lvbklEKTsKKworICAgIGlmIChtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlz
RW1wdHkoKSkKKyAgICAgICAgb3BlbmNkbV9zZXNzaW9uX2Nsb3NlKG1fc2Vzc2lvbi5nZXQoKSk7
CisKKyAgICBnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJveHkoKTsKKworICAgIGNhbGxiYWNrKCk7
Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEo
Y29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNh
bGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUX1VOVVNFRChzZXNzaW9uSUQsIG1fc2Vz
c2lvbklEID09IHNlc3Npb25JRCk7CisKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFw
cGVuZChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhN
ZWRpYUtleVN0YXR1czo6UmVsZWFzZWQpLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3Vj
Y2VlZGVkKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gbWVzc2Fn
ZUFuZFJlcXVlc3RUeXBlID0gcGFyc2VSZXNwb25zZU1lc3NhZ2UoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWVzc2FnZUFuZFJlcXVlc3RUeXBlLmZpcnN0KSB7CisgICAgICAgICAgICAg
ICAgICAgIEdTVF9ERUJVRygic2Vzc2lvbiAlcyByZW1vdmVkLCBtZXNzYWdlIGxlbmd0aCAlbHUi
LCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlQW5kUmVxdWVzdFR5cGUuZmlyc3Qt
PnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5
c0FzKE1lZGlhS2V5U3RhdHVzOjpSZWxlYXNlZCksIG1lc3NhZ2VBbmRSZXF1ZXN0VHlwZS5maXJz
dC5yZWxlYXNlTm9uTnVsbCgpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIm1lc3NhZ2Ug
b2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGFzIHNlc3Npb24gJXMgcmVtb3ZhbCBh
bnN3ZXIiLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpJbnRlcm5hbEVycm9y
KSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX1dBUk5J
TkcoImNvdWxkIG5vdCByZW1vdmUgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlT
dGF0dXM6OkludGVybmFsRXJyb3IpLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVk
KTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklE
LmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fcmVtb3ZlKG1fc2Vzc2lvbi5nZXQoKSkpCisg
ICAgICAgIHNlc3Npb25GYWlsdXJlKCk7CisKKyAgICBnZXRSZW1vdmVkRnJvbUluc3RhbmNlUHJv
eHkoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitP
cHRpb25hbDxDRE1JbnN0YW5jZU9wZW5DRE0mPiBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpj
ZG1JbnN0YW5jZU9wZW5DRE0oKSBjb25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0
YW5jZVByb3h5KCk7CisgICAgaWYgKCFpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VPcGVuQ0RNJj4oKmluc3Rh
bmNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmYyNDY1MDU0ZTRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1PcGVuQ0RNLmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1
ZGUgIkNETUZhY3RvcnkuaCIKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKKyNpbmNs
dWRlICJDRE1PcGVuQ0RNVHlwZXMuaCIKKyNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ0RNUHJveHkuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBPcGVuQ0RNIHsKKworc3RydWN0IE9DRE1TeXN0ZW1E
ZWxldGVyIHsKKyAgICBPcGVuQ0RNRXJyb3Igb3BlcmF0b3IoKShPcGVuQ0RNU3lzdGVtKiBwdHIp
IGNvbnN0IHsgcmV0dXJuIG9wZW5jZG1fZGVzdHJ1Y3Rfc3lzdGVtKHB0cik7IH0KK307CisKK3Vz
aW5nIFNjb3BlZE9DRE1TeXN0ZW0gPSBzdGQ6OnVuaXF1ZV9wdHI8T3BlbkNETVN5c3RlbSwgT0NE
TVN5c3RlbURlbGV0ZXI+OworCit1c2luZyBTY29wZWRTZXNzaW9uID0gc3RkOjp1bmlxdWVfcHRy
PE9wZW5DRE1TZXNzaW9uLCBXVEY6OkJveFB0ckRlbGV0ZXI8T3BlbkNETVNlc3Npb24+PjsKKwor
fSAvLyBuYW1lc3BhY2UgT3BlbkNETQorCitjbGFzcyBDRE1GYWN0b3J5T3BlbkNETSBmaW5hbCA6
IHB1YmxpYyBDRE1GYWN0b3J5LCBwdWJsaWMgQ0RNUHJveHlGYWN0b3J5IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ0RNRmFjdG9yeU9wZW5DRE0m
IHNpbmdsZXRvbigpOworCisgICAgdmlydHVhbCB+Q0RNRmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1
bHQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gY3JlYXRlQ0RNKGNvbnN0IFN0
cmluZyYpIGZpbmFsOworICAgIFJlZlB0cjxDRE1Qcm94eT4gY3JlYXRlQ0RNUHJveHkoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcm
KSBmaW5hbDsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3VwcG9ydGVkS2V5U3lzdGVtcygp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDRE1G
YWN0b3J5T3BlbkNETT47CisgICAgQ0RNRmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7Cit9Owor
CitjbGFzcyBDRE1Qcml2YXRlT3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1Qcml2YXRlIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDRE1Qcml2YXRlT3BlbkNE
TShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgOiBtX2tleVN5c3RlbShrZXlTeXN0ZW0pIHsgfTsK
KyAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlT3BlbkNETSgpID0gZGVmYXVsdDsKKworICAgIFZlY3Rv
cjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlv
biYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNDb25maWd1cmF0aW9uV2l0aFJlc3Ry
aWN0aW9ucyhjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBj
b25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgYm9vbCBz
dXBwb3J0c1Nlc3Npb25UeXBlV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNU2Vzc2lvblR5cGUm
LCBjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKSBjb25zdCBm
aW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1
cmF0aW9uKTsKKyAgICB9CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZFJvYnVzdG5l
c3NlcygpIGNvbnN0IGZpbmFsOworICAgIENETVJlcXVpcmVtZW50IGRpc3RpbmN0aXZlSWRlbnRp
ZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgY29uc3Qg
Q0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmluYWw7CisgICAgQ0RNUmVxdWlyZW1lbnQgcGVyc2lz
dGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNv
bnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZGlzdGluY3RpdmVJ
ZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJikgY29uc3QgZmluYWw7CisgICAgUmVmUHRyPENETUluc3RhbmNlPiBj
cmVhdGVJbnN0YW5jZSgpIGZpbmFsOworICAgIHZvaWQgbG9hZEFuZEluaXRpYWxpemUoKSBmaW5h
bDsKKyAgICBib29sIHN1cHBvcnRzU2VydmVyQ2VydGlmaWNhdGVzKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25zKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0
c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBTaGFyZWRCdWZmZXImKSBjb25zdCBm
aW5hbDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNo
YXJlZEJ1ZmZlciYpIGNvbnN0IGZpbmFsOworICAgIE9wdGlvbmFsPFN0cmluZz4gc2FuaXRpemVT
ZXNzaW9uSWQoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1fa2V5U3lzdGVtOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VPcGVuQ0RNIGZpbmFsIDog
cHVibGljIENETUluc3RhbmNlUHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNlT3BlbkNE
TShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7CisgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VPcGVu
Q0RNKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ0RNSW5zdGFuY2UKKyAgICBJbXBsZW1lbnRhdGlv
blR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50
YXRpb25UeXBlOjpPcGVuQ0RNOyB9CisgICAgdm9pZCBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRp
b24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIEFsbG93RGlzdGluY3RpdmVJZGVu
dGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3RhdGUsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYsIFN1Y2Nl
c3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2tleVN5c3RlbTsgfQorICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKKworICAgIE9wZW5DRE1TeXN0ZW0mIG9wZW5DRE1TeXN0
ZW0oKSBjb25zdCB7IHJldHVybiAqbV9vcGVuQ0RNU3lzdGVtLmdldCgpOyB9OworCisgICAgdm9p
ZCBzaHV0ZG93bigpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgICAgICBDRE1JbnN0YW5jZVByb3h5OjpzaHV0ZG93bigpOworICAgICAgICBtX29wZW5D
RE1TeXN0ZW0ucmVzZXQobnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE9wZW5DRE06
OlNjb3BlZE9DRE1TeXN0ZW0gbV9vcGVuQ0RNU3lzdGVtOworICAgIFN0cmluZyBtX2tleVN5c3Rl
bTsKK307CisKK2NsYXNzIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0gZmluYWwgOiBwdWJsaWMg
Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lv
bk9wZW5DRE0oQ0RNSW5zdGFuY2VPcGVuQ0RNJik7CisKKyAgICB2b2lkIHJlcXVlc3RMaWNlbnNl
KExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRC
dWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHVw
ZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+
JiYsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRTZXNzaW9u
KExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNh
bGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENs
b3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEo
Y29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikg
ZmluYWw7CisgICAgdm9pZCBzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmlu
YWw7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24gJiYgbV9t
ZXNzYWdlICYmICFtX21lc3NhZ2UtPmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBzZXRDbGllbnQo
V2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGllbnQ+JiYgY2xpZW50KSBmaW5hbCB7IG1fY2xp
ZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIGZpbmFsIHsg
bV9jbGllbnQuY2xlYXIoKTsgfQorCisgICAgdm9pZCBzaHV0ZG93bigpIGZpbmFsCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92
ZUFsbEtleXMoKTsKKyAgICAgICAgbV9zZXNzaW9uLnJlc2V0KG51bGxwdHIpOworICAgICAgICBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6c2h1dGRvd24oKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgT3B0aW9uYWw8Q0RNSW5zdGFuY2VPcGVuQ0RNJj4gY2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29u
c3Q7CisKKyAgICB1c2luZyBOb3RpZmljYXRpb24gPSB2b2lkIChDRE1JbnN0YW5jZVNlc3Npb25P
cGVuQ0RNOjoqKShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB1c2luZyBD
aGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcg
U2Vzc2lvbkNoYW5nZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoYm9vbCwgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4mJik+OworCisgICAgdm9pZCBjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQ
dHI8U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB2b2lkIGtleVVwZGF0ZWRDYWxsYmFjayhLZXlJRFR5
cGUmJik7CisgICAgdm9pZCBrZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgdm9pZCBlcnJv
ckNhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzIHN0YXR1cyhjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIHNl
c3Npb25GYWlsdXJlKCk7CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgYWxsIG9yaWdpbmFsIHVzZXMg
b2YgdGhlc2UgYXR0cmlidXRlcy4KKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgS2V5U3Rv
cmUgbV9rZXlTdG9yZSB7IEtleVN0b3JlOjpNZXJnZVN0cmF0ZWd5OjpSZXBsYWNlSWZOZXdlciB9
OworICAgIGJvb2wgbV9kb2VzS2V5U3RvcmVOZWVkTWVyZ2luZyB7IGZhbHNlIH07CisgICAgSW5p
dERhdGEgbV9pbml0RGF0YTsKKyAgICBPcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcyBtX29wZW5DRE1T
ZXNzaW9uQ2FsbGJhY2tzIHsgfTsKKyAgICBPcGVuQ0RNOjpTY29wZWRTZXNzaW9uIG1fc2Vzc2lv
bjsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX21lc3NhZ2U7CisgICAgYm9vbCBtX25lZWRz
SW5kaXZpZHVhbGl6YXRpb24geyBmYWxzZSB9OworICAgIFZlY3RvcjxDaGFsbGVuZ2VHZW5lcmF0
ZWRDYWxsYmFjaz4gbV9jaGFsbGVuZ2VDYWxsYmFja3M7CisgICAgVmVjdG9yPFNlc3Npb25DaGFu
Z2VkQ2FsbGJhY2s+IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3M7CisgICAgV2Vha1B0cjxDRE1J
bnN0YW5jZVNlc3Npb25DbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NETV9JTlNUQU5DRShXZWJDb3JlOjpDRE1J
bnN0YW5jZU9wZW5DRE0sIFdlYkNvcmU6OkNETUluc3RhbmNlOjpJbXBsZW1lbnRhdGlvblR5cGU6
Ok9wZW5DRE0pOworCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxF
KE9QRU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAppbmRleCA5MWQ3
YjIzM2ExNWQuLjU3ZTI4YmNiZjRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJL
ZXkuY3BwCkBAIC0xMjIsMTEgKzEyMiwxNCBAQCBib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNT
ZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYgaW4pCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGtleUlEVmVjOwogICAgIGtleUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5
SURTaXplSW5CeXRlcyk7CiAKLSAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5
SURWZWMpOworICAgIGF1dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZvcktleVZhbHVlKGtleUlEVmVj
KTsKICAgICBpZiAoIWtleURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChn
Y3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkoZ0NyeXB0SGFuZGxl
KCksIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+c2l6ZSgpKSkgeworICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rvcjx1aW50OF90Pj4oa2V5RGF0YS52YWx1ZSgpKSk7Cisg
ICAgYXV0byYga2V5RGF0YVZhbHVlID0gV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXlEYXRh
LnZhbHVlKCkpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX3NldGtleShnQ3J5cHRIYW5kbGUoKSwga2V5RGF0YVZhbHVlLmRhdGEoKSwga2V5RGF0YVZh
bHVlLnNpemUoKSkpIHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfc2V0a2V5KTogJXMiLCBncGdf
c3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3Bl
bkNETS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNDdmZWRl
Y2NiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVuQ0RNLmgiCisKKyNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxvcGVuX2NkbV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0J5dGVPcmRlci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdE1lZGlhT3Bl
bkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gTk9URTogWW91VHViZSAyMDE5IEVNRSBjb25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhp
cyB0byBiZSA+PTVzLgorY29uc3QgV1RGOjpTZWNvbmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGlt
ZW91dCA9IFdURjo6U2Vjb25kcyg2KTsKKworQm94UHRyPE9wZW5DRE1TZXNzaW9uPiBDRE1Qcm94
eU9wZW5DRE06OmdldERlY3J5cHRpb25TZXNzaW9uKGNvbnN0IERlY3J5cHRpb25Db250ZXh0JiBp
bikgY29uc3QKK3sKKyAgICBhdXRvIG1hcHBlZEtleUlEID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVh
dGUoaW4ua2V5SURCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgaWYgKCFtYXBwZWRLZXlJRCkg
eworICAgICAgICBHU1RfRVJST1IoIkZhaWxlZCB0byBtYXAga2V5IElEIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGtleUlEID0gbWFwcGVkS2V5
SUQtPmNyZWF0ZVZlY3RvcigpOworCisgICAgYXV0byBrZXlIYW5kbGUgPSBnZXRPcldhaXRGb3JL
ZXlIYW5kbGUoa2V5SUQpOworICAgIGlmICgha2V5SGFuZGxlIHx8ICEoKmtleUhhbmRsZSktPmlz
U3RhdHVzQ3VycmVudGx5VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBL
ZXlIYW5kbGVWYWx1ZVZhcmlhbnQga2V5RGF0YSA9ICgqa2V5SGFuZGxlKS0+dmFsdWUoKTsKKyAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb3hQdHI8T3BlbkNETVNlc3Npb24+Pihr
ZXlEYXRhKSk7CisKKyAgICBhdXRvJiBrZXlWYWx1ZSA9IFdURjo6Z2V0PEJveFB0cjxPcGVuQ0RN
U2Vzc2lvbj4+KGtleURhdGEpOworCisgICAgaWYgKCFrZXlWYWx1ZSkgeworICAgICAgICBrZXlW
YWx1ZSA9IGNyZWF0ZUJveFB0cihvcGVuY2RtX2dldF9zeXN0ZW1fc2Vzc2lvbigmc3RhdGljX2Nh
c3Q8Y29uc3QgQ0RNSW5zdGFuY2VPcGVuQ0RNKj4oaW5zdGFuY2UoKSktPm9wZW5DRE1TeXN0ZW0o
KSwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkKKyAgICAgICAgICAgICwgc19saWNlbnNlS2V5
UmVzcG9uc2VUaW1lb3V0Lm1pbGxpc2Vjb25kc0FzPHVpbnQzMl90PigpKSk7CisgICAgICAgIEFT
U0VSVChrZXlWYWx1ZSk7CisgICAgICAgICgqa2V5SGFuZGxlKS0+dGFrZVZhbHVlSWZEaWZmZXJl
bnQoa2V5VmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZTsKK30KKworYm9vbCBD
RE1Qcm94eU9wZW5DRE06OmRlY3J5cHQoQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0aW9uQ29udGV4
dCYgaW5wdXQpCit7CisgICAgQm94UHRyPE9wZW5DRE1TZXNzaW9uPiBzZXNzaW9uID0gZ2V0RGVj
cnlwdGlvblNlc3Npb24oaW5wdXQpOworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBHU1Rf
RVJST1IoInRoZXJlIGlzIG5vIHZhbGlkIHNlc3Npb24gdG8gZGVjcnlwdCBmb3IgdGhlIHByb3Zp
ZGVkIGtleSBJRCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NUX1RS
QUNFKCJkZWNyeXB0aW5nIik7CisgICAgLy8gRGVjcnlwdCBjaXBoZXIuCisgICAgT3BlbkNETUVy
cm9yIGVycm9yQ29kZSA9IG9wZW5jZG1fZ3N0cmVhbWVyX3Nlc3Npb25fZGVjcnlwdChzZXNzaW9u
LT5nZXQoKSwgaW5wdXQuZGF0YUJ1ZmZlciwgaW5wdXQuc3Vic2FtcGxlc0J1ZmZlciwgaW5wdXQu
bnVtU3Vic2FtcGxlcworICAgICAgICAsIGlucHV0Lml2QnVmZmVyLCBpbnB1dC5rZXlJREJ1ZmZl
ciwgMCk7CisgICAgaWYgKGVycm9yQ29kZSkgeworICAgICAgICBHU1RfRVJST1IoImRlY3J5cHRp
b24gZmFpbGVkLCBlcnJvciBjb2RlICVYIiwgZXJyb3JDb2RlKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNE
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMGM5YzNkMDFhNjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0u
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNl
c3Npb24uaCIKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1F
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUg
dGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVz
ZSBvZiBhIHBsYXRmb3JtIENETSBtb2R1bGUuCitjbGFzcyBDRE1Qcm94eU9wZW5DRE0gZmluYWwg
OiBwdWJsaWMgQ0RNUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1Qcm94eU9wZW5DRE0s
IFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RN
UHJveHlPcGVuQ0RNKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQorICAgICAgICA6IG1fa2V5U3lz
dGVtKGtleVN5c3RlbSkgeyB9CisgICAgdmlydHVhbCB+Q0RNUHJveHlPcGVuQ0RNKCkgPSBkZWZh
dWx0OworCisgICAgc3RydWN0IERlY3J5cHRpb25Db250ZXh0IHsKKyAgICAgICAgR3N0QnVmZmVy
KiBrZXlJREJ1ZmZlcjsKKyAgICAgICAgR3N0QnVmZmVyKiBpdkJ1ZmZlcjsKKyAgICAgICAgR3N0
QnVmZmVyKiBkYXRhQnVmZmVyOworICAgICAgICBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXI7
CisgICAgICAgIHNpemVfdCBudW1TdWJzYW1wbGVzOworICAgIH07CisKKyAgICBib29sIGRlY3J5
cHQoRGVjcnlwdGlvbkNvbnRleHQmKTsKKyAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIHsg
cmV0dXJuIG1fa2V5U3lzdGVtOyB9CisKK3ByaXZhdGU6CisgICAgQm94UHRyPE9wZW5DRE1TZXNz
aW9uPiBnZXREZWNyeXB0aW9uU2Vzc2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYpIGNvbnN0
OworICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKaW5kZXggOGE5MmNhM2Ix
ZWE4Li4yMWUyZDU1ZWRmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGls
aXRpZXMuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiAjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJ
RCAiMTA3N2VmZWMtYzBiMi00ZDAyLWFjZTMtM2MxZTUyZTJmYjRiIgorI2lmIEVOQUJMRShPUEVO
Q0RNKQorI2RlZmluZSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVfVVRJTElUSUVTX1dJREVWSU5FX1VV
SUQgImVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFkMjFlZCIKKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbml0RGF0YSB7CkBAIC00OCw2ICs1MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcGF5bG9hZCA9IG1hcHBlZEluaXREYXRhLT5jcmVhdGVTaGFyZWRCdWZm
ZXIoKTsKICAgICB9CiAKKyAgICBJbml0RGF0YShjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiYmIHBheWxvYWQpCisgICAgICAgIDogbV9zeXN0ZW1JZChzeXN0ZW1J
ZCkKKyAgICAgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXlsb2FkKSkKKyAgICB7CisgICAgfQor
CiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEmJiBpbml0RGF0YSkKICAgICB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGVyZSBpcyBzb21lIGNvbmZ1c2lvbiBoZXJlIGFib3V0IGhvdyB0byBkZXRlY3Qg
dGhlCkBAIC02NCw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9wYXlsb2FkLT5hcHBlbmQo
KmluaXREYXRhLnBheWxvYWQoKSk7CiAgICAgfQogCi0gICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIGNvbnN0IFJl
ZlB0cjxTaGFyZWRCdWZmZXI+JiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9
CiAgICAgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVtSWQ7
IH0KICAgICBTdHJpbmcgcGF5bG9hZENvbnRhaW5lclR5cGUoKSBjb25zdAogICAgIHsKQEAgLTEx
NSwxNyArMTI0LDMzIEBAIGNsYXNzIEdTdHJlYW1lckVNRVV0aWxpdGllcyB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX0NsZWFyS2V5VVVJRCA9IFdFQkNPUkVf
R1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJRDsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlLZXlTeXN0ZW0gPSAib3JnLnczLmNsZWFya2V5IjsK
KyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNf
V2lkZXZpbmVVVUlEID0gV0VCQ09SRV9HU1RSRUFNRVJfRU1FX1VUSUxJVElFU19XSURFVklORV9V
VUlEOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBjb25zdCogc19XaWRldmluZUtleVN5c3Rl
bSA9ICJjb20ud2lkZXZpbmUuYWxwaGEiOworI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0Ns
ZWFyS2V5S2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX0NsZWFyS2V5S2V5U3lz
dGVtKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0aWMgYm9vbCBpc1dp
ZGV2aW5lS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX1dpZGV2aW5lS2V5U3lz
dGVtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrZXlTeXN0ZW1U
b1V1aWQoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAgewogICAgICAgICBpZiAoaXNDbGVh
cktleUtleVN5c3RlbShrZXlTeXN0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIHNfQ2xlYXJLZXlV
VUlEOwogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgICAgIGlmIChpc1dpZGV2aW5lS2V5U3lz
dGVtKGtleVN5c3RlbSkpCisgICAgICAgICAgICByZXR1cm4gc19XaWRldmluZVVVSUQ7CisjZW5k
aWYKKwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDg2YjdjNjZmYWQ0Zi4uNTEwM2Q0Y2I5MmFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0UHJpdmF0ZSB7CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Citz
dGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENETVByb3h5PiYp
Owogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVu
c2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIApAQCAtODMs
NyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xh
c3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogICAgICAgICAid2Via2l0Y2xlYXJr
ZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CiAKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZ
UFRfQ0xBU1Moa2xhc3MpOwotICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1N0
cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKKyAgICBjZW5jQ2xhc3MtPnByb3Rl
Y3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRSKHByb3RlY3Rpb25TeXN0ZW1JZCk7CiAg
ICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJv
eHlBdHRhY2hlZCk7CiAgICAgY2VuY0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIo
ZGVjcnlwdCk7CiAKQEAgLTEwNiw2ICsxMDcsMTEgQEAgc3RhdGljIHZvaWQgZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxp
emUsIChvYmplY3QpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1J
ZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KikKK3sKKyAgICByZXR1cm4gR1N0
cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKK30KKwogc3RhdGljIGJvb2wgY2Rt
UHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBj
b25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJ
VkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyLmNwcAppbmRleCA0N2I1NjBmNzM5MjAuLjE1ZTEzYWJmYmFkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCkBAIC0xMzQsMTQgKzEzNCwxNCBAQCBzdGF0aWMgR3N0Q2FwcyogdHJh
bnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0
aW9uLAogICAgICAgICAgICAgLy8gY2FuIGNhdXNlIGNhcHMgbmVnb3RpYXRpb24gZmFpbHVyZXMg
d2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVhbXMuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJl
X3JlbW92ZV9maWVsZHMob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJiYXNlLXByb2ZpbGUiLCAi
Y29kZWNfZGF0YSIsICJoZWlnaHQiLCAiZnJhbWVyYXRlIiwgImxldmVsIiwgInBpeGVsLWFzcGVj
dC1yYXRpbyIsICJwcm9maWxlIiwgInJhdGUiLCAid2lkdGgiLCBudWxscHRyKTsKIAotICAgICAg
ICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0
aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQsCisg
ICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwgInBy
b3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1J
ZChzZWxmKSwKICAgICAgICAgICAgICAgICAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9T
VFJJTkcsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoaW5jb21pbmdTdHJ1Y3R1cmUpLCBudWxscHRy
KTsKIAogICAgICAgICAgICAgLy8gR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lE
IHdhcyBhZGRlZCBpbiB0aGUgR1N0cmVhbWVyCiAgICAgICAgICAgICAvLyBkZXZlbG9wZW1lbnQg
Z2l0IG1hc3RlciB3aGljaCB3aWxsIHNoaXAgYXMgdmVyc2lvbiAxLjE2LjAuCiAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dGdvaW5nU3RydWN0dXJlLmdldCgpLAogI2lmIEdT
VF9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQotICAgICAgICAgICAgICAgICFnX3N0cmNtcDAoa2xh
c3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwgR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVN
X0lEKSA/ICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIiA6CisgICAgICAgICAgICAgICAgIWdfc3Ry
Y21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKHNlbGYpLCBHU1RfUFJPVEVDVElPTl9VTlNQ
RUNJRklFRF9TWVNURU1fSUQpID8gImFwcGxpY2F0aW9uL3gtd2VibS1lbmMiIDoKICNlbmRpZgog
ICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKICAgICAgICAgfQpAQCAtMTc3
LDYgKzE3NywxMiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJh
c2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJh
c2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKIAorICAgIEdz
dFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJv
dGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7Cisg
ICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYs
ICJCdWZmZXIgJXAgZG9lcyBub3QgY29udGFpbiBwcm90ZWN0aW9uIG1ldGEsIG5vdCBkZWNyeXB0
aW5nIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKwogICAg
IExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CiAKICAgICAvLyBU
aGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdp
biBkZWNyeXB0aW9uLgpAQCAtMTkxLDEyICsxOTcsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0
cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVy
KQogICAgICAgICB9CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZh
aWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9Ci0K
LSAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0
PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZl
cikpOwotICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVy
ICVwIiwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0g
ICAgfQogICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4
aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4IGJiMTE2NmQzODAzMy4uYTA0
NjVmZjUzZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtNTQsNyArNTQsNyBAQCBz
dHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgewogc3RydWN0IF9XZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgewogICAgIEdzdEJhc2VUcmFuc2Zv
cm1DbGFzcyBwYXJlbnRDbGFzczsKIAotICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1J
ZDsKKyAgICBjb25zdCBjaGFyKiAoKnByb3RlY3Rpb25TeXN0ZW1JZCkoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCopOwogICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkNE
TVByb3h5PiYpOwogICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBz
dWJzYW1wbGVzQnVmZmVyKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLjg3NTQ0N2QxYjUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5
cHRvckdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qIEdTdHJlYW1lciBPcGVuQ0RN
IGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0T3Bl
bkNETURlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkg
JiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJDRE1PcGVu
Q0RNLmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVuQ0RNLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjZGVmaW5lIFdF
QktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQs
IFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKSkKK3N0cnVjdCBfV2ViS2l0TWVkaWFP
cGVuQ0RNRGVjcnlwdFByaXZhdGUgeworICAgIFJlZlB0cjxDRE1Qcm94eU9wZW5DRE0+IGNkbVBy
b3h5OworfTsKKworc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOworc3RhdGljIGNvbnN0
IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0Kik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqLCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+Jik7CitzdGF0aWMgYm9vbCBk
ZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2
LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxl
c0NvdW50CisgICAgLCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOworCitHU1RfREVCVUdfQ0FURUdP
Ulkod2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBHU1Rf
Q0FUX0RFRkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNlbmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tdID0geyAidmlkZW8vbXA0
IiwgImF1ZGlvL21wNCIsICJ2aWRlby94LWgyNjQiLCAiYXVkaW8vbXBlZyIsIG51bGxwdHIgfTsK
K3N0YXRpYyBjb25zdCBjaGFyKiB3ZWJtRW5jcnlwdGlvbk1lZGlhVHlwZXNbXSA9IHsgInZpZGVv
L3dlYm0iLCAiYXVkaW8vd2VibSIsICJ2aWRlby94LXZwOSIsIG51bGxwdHIgfTsKKworc3RhdGlj
IEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExB
VEUoInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NU
X1NUQVRJQ19DQVBTKAorICAgICAgICAidmlkZW8vd2VibTsgIgorICAgICAgICAiYXVkaW8vd2Vi
bTsgIgorICAgICAgICAidmlkZW8vbXA0OyAiCisgICAgICAgICJhdWRpby9tcDQ7ICIKKyAgICAg
ICAgImF1ZGlvL21wZWc7ICIKKyAgICAgICAgInZpZGVvL3gtaDI2NDsgIgorICAgICAgICAidmlk
ZW8veC12cDk7ICIpKTsKKworI2RlZmluZSB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X3Bh
cmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEUoV2ViS2l0TWVkaWFPcGVuQ0RN
RGVjcnlwdCwgd2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdCwgV0VCS0lUX1RZUEVfTUVESUFf
Q0VOQ19ERUNSWVBUKTsKKworc3RhdGljIEdSZWZQdHI8R3N0Q2Fwcz4gY3JlYXRlU2lua1BhZFRl
bXBsYXRlQ2FwcygpCit7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19lbXB0eSgpKTsKKworICAgIGZvciAoY29uc3QgYXV0byYga2V5U3lzdGVtIDog
Q0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3RlbXMoKSkgewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgY2VuY0VuY3J5cHRpb25NZWRpYVR5cGVzW2ldOyArK2kp
IHsKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0
X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gtY2VuYyIsICJvcmlnaW5hbC1tZWRpYS10eXBl
IiwgR19UWVBFX1NUUklORywgY2VuY0VuY3J5cHRpb25NZWRpYVR5cGVzW2ldCisgICAgICAgICAg
ICAgICAgLCAicHJvdGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBHU3RyZWFtZXJFTUVV
dGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChrZXlTeXN0ZW0pLCBudWxscHRyKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKEdTdHJlYW1lckVNRVV0aWxpdGllczo6aXNXaWRldmluZUtleVN5c3Rl
bShrZXlTeXN0ZW0pKSB7CisgICAgICAgICAgICAvLyBObyBrZXkgc3lzdGVtIFVVSUQgZm9yIHdl
Ym0uIEl0J3Mgbm90IHNldCBpbiBjYXBzIGZvciBpdCBhbmQgaXQncyBqdXN0IFdpZGV2aW5lLgor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXTsg
KytpKSB7CisgICAgICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShjYXBzLmdl
dCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC13ZWJtLWVuYyIsICJvcmlnaW5h
bC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORworICAgICAgICAgICAgICAgICAgICAsIHdlYm1F
bmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgbnVsbHB0cikpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJzaW5rIHBhZCB0ZW1wbGF0ZSBjYXBzICUiIEdT
VF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKworICAgIHJldHVybiBjYXBzOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVk
aWFPcGVuQ0RNRGVjcnlwdENsYXNzKiBrbGFzcykKK3sKKyAgICBHU1RfREVCVUdfQ0FURUdPUllf
SU5JVCh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRlZ29yeSwgIndlYmtpdG9wZW5j
ZG0iLCAwLCAiT3BlbkNETSBkZWNyeXB0Iik7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gZmluYWxpemU7CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9F
TEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGdzdFNpbmtQYWRUZW1w
bGF0ZUNhcHMgPSBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCk7CisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9wYWRfdGVtcGxhdGVfbmV3
KCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgZ3N0U2lua1BhZFRlbXBsYXRl
Q2Fwcy5nZXQoKSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxl
bWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisK
KyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVsZW1lbnRDbGFzcywg
IkRlY3J5cHQgZW5jcnlwdGVkIGNvbnRlbnQgdXNpbmcgT3BlbkNETSIsIEdTVF9FTEVNRU5UX0ZB
Q1RPUllfS0xBU1NfREVDUllQVE9SCisgICAgICAgICwgIkRlY3J5cHRzIGVuY3J5cHRlZCBtZWRp
YSB1c2luZyBPcGVuQ0RNLiIsICJYYWJpZXIgUm9kcsOtZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGln
YWxpYS5jb20+Iik7CisKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xh
c3MqIGNvbW1vbkNsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7
CisgICAgY29tbW9uQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRS
KHByb3RlY3Rpb25TeXN0ZW1JZCk7CisgICAgY29tbW9uQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQg
PSBHU1RfREVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0dGFjaGVkKTsKKyAgICBjb21tb25DbGFzcy0+
ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5cHQpOworCisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZh
dGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9pbml0
KFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFPcGVu
Q0RNRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUX0dF
VF9QUklWQVRFKHNlbGYpOworICAgIHNlbGYtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikg
V2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKG9iamVjdCk7CisgICAgV2ViS2l0
TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXYgPSBzZWxmLT5wcml2OworICAgIHByaXYt
Pn5XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSgpOworCisgICAgR1NUX0NBTExfUEFS
RU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgY29u
c3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYpCit7CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJ
QV9PUEVOQ0RNX0RFQ1JZUFQoc2VsZikpOworICAgIEFTU0VSVChwcml2LT5jZG1Qcm94eSk7Cisg
ICAgcmV0dXJuIEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKHByaXYtPmNk
bVByb3h5LT5rZXlTeXN0ZW0oKSk7Cit9CisKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENE
TVByb3h5PiYgY2RtUHJveHkpCit7CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJ
VF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQoc2VsZikpOworICAgIHByaXYtPmNkbVByb3h5ID0gcmVp
bnRlcnByZXRfY2FzdDxDRE1Qcm94eU9wZW5DRE0qPihjZG1Qcm94eS5nZXQoKSk7CisgICAgcmV0
dXJuIHByaXYtPmNkbVByb3h5OworfQorCitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1
ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJzYW1wbGVD
b3VudAorICAgICwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKQoreworICAgIFdlYktpdE1l
ZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVD
UllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsKKwor
ICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHN1YnNhbXBsZUNvdW50ICYmICFzdWJzYW1wbGVzQnVmZmVyKSB7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgpIHN1YnNhbXBsZXMg
cGFyYW1ldGVyIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0aW9uQ29udGV4
dCBjb250ZXh0OworICAgIGNvbnRleHQua2V5SURCdWZmZXIgPSBrZXlJREJ1ZmZlcjsKKyAgICBj
b250ZXh0Lml2QnVmZmVyID0gaXZCdWZmZXI7CisgICAgY29udGV4dC5kYXRhQnVmZmVyID0gYnVm
ZmVyOworICAgIGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGNv
bnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IHN1YnNhbXBsZUNvdW50ID8gc3Vic2FtcGxlc0J1ZmZl
ciA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmRlY3J5cHQoY29udGV4
dCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BF
TkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi5lODMwYTcxN2NlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0
b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU0IEBACisvKiBHU3RyZWFtZXIgT3BlbkNETSBjb21t
b24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJXZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQgICAgICAgICAgKHdlYmtpdF9t
ZWRpYV9vcGVuY2RtX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX09Q
RU5DRE1fREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5D
RE1EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9DTEFTUyhr
bGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJ
QV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcykpCisjZGVm
aW5lIFdFQktJVF9JU19NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQ
VCkpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfQ0xBU1Mob2JqKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNE
TV9ERUNSWVBUKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHQg
ICAgICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlIFdlYktp
dE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlOworCitHVHlwZSB3ZWJraXRfbWVkaWFfb3BlbmNk
bV9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURl
Y3J5cHQgeworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgcGFyZW50Owor
CisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyB7CisgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHBhcmVudENsYXNzOworfTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAm
JiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggZjJkZGUxMjQxODc5Li40YzFj
ZTFmMDUwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMjgyLDYgKzI4MiwxMiBAQCBzZXQoUGx1
Z2luUHJvY2Vzc19MSUJSQVJJRVMKICAgICBXZWJLaXQKICkKIAoraWYgKEVOQUJMRV9FTkNSWVBU
RURfTUVESUEgQU5EIEVOQUJMRV9PUEVOQ0RNKQorICBsaXN0KEFQUEVORCBXZWJLaXRfU1lTVEVN
X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICkK
K2VuZGlmICgpCisKIGlmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKICAgICAjIEZvciBw
bGF0Zm9ybXMgdGhhdCB3YW50IHRvIHVzZSBzeXN0ZW0tcHJvdmlkZWQgT3BlbkdMIChFUykgLyBF
R0wgaGVhZGVycywKICAgICAjIHRoZXNlIGluY2x1ZGUgZGlyZWN0b3JpZXMsIGxpYnJhcmllcyBv
ciBkZWZpbml0aW9ucyBuZWVkIHRvIGJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDlmZTEzYTE2NzUyNi4uYWFjM2Jk
NGE4M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA2LTI0ICBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1l
cl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQg
YWNjZXNzIHRvIHRoZSBPcGVuQ0RNIGhlYWRlcnMuCisKIDIwMjAtMDYtMjQgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVw
ZGF0ZSBPcHRpb25zR1RLLmNtYWtlIGFuZCBORVdTIGZvciAyLjI5LjIgcmVsZWFzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRP
cGVuQ0RNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVl
ZDM4M2NjOTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNt
YWtlCkBAIC0wLDAgKzEsNjkgQEAKKyMucnN0CisjIEZpbmRPcGVuQ0RNCisjIC0tLS0tLS0tLS0t
LS0KKyMKKyMgRmluZHMgdGhlIE9wZW5DRE0gbGlicmFyeS4KKyMKKyMgVGhpcyB3aWxsIGRlZmlu
ZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMKKyMgYGBPUEVOQ0RNX0ZPVU5EYGAKKyMgICAg
IFRydWUgaWYgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIG9mIGdjcnlwdCB3YXMgZm91bmQKKyMgYGBP
UEVOQ0RNX1ZFUlNJT05gYAorIyAgICAgVGhlIHZlcnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZv
dW5kCisjIGBgT1BFTkNETV9JTkNMVURFX0RJUlNgYAorIyAgICAgVGhlIGdjcnlwdCBpbmNsdWRl
IGRpcmVjdG9yaWVzCisjIGBgT1BFTkNETV9MSUJSQVJJRVNgYAorIyAgICAgVGhlIGxpbmtlciBs
aWJyYXJpZXMgbmVlZGVkIHRvIHVzZSB0aGUgZ2NyeXB0IGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBUaGUg
bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisjIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMKKyMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyMgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorIyBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK
KyMgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZmluZF9saWJyYXJ5KE9QRU5DRE1fTElCUkFSWQor
ICBOQU1FUyBsaWJvY2RtLnNvCispCitmaW5kX3BhdGgoT1BFTkNETV9JTkNMVURFX0RJUgorICBO
QU1FUyBvcGVuX2NkbS5oCisgIFBBVEhfU1VGRklYRVMgIldQRUZyYW1ld29yay9vY2RtLyIKKykK
KworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKworZmluZF9wYWNrYWdl
X2hhbmRsZV9zdGFuZGFyZF9hcmdzKE9wZW5jZG0KKyAgICBGT1VORF9WQVIgT1BFTkNETV9GT1VO
RAorICAgIFJFUVVJUkVEX1ZBUlMgT1BFTkNETV9MSUJSQVJZIE9QRU5DRE1fSU5DTFVERV9ESVIK
KykKK2lmIChPUEVOQ0RNX0ZPVU5EKQorICAgIHNldChPUEVOQ0RNX0xJQlJBUklFUyAke09QRU5D
RE1fTElCUkFSWX0pCisgICAgc2V0KE9QRU5DRE1fSU5DTFVERV9ESVJTICR7T1BFTkNETV9JTkNM
VURFX0RJUn0pCitlbmRpZiAoKQorCittYXJrX2FzX2FkdmFuY2VkKE9QRU5DRE1fTElCUkFSWSBP
UEVOQ0RNX0lOQ0xVREVfRElSKQorCitpbmNsdWRlKEZlYXR1cmVTdW1tYXJ5KQorc2V0X3BhY2th
Z2VfcHJvcGVydGllcyhPcGVuY2RtIFBST1BFUlRJRVMKKyAgICBERVNDUklQVElPTiAiT3BlbkNE
TSBEUk0gZnJhbWV3b3JrIgorICAgIFVSTCAiaHR0cHM6Ly9naXRodWIuY29tL3Jka2NlbnRyYWwv
VGh1bmRlciIKKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIv
U291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggODExMGUzN2MwNDczLi42ODkxOTQ1
NjE0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0xODcsNiArMTg3LDcgQEAgV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSBQUklWQVRF
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX05FVFdPUktfQ0FD
SEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElE
QVRFIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
T0ZGU0NSRUVOX0NBTlZBUyBQUklWQVRFICR7RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30p
CitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT1BFTkNETSBQUklWQVRF
IE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19N
RU1PUllfTU9OSVRPUiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX1BPSU5URVJfTE9DSyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQpA
QCAtNDI3LDYgKzQyOCwxMCBAQCBpZiAoVVNFX1NZU1RFTUQpCiAgICAgZW5kaWYgKCkKIGVuZGlm
ICgpCiAKK2lmIChFTkFCTEVfRU5DUllQVEVEX01FRElBIEFORCBFTkFCTEVfT1BFTkNETSkKKyAg
ZmluZF9wYWNrYWdlKE9wZW5DRE0gUkVRVUlSRUQpCitlbmRpZiAoKQorCiAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIyNDcKIGlmIChFTkFCTEVEX0NPTVBJTEVS
X1NBTklUSVpFUlMpCiAgICAgc2V0KEVOQUJMRV9JTlRST1NQRUNUSU9OIE9GRikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNX
UEUuY21ha2UKaW5kZXggMWUzMmYxNmU5ZDJjLi4wZWU0YzU5OTc4MzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BF
LmNtYWtlCkBAIC00NSw2ICs0NSw3IEBAIGluY2x1ZGUoR1N0cmVhbWVyRGVmaW5pdGlvbnMpCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FO
VkFTIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
QUNDRVNTSUJJTElUWSBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfRU5DUllQVEVEX01FRElBIFBVQkxJQyAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVB
VFVSRVN9KQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0g
UFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VC
RFJJVkVSIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJfQ1JZUFRPIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9YU0xUIFBVQkxJQyBPTikKQEAgLTE5OCw2ICsxOTksMTAgQEAgaWYgKFVTRV9TWVNU
RU1EKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCitpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSBBTkQgRU5BQkxFX09QRU5DRE0pCisgIGZpbmRfcGFja2FnZShPcGVuQ0RNIFJFUVVJUkVEKQor
ZW5kaWYgKCkKKwogYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV1BFX189MSkKIGFkZF9kZWZp
bml0aW9ucygtREdFVFRFWFRfUEFDS0FHRT0iV1BFIikKIGFkZF9kZWZpbml0aW9ucygtREpTQ19H
TElCX0FQSV9FTkFCTEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVz
LmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IGUyYWEzOTY2
Mjc1Ny4uMWJjOTc5ZTczMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVy
ZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xODIs
NiArMTgyLDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9O
X0RFRklORShFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFICJUb29n
bGUgbmV0d29yayBjYWNoZSBzdGFsZS13aGlsZS1yZXZhbGlkYXRlIGNhY2hpbmcgc3RyYXRlZ3ki
IFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9OT1RJRklDQVRJ
T05TICJUb2dnbGUgTm90aWZpY2F0aW9ucyBzdXBwb3J0IiBQUklWQVRFIE9OKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTICJUb2dnbGUgT2Zmc2NyZWVu
Q2FudmFzIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQorICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVO
QUJMRV9PUEVOQ0RNICJUb2dnbGUgRU1FIFYzIE9wZW5DRE0gc3VwcG9ydCIgUFJJVkFURSBPRkYp
CiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyAiVG9n
Z2xlIE9yaWVudGF0aW9uIEV2ZW50cyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIICJUb2dnbGUgYWNj
ZWxlcmF0ZWQgc2Nyb2xsaW5nIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9QQVlNRU5UX1JFUVVFU1QgIlRvZ2dsZSBQYXltZW50IFJlcXVlc3Qg
c3VwcG9ydCIgUFJJVkFURSBPRkYpCkBAIC0yNTUsNiArMjU2LDcgQEAgbWFjcm8oV0VCS0lUX09Q
VElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfQ09OVFJP
TFNfU0NSSVBUIEVOQUJMRV9WSURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVf
TUVESUFfU09VUkNFIEVOQUJMRV9WSURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFC
TEVfTUVESUFfU1RSRUFNIEVOQUJMRV9WSURFTykKKyAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChF
TkFCTEVfT1BFTkNETSBFTkFCTEVfRU5DUllQVEVEX01FRElBKQogICAgIFdFQktJVF9PUFRJT05f
REVQRU5EKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSBFTkFCTEVfVklERU8pCiAgICAg
V0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVO
IEVOQUJMRV9WSURFTykKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVE9VQ0hfU0xJ
REVSIEVOQUJMRV9UT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggYWIwYTk4ZDdkMDZhLi41NTFjMDZkNjg3MDkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBA
QAorMjAyMC0wNi0yNCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5D
RE0gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzNTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgc3VwcG9ydCB0byBidWlsZCBPcGVuQ0RNIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBU
aGVyZSBpcyBhbgorICAgICAgICBvcHQgaW4gZW52IHZhciB0byBnZXQgSkhCdWlsZCBidWlsZGlu
ZyBUaHVuZGVyIGl0cyBXaWRldmluZQorICAgICAgICBkZXBlbmRlbmNpZXMuIFdlIGFsc28gaW5j
bHVkZSBhIGNvdXBsZSBvZiBHU3RyZWFtZXIgcGF0Y2hlcyBuZWVkZWQKKyAgICAgICAgdG8gZ2V0
IGtleSBJRHMgaW4gdGhlIGRlY3J5cHRvcnMuCisKKyAgICAgICAgV2lkZXZpbmUgaXMgb2J2aW91
c2x5IHByb3ByaWV0YXJ5IGFuZCBhcyB5b3UgbmVlZCB0byBiZSBsaWNlbnNlZAorICAgICAgICB0
byBhY2Nlc3MgaXQsIHlvdSBuZWVkIGNyZWRlbnRpYWxzIHRvIGJ1aWxkIGl0LgorCisgICAgICAg
IFdlIGFsc28gYWRkIHRlc3RzIGZvciBCb3hQdHIuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG06CisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Cb3hQdHIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkJveFB0ckxvZ2dlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkJveFB0ckxvZ2dlcjo6Qm94UHRyTG9nZ2VyKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmJveFB0ckxvZ2dlckRlbGV0ZXIpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxl
czoKKyAgICAgICAgKiBnc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3Nk
ZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGdzdHJl
YW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1k
ZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIGd0
ay9pbnN0YWxsLWRlcGVuZGVuY2llczoKKyAgICAgICAgKiB3cGUvaW5zdGFsbC1kZXBlbmRlbmNp
ZXM6CisgICAgICAgICogamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5OgorICAgICAgICAoaW5p
dCk6CisKKzIwMjAtMDUtMjYgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdh
bGlhLmNvbT4KKworICAgICAgICBbV1RGXSBJbXBsZW1lbnQgbmV3IEJveFB0ciBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMzc5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0JveFB0ci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRy
TG9nZ2VyOjpjcmVhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyOjpC
b3hQdHJMb2dnZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Ym94UHRyTG9nZ2VyRGVsZXRl
cik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNi0yNCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BF
XSBBZGQgQVBJIHRvIGFsbG93IGFwcGxpY2F0aW9ucyB0byBoYW5kbGUgdGhlIEhUVFAgYXV0aGVu
dGljYXRpb24gY3JlZGVudGlhbCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KaW5kZXggYzBjZjA5ODczNzdkLi44ZWFhOTBjYWU0MmYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTEzNSw2ICsxMzUsNyBAQCBteSAoCiAgICAg
JG5ldHdvcmtDYWNoZVN0YWxlV2hpbGVSZXZhbGlkYXRlU3VwcG9ydCwKICAgICAkbm90aWZpY2F0
aW9uc1N1cHBvcnQsCiAgICAgJG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQsCisgICAgJG9wZW5DRE1T
dXBwb3J0LAogICAgICRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQsCiAgICAgJG92ZXJmbG93U2Ny
b2xsaW5nVG91Y2hTdXBwb3J0LAogICAgICRwYXltZW50UmVxdWVzdFN1cHBvcnQsCkBAIC00NDgs
NiArNDQ5LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJvZmZzY3JlZW4t
Y2FudmFzIiwgZGVzYyA9PiAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMiLCB2YWx1ZSA9PiBcJG9mZnNjcmVl
bkNhbnZhc1N1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJvcGVuY2RtIiwgZGVzYyA9PiAi
VG9nZ2xlIE9wZW5DRE0gc3VwcG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUEVOQ0RN
IiwgdmFsdWUgPT4gXCRvcGVuQ0RNU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gIm9yaWVu
dGF0aW9uLWV2ZW50cyIsIGRlc2MgPT4gIlRvZ2dsZSBPcmllbnRhdGlvbiBFdmVudHMgc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9
PiBcJG9yaWVudGF0aW9uRXZlbnRzU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAzNjAyYjBiYzU2YTkuLmYzMWQzMWE3OWNiMSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0CkBAIC0yOCw2ICsyOCw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICBU
ZXN0cy9XVEYvQXRvbVN0cmluZy5jcHAKICAgICBUZXN0cy9XVEYvQml0bWFwLmNwcAogICAgIFRl
c3RzL1dURi9CbG9vbUZpbHRlci5jcHAKKyAgICBUZXN0cy9XVEYvQm94UHRyLmNwcAogICAgIFRl
c3RzL1dURi9CdW1wUG9pbnRlckFsbG9jYXRvci5jcHAKICAgICBUZXN0cy9XVEYvQ1N0cmluZy5j
cHAKICAgICBUZXN0cy9XVEYvQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAyODlhMDcwNTRiOWUuLmIyYWUwMjk3NjE3MCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTU1OCw2ICs1NTgsNyBAQAogCQk3QzgzREYxNDFEMEE1OTBDMDBG
RUJDRjMgLyogUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQTQyN0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovOyB9OwogCQk3Qzgz
REYxNTFEMEE1OTBDMDBGRUJDRjMgLyogUmVmQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJEMTk5NzFBMkRCMDVCMDA2RENGMEEgLyog
UmVmQ291bnRlci5jcHAgKi87IH07CiAJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAvKiBSZWZQ
dHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNB
NDI3QTgxODBEOUIwNzAwQ0QyNEQ3IC8qIFJlZlB0ci5jcHAgKi87IH07CisJCTdDODNERjE4MUQw
QTU5MEMwMEZFQkNGMyAvKiBCb3hQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNBNDI3QUUxODBEQTYwRjAwQ0QyNEQ3IC8qIEJveFB0ci5jcHAg
Ki87IH07CiAJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1
QkQ2MiAvKiBMb2NrLmNwcCAqLzsgfTsKIAkJN0M4M0RGMjQxRDBBNTkwQzAwRkVCQ0YzIC8qIFJl
dGFpblB0ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMDI5QjFCMTQ4NkIyNTkwMDgxN0RBOSAvKiBSZXRhaW5QdHIubW0gKi87IH07CiAJCTdDODNE
RjI2MUQwQTU5MEMwMEZFQkNGMyAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYzQjExMjE1
RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovOyB9
OwpAQCAtMjMzMCw2ICsyMzMxLDcgQEAKIAkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJl
Zi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWYuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0E0MjdBQzE4MERBNjBGMDBDRDI0RDcgLyogTW92
ZU9ubHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW92ZU9ubHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNBNDI3QUQxODBEQTYwRjAwQ0QyNEQ3IC8qIFJlZkxvZ2dlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZWZMb2dnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBNDI3
QUUxODBEQTYwRjAwQ0QyNEQ3IC8qIEJveFB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCb3hQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0E3MjBFNTE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQkE4MDgxNkREQUI5MTAwMkRCMkZBIC8qIFN0cmlu
Z0hhc2hlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdI
YXNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDQTE1MDZGMDM1
MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MDA0LDYgKzQwMDYsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQzNEYwMEQxRTRCRiAvKiBBdG9tU3Ry
aW5nLmNwcCAqLywKIAkJCQlGRTJEOTQ3MzI0NUVCMkRGMDBFNDgxMzUgLyogQml0bWFwLmNwcCAq
LywKIAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAor
CQkJCTkzQTQyN0FFMTgwREE2MEYwMENEMjRENyAvKiBCb3hQdHIuY3BwICovLAogCQkJCTA0NTFB
NUE2MjM1RTQzOEUwMDlERjk0NSAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
QTdBOTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHAgKi8sCiAJCQkJRTMwMkJEQTkyNDA0QjkyMzAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBs
ZS5jcHAgKi8sCkBAIC00NzIxLDYgKzQ3MjQsNyBAQAogCQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0
ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEQUQxNTAxRDc3QTlGNjAw
MjEyNTg2IC8qIEJsb2NrUHRyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFOUMxRDBBNTkw
QzAwRkVCQ0YzIC8qIEJsb29tRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDODNERjE4
MUQwQTU5MEMwMEZFQkNGMyAvKiBCb3hQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDREQjIz
OTYyMzVFNDNFQzAwMzI4RjE3IC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNGMyAvKiBDaGVja2VkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0QjkyNDAwODY1Mjc3
IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0JveFB0ci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Cb3hQdHIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uYmY0ODIwYzk0ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQm94UHRyLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvZ2dlci5oIgorI2luY2x1
ZGUgPHd0Zi9Cb3hQdHIuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdHJ1Y3Qg
Qm94UHRyTG9nZ2VyIHsKKyAgICBCb3hQdHJMb2dnZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAg
c3RhdGljIEJveFB0ckxvZ2dlciogY3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpIHsgcmV0dXJuIG5l
dyBCb3hQdHJMb2dnZXIobmFtZSk7IH0KKyAgICBjb25zdCBjaGFyJiBuYW1lOworfTsKKworQm94
UHRyTG9nZ2VyOjpCb3hQdHJMb2dnZXIoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG5hbWUgeyAq
bmFtZSB9Cit7CisgICAgbG9nKCkgPDwgImNyZWF0ZSgiIDw8IG5hbWUgPDwgIikgIjsKK30KKwor
dm9pZCBib3hQdHJMb2dnZXJEZWxldGVyKEJveFB0ckxvZ2dlciogbG9nZ2VyKQoreworICAgIGxv
ZygpIDw8ICJkZWxldGUoIiA8PCAmbG9nZ2VyLT5uYW1lIDw8ICIpICI7CisgICAgZGVsZXRlIGxv
Z2dlcjsKK30KKworfTsKKworbmFtZXNwYWNlIFdURiB7CisKK1dURl9ERUZJTkVfQk9YUFRSX0RF
TEVURVIoVGVzdFdlYktpdEFQSTo6Qm94UHRyTG9nZ2VyLCBUZXN0V2ViS2l0QVBJOjpib3hQdHJM
b2dnZXJEZWxldGVyKTsKKworfQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1Qo
V1RGX0JveFB0ciwgQmFzaWMpCit7CisgICAgeworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2Vy
PiBlbXB0eTsKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNlLCBzdGF0aWNfY2FzdDxib29sPihlbXB0
eSkpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoIiIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KworICAgIHsKKyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUo
ImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcHRyID0gY3JlYXRlQm94UHRyKGEp
OworICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocHRyKSk7CisgICAg
ICAgIEVYUEVDVF9FUShhLCBwdHItPmdldCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEtPm5hbWUs
ICgqcHRyKS0+bmFtZSk7CisgICAgfQorICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0
ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxv
Z2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQ
dHJMb2dnZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9n
Z2VyPiBwMihwMSk7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBF
WFBFQ1RfRVEoYSwgcDItPmdldCgpKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUo
YSkgZGVsZXRlKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAg
Qm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94
UHRyPEJveFB0ckxvZ2dlcj4gcDEgPSBjcmVhdGVCb3hQdHIoYSk7CisgICAgICAgIEJveFB0cjxC
b3hQdHJMb2dnZXI+IHAyID0gcDE7CisgICAgICAgIEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoYSwgcDItPmdldCgpKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVR
KCJjcmVhdGUoYSkgZGVsZXRlKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsK
KyAgICAgICAgQm94UHRyTG9nZ2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAg
ICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDEgPSBjcmVhdGVCb3hQdHIoYSk7CisgICAgICAg
IEJveFB0cjxCb3hQdHJMb2dnZXI+IHAyID0gV1RGTW92ZShwMSk7CisgICAgICAgIEVYUEVDVF9F
UShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHAy
LT5nZXQoKSk7CisgICAgfQorICAgIEVYUEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAi
LCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciog
YSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dn
ZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBw
MihXVEZNb3ZlKHAxKSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9v
bD4ocDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHAyLT5nZXQoKSk7CisgICAgfQorICAgIEVY
UEVDVF9TVFJFUSgiY3JlYXRlKGEpIGRlbGV0ZShhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRl
KCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHB0ciA9IGNyZWF0ZUJveFB0cihh
KTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+Z2V0KCkpOworICAgICAgICBwdHIgPSBudWxs
cHRyOworICAgICAgICBFWFBFQ1RfRVEoZmFsc2UsIHN0YXRpY19jYXN0PGJvb2w+KHB0cikpOwor
ICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0
cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Cb3hQdHIsIEFzc2lnbm1lbnQpCit7CisgICAg
eworICAgICAgICBCb3hQdHJMb2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYSIpOwor
ICAgICAgICBCb3hQdHJMb2dnZXIqIGIgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYiIpOworICAg
ICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAg
Qm94UHRyPEJveFB0ckxvZ2dlcj4gcDIgPSBjcmVhdGVCb3hQdHIoYik7CisgICAgICAgIEVYUEVD
VF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYiwgcDItPmdldCgpKTsKKyAg
ICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICAgICAgcDEgPSBwMjsKKyAgICAgICAgRVhQRUNUX0VR
KGIsIHAxLT5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9FUShiLCBwMi0+Z2V0KCkpOworICAgICAg
ICBsb2coKSA8PCAifCAiOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBjcmVh
dGUoYikgfCBkZWxldGUoYSkgfCBkZWxldGUoYikgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwor
CisgICAgeworICAgICAgICBCb3hQdHJMb2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgi
YSIpOworICAgICAgICBCb3hQdHJMb2dnZXIqIGIgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYiIp
OworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsKKyAg
ICAgICAgQm94UHRyPEJveFB0ckxvZ2dlcj4gcDIgPSBjcmVhdGVCb3hQdHIoYik7CisgICAgICAg
IEVYUEVDVF9FUShhLCBwMS0+Z2V0KCkpOworICAgICAgICBFWFBFQ1RfRVEoYiwgcDItPmdldCgp
KTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICAgICAgcDEgPSBXVEZNb3ZlKHAyKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGIsIHAxLT5nZXQoKSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwg
c3RhdGljX2Nhc3Q8Ym9vbD4ocDIpKTsKKyAgICAgICAgbG9nKCkgPDwgInwgIjsKKyAgICB9Cisg
ICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgY3JlYXRlKGIpIHwgZGVsZXRlKGEpIHwgZGVsZXRl
KGIpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKworICAgIHsKKyAgICAgICAgQm94UHRyTG9n
Z2VyKiBhID0gQm94UHRyTG9nZ2VyOjpjcmVhdGUoImEiKTsKKyAgICAgICAgQm94UHRyPEJveFB0
ckxvZ2dlcj4gcHRyID0gY3JlYXRlQm94UHRyKGEpOworICAgICAgICBFWFBFQ1RfRVEoYSwgcHRy
LT5nZXQoKSk7CisgICAgICAgIGxvZygpIDw8ICJ8ICI7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XdW5rbm93bi13YXJuaW5nLW9wdGlvbiIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV3NlbGYtYXNzaWduLW92ZXJsb2FkZWQiCisjZW5kaWYKKyAgICAgICAgcHRyID0g
cHRyOworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
I2VuZGlmCisgICAgICAgIEVYUEVDVF9FUShhLCBwdHItPmdldCgpKTsKKyAgICAgICAgbG9nKCkg
PDwgInwgIjsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgfCB8IGRlbGV0ZShh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dl
ciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJhIik7CisgICAgICAgIEJveFB0cjxCb3hQdHJM
b2dnZXI+IHB0ciA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+
Z2V0KCkpOworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3NlbGYtbW92ZSIKKyNlbmRpZgor
ICAgICAgICBwdHIgPSBXVEZNb3ZlKHB0cik7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyAgICAgICAgRVhQRUNUX0VRKGEsIHB0ci0+
Z2V0KCkpOworICAgIH0KKyAgICBFWFBFQ1RfU1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9Cb3hQdHIsIE9wZXJhdG9ycykK
K3sKKyAgICB7CisgICAgICAgIEJveFB0ckxvZ2dlciogYSA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRl
KCJhIik7CisgICAgICAgIEJveFB0ckxvZ2dlciogYiA9IEJveFB0ckxvZ2dlcjo6Y3JlYXRlKCJi
Iik7CisgICAgICAgIEJveFB0cjxCb3hQdHJMb2dnZXI+IHAxID0gY3JlYXRlQm94UHRyKGEpOwor
ICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBwMiA9IGNyZWF0ZUJveFB0cihiKTsKKyAgICAg
ICAgRVhQRUNUX0VRKCpwMSwgKnAxKTsKKyAgICAgICAgRVhQRUNUX05FKCpwMSwgKnAyKTsKKyAg
ICB9CisgICAgRVhQRUNUX1NUUkVRKCJjcmVhdGUoYSkgY3JlYXRlKGIpIGRlbGV0ZShiKSBkZWxl
dGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisgICAgeworICAgICAgICBCb3hQdHJM
b2dnZXIqIGEgPSBCb3hQdHJMb2dnZXI6OmNyZWF0ZSgiYSIpOworICAgICAgICBCb3hQdHI8Qm94
UHRyTG9nZ2VyPiBwMSA9IGNyZWF0ZUJveFB0cihhKTsKKyAgICAgICAgQm94UHRyPEJveFB0ckxv
Z2dlcj4gcDIocDEpOworICAgICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8Ym9vbD4ocDEpLCB0
cnVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCFwMSwgZmFsc2UpOworICAgIH0KKyAgICBFWFBFQ1Rf
U1RSRVEoImNyZWF0ZShhKSBkZWxldGUoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworCisg
ICAgeworICAgICAgICBCb3hQdHI8Qm94UHRyTG9nZ2VyPiBlbXB0eTsKKyAgICAgICAgRVhQRUNU
X0VRKCFlbXB0eSwgdHJ1ZSk7CisgICAgICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxib29sPihl
bXB0eSksIGZhbHNlKTsKKyAgICB9CisgICAgRVhQRUNUX1NUUkVRKCIiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK307CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5t
b2R1bGVzIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcwppbmRleCA5NTZmMTI2ZDVi
NzUuLjBjMWE4OTRiNWM4MiAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9k
dWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCkBAIC0xMSw2ICsxMSwx
MiBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KICAgICAgIDxkZXAg
cGFja2FnZT0iZ3N0LWxpYmF2Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdHJlYW1lci12YWFw
aSIvPgorICAgICAgPGlmIGNvbmRpdGlvbi1zZXQ9Ik9wZW5DRE0iPgorICAgICAgICA8ZGVwIHBh
Y2thZ2U9InRodW5kZXIiLz4KKyAgICAgICAgPGRlcCBwYWNrYWdlPSJ3aWRldmluZSIvPgorICAg
ICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItY2RtaS13aWRldmluZSIvPgorICAgICAgICA8ZGVw
IHBhY2thZ2U9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgICA8L2lmPgogICAgIDwvZGVw
ZW5kZW5jaWVzPgogICA8L21ldGFtb2R1bGU+CiAKQEAgLTE5LDYgKzI1LDggQEAKICAgICAgIGhy
ZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8iLz4KICAgPHJlcG9zaXRv
cnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ2l0aHViLXRhcmJhbGwiCiAgICAgICBocmVmPSJodHRw
czovL2dpdGh1Yi5jb20vIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0aHVi
LXNzaCIKKyAgICAgIGhyZWY9ImdpdEBnaXRodWIuY29tOiIvPgogICA8cmVwb3NpdG9yeSB0eXBl
PSJnaXQiIG5hbWU9ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20iCiAgICAgICBocmVmPSJodHRw
czovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vd2VibS8iLz4KICAgPHJlcG9zaXRvcnkgdHlw
ZT0iZ2l0IiBuYW1lPSJhb21lZGlhLmdvb2dsZXNvdXJjZS5jb20iCkBAIC03OSw2ICs4Nyw3IEBA
CiAKICAgICA8YnJhbmNoIGhhc2g9InNoYTI1Njo0MGJiM2JhZmRhMjVjMGI3MzljOGZjMzZlNDgz
ODBmY2NmNjFjNGQzZjgzNzQ3ZTk3YWMzZjliMDE3MWIxMzE5IiBtb2R1bGU9ImdzdC1wbHVnaW5z
LWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVy
IiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9Imdvb2QtMDAwMS1xdGRlbXV4
LVNwZWNpZnktUkVESVJFQ1QtaW5mb3JtYXRpb24taW4tZXJyb3ItbWVzc2FnLnBhdGNoIiBzdHJp
cD0iMSIvPiA8IS0tIE1lcmdlZCB1cHN0cmVhbSwgc2hvdWxkIGJlIHNoaXBwZWQgaW4gMS4xNi4z
IC0tPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1h
bi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2giIHN0cmlwPSIx
IiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC05Miw2ICsxMDEsNyBAQAogICAg
IDwvZGVwZW5kZW5jaWVzPgogICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2OmYxY2I3YWEyMzg5NTY5
YTUzNDM2NjFhYWU0NzNmMGE5NDBhOTBiODcyMDAxODI0YmM0N2ZhODA3MmEwNDFlNzQiIG1vZHVs
ZT0iZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke3ZlcnNpb259LnRhci54eiIgcmVw
bz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9ImdzdC1w
bHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJv
a2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGlu
ZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJh
ZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1i
YWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2giIHN0cmlwPSIxIiAv
PgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC0xMjUsNCArMTM1LDg5IEBACiAgICAg
ICAgICAgIGNoZWNrb3V0ZGlyPSJsaWJ2YS0ke3ZlcnNpb259IiByZXBvPSJnaXRodWItdGFyYmFs
bCIvPgogICA8L21lc29uPgogCisgIDxjbWFrZSBpZD0idGh1bmRlciIKKyAgICAgICAgIGNtYWtl
YXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtRFBPUlQ9ODA4MQorICAgICAgICAg
ICAgICAgICAgICAtREJJTkRJTkc9MC4wLjAuMCAtRElETEVfVElNRT0xODAKKyAgICAgICAgICAg
ICAgICAgICAgLURQRVJTSVNURU5UX1BBVEg9L3RtcC90aHVuZGVyL3BlcnNpc3RlbnQKKyAgICAg
ICAgICAgICAgICAgICAgLURWT0xBVElMRV9QQVRIPS90bXAvdGh1bmRlci92b2xhdGlsZQorICAg
ICAgICAgICAgICAgICAgICAtRERBVEFfUEFUSD0ke3ByZWZpeH0vc2hhcmUvV1BFRnJhbWV3b3Jr
CisgICAgICAgICAgICAgICAgICAgIC1EU1lTVEVNX1BBVEg9JHtwcmVmaXh9L2xpYi93cGVmcmFt
ZXdvcmsvcGx1Z2lucworICAgICAgICAgICAgICAgICAgICAtRFBST1hZU1RVQl9QQVRIPSR7cHJl
Zml4fS9saWIvd3BlZnJhbWV3b3JrL3Byb3h5c3R1YnMKKyAgICAgICAgICAgICAgICAgICAgLURP
T01BREpVU1Q9IC1EQlVJTERfVFlQRT1SZWxlYXNlU3ltYm9scworICAgICAgICAgICAgICAgICAg
ICAtREJMVUVUT09USF9TVVBQT1JUPU9GRiAtRFZJUlRVQUxJTlBVVD1PRkYKKyAgICAgICAgICAg
ICAgICAgICAgLURDT01QT1NJVE9SQ0xJRU5UPU9GRiAtRENPTVBPU0lUT1JDTElFTlQ9T0ZGCisg
ICAgICAgICAgICAgICAgICAgIC1EQlJPQURDQVNUPU9GRiAtRENETUk9T04gLURDRE1JX0JDTV9O
RVhVU19TVlA9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQ0RNSV9BREFQVEVSX0lNUExFTUVO
VEFUSU9OPWdzdHJlYW1lcgorICAgICAgICAgICAgICAgICAgICAtREdTVFJFQU1FUkNMSUVOVD1P
RkYgLURQUk9WSVNJT05QUk9YWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURTRUNVUklUWUFH
RU5UPU9GRiAtRENPTVBPU0lUT1JTRVJWRVJQTFVHSU49T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EUExVR0lOX1dFQktJVEJST1dTRVI9T0ZGIC1EUExVR0lOX1dFQlNFUlZFUj1PRkYKKyAgICAg
ICAgICAgICAgICAgICAgLURQTFVHSU5fRVNQSUFMPU9GRiAtRE5FVFdPUktDT05UUk9MPU9GRiI+
CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIgbW9kdWxlPSJyZGtjZW50cmFsL1Ro
dW5kZXIvdGFyYmFsbC8ke3ZlcnNpb259IiB2ZXJzaW9uPSI2YWRlZWUwMDZmZWNkZDFiMmJjNDli
ZDM2MGQ0OWZjNTcxOGRlYjYxIiBjaGVja291dGRpcj0idGh1bmRlciIvPgorICA8L2NtYWtlPgor
CisgIDxhdXRvdG9vbHMgaWQ9IndpZGV2aW5lIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0i
bm8iCisgICAgICAgICAgICAgYXV0b2dlbi1zaD0iYnVpbGQucHkiIGF1dG9nZW5hcmdzPSJ4ODYt
NjQgLXIgLURPRU1DUllQVE9fS0VZQk9YX1BBVEhfUFJFRklYPSR7cHJlZml4fSIKKyAgICAgICAg
ICAgICBtYWtlYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIgorICAgICAgICAgICAgIG1ha2Vp
bnN0YWxsYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIC1mIE1ha2VmaWxlLmluc3RhbGwiID4K
KyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAg
PC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItc3NoIiBtb2R1bGU9Ik1l
dHJvbG9naWNhbC93aWRldmluZS5naXQiIGNoZWNrb3V0ZGlyPSJ3aWRldmluZSIgdGFnPSIyNjRj
MTM3NTAxYjI4OWUzNTZiMTFkYWNjMzI5YjA1NjM2ZWE5Mzk2Ii8+CisgIDwvYXV0b3Rvb2xzPgor
CisgIDxjbWFrZSBpZD0idGh1bmRlci1jZG1pLXdpZGV2aW5lIiBjbWFrZWFyZ3M9Ii1EQ01BS0Vf
QlVJTERfVFlQRT1SZWxXaXRoRGViSW5mbyI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFy
YmFsbCIKKyAgICAgICAgICAgIG1vZHVsZT0iV2ViUGxhdGZvcm1Gb3JFbWJlZGRlZC9PQ0RNLVdp
ZGV2aW5lL3RhcmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAgICAgICAgIHZlcnNpb249IjlkYzM5NjRi
MDMzOWFiYjcwZDY2ZTRmOTMxNjMyMzI0YTA3NWQ2ZDQiIGNoZWNrb3V0ZGlyPSJ0aHVuZGVyLWNk
bWktd2lkZXZpbmUiLz4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0
aHVuZGVyIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+CisgICAgPC9kZXBlbmRl
bmNpZXM+CisgIDwvY21ha2U+CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIK
KyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtREJVSUxE
X1RZUEU9UmVsZWFzZVN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQ09CQUxU
PU9GRiAtRFBMVUdJTl9DT01NQU5ERVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X0RFVklDRUlORk89T0ZGIC1EUExVR0lOX0RJU1BMQVlJTkZPPU9GRgorICAgICAgICAgICAgICAg
ICAgICAtRFBMVUdJTl9ERVZJQ0VJREVOVElGSUNBVElPTj1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURQTFVHSU5fRFNSRVNPTFVUSU9OPU9GRiAtRFBMVUdJTl9ESENQU0VSVkVSPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ESUFMU0VSVkVSPU9GRiAtRFBMVUdJTl9ESUNUSU9O
QVJZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9JT0NPTk5FQ1RPUj1PRkYgLURQ
TFVHSU5fRUdMVEVTVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRlJPTlRQQU5F
TD1PRkYgLURQTFVHSU5fTE9DQVRJT05TWU5DPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9NT05JVE9SPU9GRiAtRFBMVUdJTl9ORVRXT1JLQ09OVFJPTD1PRkYKKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fT1BFTkNETUk9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fT1BFTkNETUlfQVVUT1NUQVJUPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5f
T1BFTkNETUlfT09QPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlf
V0lERVZJTkU9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQ0xFQVJL
RVk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX1BMQVlSRUFEWT1P
RkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfTkFHUkE9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX05DQVM9T0ZGIC1EUExVR0lOX0JMVUVU
T09USD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQkxVRVRPT1RIUkVNT1RFQ09O
VFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUkVNT1RFQ09OVFJPTD1PRkYg
LURQTFVHSU5fU05BUFNIT1Q9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1NZU1RF
TUNPTU1BTkRTPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9GSUxFVFJBTlNGRVI9
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RFU1RDT05UUk9MTEVSPU9GRiAtRFBM
VUdJTl9KU09OUlBDPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9URVNUVVRJTElU
WT1PRkYgLURQTFVHSU5fVElNRVNZTkM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X1RSQUNFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fVk9MVU1FQ09O
VFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VCS0lUQlJPV1NFUj1PRkYg
LURQTFVHSU5fUlRTUENMSUVOVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VC
UEE9T0ZGIC1EUExVR0lOX1dFQlBST1hZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9XRUJTRVJWRVI9T0ZGIC1EUExVR0lOX1dFQlNIRUxMPU9GRgorICAgICAgICAgICAgICAgICAg
ICAtRFBMVUdJTl9XSUZJQ09OVFJPTD1PRkYgLURQTFVHSU5fUEFDS0FHRVI9T0ZGCisgICAgICAg
ICAgICAgICAgICAgIC1EUExVR0lOX1BMQVlFUklORk89T0ZGIC1EUExVR0lOX1BPV0VSPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9QUk9DRVNTTU9OSVRPUj1PRkYgLURQTFVHSU5f
U1RSRUFNRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1NQQVJLPU9GRiAtRFBM
QVRGT1JNX0xJTlVYPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX01FU1NFTkdFUj1P
RkYgLURQTFVHSU5fU0VDVVJJVFlBR0VOVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fUlBDTElOSz1PRkYgLURQTFVHSU5fQ09NUE9TSVRPUj1PRkYiPgorICAgIDxicmFuY2ggcmVw
bz0iZ2l0aHViLXRhcmJhbGwiCisgICAgICAgICAgICBtb2R1bGU9InJka2NlbnRyYWwvVGh1bmRl
ck5hbm9TZXJ2aWNlcy90YXJiYWxsLyR7dmVyc2lvbn0iCisgICAgICAgICAgICB2ZXJzaW9uPSJk
ZTlmM2Q0MGQ4NDA4ZWU4MTFjNDhmNDg2YzliMTRmNzUyYzk3MzQ1IgorICAgICAgICAgICAgY2hl
Y2tvdXRkaXI9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgPGRlcGVuZGVuY2llcz4KKyAg
ICAgIDxkZXAgcGFja2FnZT0idGh1bmRlciIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVy
LWNkbWktd2lkZXZpbmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9jbWFrZT4KKwogPC9t
b2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lu
cy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2ggYi9Ub29scy9n
c3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90
ZWN0aW9uLWRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li44Zjk5NDZmMGU5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hl
cy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0
Y2gKQEAgLTAsMCArMSwyNDcgQEAKK0Zyb20gMDA1MmYzZDgzMTVlOGNlZmIwNGE2MmE2NGNhYzE3
Y2JmYmM2YjhiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJsaWUgVHVybmVy
IDxjaHR1cm5lQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjUgTWF5IDIwMTggMDk6NDM6MzAgKzAx
MDAKK1N1YmplY3Q6IFtQQVRDSF0gUGFyc2UgcGxheXJlYWR5IHBheWxvYWQuCisKK0xvb2sgYXQg
dGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBkYXRhIHBheWxvYWQgdG8gZXh0cmFjdCBkZWZhdWx0IGtl
eSBpZHMKK2ZvciBkZWNyeXB0aW5nIHNhbXBsZXMuIFRoZSBmb3JtYXQgb2YgdGhpcyBwYXlsb2Fk
IHNlZW1zIHRvIGJlCitwcm9wcmlldGFyeS4KKworU2lnbmVkLW9mZi1ieTogWGFiaWVyIFJvZHJp
Z3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CistLS0KKyBleHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc2RlbXV4LmMgICAgfCAgMTQgKystCisgZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rt
c3NtYW5pZmVzdC5jIHwgMTM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIGV4dC9zbW9v
dGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaCB8ICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAx
NTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290
aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11
eC5jCitpbmRleCBiY2VhOGNhLi40ZmE5NWI5IDEwMDY0NAorLS0tIGEvZXh0L3Ntb290aHN0cmVh
bWluZy9nc3Rtc3NkZW11eC5jCisrKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4
LmMKK0BAIC00OTUsNyArNDk1LDE5IEBAIGdzdF9tc3NfZGVtdXhfc2V0dXBfc3RyZWFtcyAoR3N0
QWRhcHRpdmVEZW11eCAqIGRlbXV4KQorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rp
b24gKHByb3RlY3Rpb25fc3lzdGVtX2lkLCBwcm90ZWN0aW9uX2J1ZmZlciwKKyAgICAgICAgICAg
InNtb290aC1zdHJlYW1pbmciKTsKKyAKKy0gICAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLCAi
UXVldWVpbmcgUHJvdGVjdGlvbiBldmVudCBvbiBzb3VyY2UgcGFkIik7CisrICAgICAgR3N0QnVm
ZmVyICprZXlfaWQgPSBnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKG1zc2RlbXV4LT5tYW5p
ZmVzdCk7CisrICAgICAgaWYgKCFnc3RfYnVmZmVyX2dldF9zaXplIChrZXlfaWQpKSB7CisrICAg
ICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAicHJvdGVjdGVk
IG1hbmlmZXN0LCBidXQgbm8ga2V5IGlkcyBhdmFpbGFibGUiKTsKKysgICAgICB9IGVsc2Ugewor
KyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAiQWRkaW5nIGtl
eSBpZCB0byB0aGUgcHJvdGVjdGlvbiBldmVudCBvZiBzaXplICVsdSIsCisrICAgICAgICAgICAg
Z3N0X2J1ZmZlcl9nZXRfc2l6ZSAoa2V5X2lkKSk7CisrICAgICAgICBHc3RTdHJ1Y3R1cmUgKnN0
cnVjdHVyZSA9IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2ZW50KTsKKysgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIs
IGtleV9pZCwgTlVMTCk7CisrICAgICAgfQorKworKyAgICAgIEdTVF9MT0dfT0JKRUNUIChzdHJl
YW0sICJRdWV1aW5nIFByb3RlY3Rpb24gZXZlbnQgb24gc291cmNlIHBhZCIpOworICAgICAgIGdz
dF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fcXVldWVfZXZlbnQgKChHc3RBZGFwdGl2ZURlbXV4U3Ry
ZWFtICopIHN0cmVhbSwKKyAgICAgICAgICAgZXZlbnQpOworICAgICAgIGdzdF9idWZmZXJfdW5y
ZWYgKHByb3RlY3Rpb25fYnVmZmVyKTsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5n
L2dzdG1zc21hbmlmZXN0LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMK
K2luZGV4IGM4NTVjYjMuLmRmMzEzMzAgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5n
L2dzdG1zc21hbmlmZXN0LmMKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZl
c3QuYworQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8
bGlieG1sL3BhcnNlci5oPgorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorKyNpbmNsdWRlIDxs
aWJ4bWwveHBhdGguaD4KKysjaW5jbHVkZSA8bGlieG1sL3hwYXRoSW50ZXJuYWxzLmg+CisgCisg
LyogZm9yIHBhcnNpbmcgaDI2NCBjb2RlYyBkYXRhICovCisgI2luY2x1ZGUgPGdzdC9jb2RlY3Bh
cnNlcnMvZ3N0aDI2NHBhcnNlci5oPgorQEAgLTEwOSw2ICsxMTEsMTAgQEAgc3RydWN0IF9Hc3RN
c3NNYW5pZmVzdAorICAgR1N0cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1faWQ7CisgICBnY2hhciAq
cHJvdGVjdGlvbl9kYXRhOworIAorKyAgLy8gRklYTUU6IFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBr
ZXkgaWRzIHByZXNlbnQgaW4gcHJvdGVjdGVkIG1hbmlmZXN0cy4KKysgIGdjaGFyICprZXlfaWQ7
CisrICBnc2l6ZSBrZXlfaWRfbGVuOworKworICAgR1NMaXN0ICpzdHJlYW1zOworIH07CisgCitA
QCAtMzAwLDYgKzMwNiwxMjIgQEAgX2dzdF9tc3Nfc3RyZWFtX2luaXQgKEdzdE1zc01hbmlmZXN0
ICogbWFuaWZlc3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwKKyAgIGdzdF9tc3NfZnJhZ21lbnRf
cGFyc2VyX2luaXQgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7CisgfQorIAorK3N0YXRpYyB2
b2lkCisrX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0KQorK3sKKysgIGd1Y2hhciAqZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEgPSBOVUxMOwor
KyAgZ3NpemUgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuID0gMDsKKysgIHhtbENoYXIgKnBy
b3RlY3Rpb25fZGF0YV90ZXh0ID0gTlVMTDsKKysgIGludCBwcm90ZWN0aW9uX2RhdGFfdGV4dF9s
ZW4gPSAwOworKyAgeG1sRG9jUHRyIHByb3RlY3Rpb25fZGF0YV94bWwgPSBOVUxMOworKyAgLy8g
Tm90ZSwgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGZyZWUnZCwgZnJlZWluZyB0aGUgZG9jIHB0ciB3
aWxsIGZyZWUgdGhpcy4KKysgIHhtbE5vZGUgKnByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQg
PSBOVUxMOworKyAgY29uc3QgeG1sQ2hhciAqcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IE5V
TEw7CisrICB4bWxYUGF0aENvbnRleHRQdHIgeHBhdGhfY3R4ID0gTlVMTDsKKysgIHhtbFhQYXRo
T2JqZWN0UHRyIHhwYXRoX29iaiA9IE5VTEw7CisrICB4bWxOb2RlU2V0UHRyIGtleV9pZF9ub2Rl
ID0gTlVMTDsKKysgIGdzaXplIHByb3RlY3Rpb25fZGF0YV94bWxfbGVuID0gMDsKKysgIGd1Y2hh
ciAqc3RhcnRfdGFnID0gTlVMTDsKKysKKysgIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhID0KKysg
ICAgICBnX2Jhc2U2NF9kZWNvZGUgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGEsICZkZWNvZGVk
X3Byb3RlY3Rpb25fZGF0YV9sZW4pOworKworKyAgc3RhcnRfdGFnID0gZGVjb2RlZF9wcm90ZWN0
aW9uX2RhdGE7CisrCisrICAvLyBUaGUgcHJvdGVjdGlvbiBkYXRhIHN0YXJ0cyB3aXRoIGEgMTAt
Ynl0ZSBQbGF5UmVhZHkgdmVyc2lvbgorKyAgLy8gaGVhZGVyIHRoYXQgbmVlZHMgdG8gYmUgc2tp
cHBlZCBvdmVyIHRvIGF2b2lkIFhNTCBwYXJzaW5nCisrICAvLyBlcnJvcnMuCisrICB3aGlsZSAo
c3RhcnRfdGFnICYmICpzdGFydF90YWcgIT0gJzwnKQorKyAgICBzdGFydF90YWcrKzsKKysKKysg
IGlmICghc3RhcnRfdGFnKSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBmaW5kIGEgc3Rh
cnQgdGFnIGluIHByb3RlY3Rpb24gZGF0YSBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7Cisr
ICB9CisrCisrICBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiA9CisrICAgICAgZGVjb2RlZF9wcm90
ZWN0aW9uX2RhdGFfbGVuIC0gKHN0YXJ0X3RhZyAtIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhKTsK
KysgIHByb3RlY3Rpb25fZGF0YV94bWwgPQorKyAgICAgIHhtbFJlYWRNZW1vcnkgKChjb25zdCBn
Y2hhciAqKSBzdGFydF90YWcsIHByb3RlY3Rpb25fZGF0YV94bWxfbGVuLAorKyAgICAgICJwcm90
ZWN0aW9uX2RhdGEiLCAidXRmLTE2IiwgMCk7CisrCisrICBpZiAoIXByb3RlY3Rpb25fZGF0YV94
bWwpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHBhcnNlIHByb3RlY3Rpb24gZGF0YSBY
TUwiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGlmIChnc3RfZGVidWdfY2F0ZWdv
cnlfZ2V0X3RocmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxUKSA+PSBHU1RfTEVWRUxfTUVNRFVNUCkg
eworKyAgICB4bWxEb2NEdW1wTWVtb3J5RW5jIChwcm90ZWN0aW9uX2RhdGFfeG1sLCAmcHJvdGVj
dGlvbl9kYXRhX3RleHQsCisrICAgICAgICAmcHJvdGVjdGlvbl9kYXRhX3RleHRfbGVuLCAidXRm
OCIpOworKyAgICBHU1RfTUVNRFVNUCAoInByb3RlY3Rpb24gZGF0YSBYTUwiLCBwcm90ZWN0aW9u
X2RhdGFfdGV4dCwKKysgICAgICAgIHByb3RlY3Rpb25fZGF0YV90ZXh0X2xlbik7CisrICAgIHht
bEZyZWUgKHByb3RlY3Rpb25fZGF0YV90ZXh0KTsKKysgIH0KKysKKysgIHByb3RlY3Rpb25fZGF0
YV9yb290X2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudCAocHJvdGVjdGlvbl9kYXRhX3ht
bCk7CisrICBpZiAocHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+dHlwZSAhPSBYTUxfRUxF
TUVOVF9OT0RFIHx8CisrICAgICAgeG1sU3RyY21wIChwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVt
ZW50LT5uYW1lLAorKyAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqKSAiV1JNSEVBREVSIikgfHwg
IXByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zKSB7CisrICAgIEdTVF9FUlJPUiAoImlu
dmFsaWQgcHJvdGVjdGlvbiBkYXRhIFhNTCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKwor
KyAgeHBhdGhfY3R4ID0geG1sWFBhdGhOZXdDb250ZXh0IChwcm90ZWN0aW9uX2RhdGFfeG1sKTsK
KysgIGlmICgheHBhdGhfY3R4KSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjcmVhdGUg
eHBhdGggY29udGV4dCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgcHJvdGVjdGlv
bl9kYXRhX25hbWVzcGFjZSA9IHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zLT5ocmVm
OworKyAgaWYgKHhtbFhQYXRoUmVnaXN0ZXJOcyAoeHBhdGhfY3R4LCAoY29uc3QgeG1sQ2hhciAq
KSAicHJoZHIiLAorKyAgICAgICAgICBwcm90ZWN0aW9uX2RhdGFfbmFtZXNwYWNlKSA8IDApIHsK
KysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHJlZ2lzdGVyIFhNTCBuYW1lc3BhY2UiKTsKKysg
ICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIHhwYXRoX29iaiA9CisrICAgICAgeG1sWFBhdGhF
dmFsRXhwcmVzc2lvbiAoKGNvbnN0IHhtbENoYXIgKikgIi8vcHJoZHI6S0lEIiwgeHBhdGhfY3R4
KTsKKysgIGlmICgheHBhdGhfb2JqKSB7CisrICAgIEdTVF9ERUJVRyAoImZhaWxlZCB0byBldmFs
IFhQYXRoIGV4cHJlc3Npb24iKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGtleV9p
ZF9ub2RlID0geHBhdGhfb2JqLT5ub2Rlc2V0dmFsOworKyAgaW50IG51bV9rZXlfaWRzID0ga2V5
X2lkX25vZGUgPyBrZXlfaWRfbm9kZS0+bm9kZU5yIDogMDsKKysKKysgIEdTVF9ERUJVRyAoImZv
dW5kICVkIGtleSBpZHMiLCBudW1fa2V5X2lkcyk7CisrCisrICBpZiAobnVtX2tleV9pZHMgIT0g
MCAmJiAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0tPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkp
IHsKKysgICAgeG1sQ2hhciAqZW5jb2RlZF9rZXlfaWQgPSB4bWxOb2RlR2V0Q29udGVudCAoa2V5
X2lkX25vZGUtPm5vZGVUYWJbMF0pOworKyAgICBnc2l6ZSBkZWNvZGVkX2tleV9pZF9sZW47Cisr
ICAgIGd1Y2hhciAqZGVjb2RlZF9rZXlfaWQgPQorKyAgICAgICAgZ19iYXNlNjRfZGVjb2RlICgo
Y29uc3QgZ2NoYXIgKikgZW5jb2RlZF9rZXlfaWQsICZkZWNvZGVkX2tleV9pZF9sZW4pOworKwor
KyAgICBHU1RfTUVNRFVNUCAoImtleSByZXRyaWV2ZWQiLCBkZWNvZGVkX2tleV9pZCwgZGVjb2Rl
ZF9rZXlfaWRfbGVuKTsKKysKKysgICAgbWFuaWZlc3QtPmtleV9pZCA9IGdfcmVhbGxvYyAobWFu
aWZlc3QtPmtleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWVtY3B5IChtYW5pZmVz
dC0+a2V5X2lkLCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWFu
aWZlc3QtPmtleV9pZF9sZW4gPSBkZWNvZGVkX2tleV9pZF9sZW47CisrCisrICAgIHhtbEZyZWUg
KGVuY29kZWRfa2V5X2lkKTsKKysgICAgZ19mcmVlIChkZWNvZGVkX2tleV9pZCk7CisrICB9IGVs
c2UgeworKyAgICBHU1RfRVJST1IgKCJpbnZhbGlkIFhNTCBwYXlsb2FkIik7CisrICAgIGdvdG8g
YmVhY2g7CisrICB9CisrCisrYmVhY2g6CisrICBpZiAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEp
CisrICAgIGdfZnJlZSAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpOworKyAgaWYgKHhwYXRoX2N0
eCkKKysgICAgeG1sWFBhdGhGcmVlQ29udGV4dCAoeHBhdGhfY3R4KTsKKysgIGlmICh4cGF0aF9v
YmopCisrICAgIHhtbFhQYXRoRnJlZU9iamVjdCAoeHBhdGhfb2JqKTsKKysgIGlmIChwcm90ZWN0
aW9uX2RhdGFfeG1sKQorKyAgICB4bWxGcmVlRG9jIChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysK
KysgIHJldHVybjsKKyt9CisgCisgc3RhdGljIHZvaWQKKyBfZ3N0X21zc19wYXJzZV9wcm90ZWN0
aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorQEAgLTMyOSw2ICs0NTEsNyBAQCBfZ3N0
X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorIAorICAg
ICAgIG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCA9IHN5c3RlbV9pZDsKKyAgICAgICBt
YW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhID0gKGdjaGFyICopIHhtbE5vZGVHZXRDb250ZW50IChu
b2RlaXRlcik7CisrICAgICAgX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChtYW5pZmVz
dCk7CisgICAgICAgeG1sRnJlZSAoc3lzdGVtX2lkX2F0dHJpYnV0ZSk7CisgICAgICAgYnJlYWs7
CisgICAgIH0KK0BAIC0zOTQsNiArNTE3LDkgQEAgZ3N0X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1
ZmZlciAqIGRhdGEpCisgICAgIH0KKyAgIH0KKyAKKysgIG1hbmlmZXN0LT5rZXlfaWQgPSBOVUxM
OworKyAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSAwOworKworICAgZm9yIChub2RlaXRlciA9IHJv
b3QtPmNoaWxkcmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRlci0+bmV4dCkgeworICAg
ICBpZiAobm9kZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQorICAgICAgICAgJiYgKHN0
cmNtcCAoKGNvbnN0IGNoYXIgKikgbm9kZWl0ZXItPm5hbWUsICJTdHJlYW1JbmRleCIpID09IDAp
KSB7CitAQCAtNDQwLDYgKzU2Niw5IEBAIGdzdF9tc3NfbWFuaWZlc3RfZnJlZSAoR3N0TXNzTWFu
aWZlc3QgKiBtYW5pZmVzdCkKKyAKKyAgIGdfc2xpc3RfZnJlZV9mdWxsIChtYW5pZmVzdC0+c3Ry
ZWFtcywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfbXNzX3N0cmVhbV9mcmVlKTsKKyAKKysgIGlmICht
YW5pZmVzdC0+a2V5X2lkKQorKyAgICBnX2ZyZWUgKG1hbmlmZXN0LT5rZXlfaWQpOworKworICAg
aWYgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCAhPSBOVUxMKQorICAgICBnX3N0cmlu
Z19mcmVlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQsIFRSVUUpOworICAgeG1sRnJl
ZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSk7CitAQCAtNDYyLDYgKzU5MSwxNSBAQCBnc3Rf
bXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZl
c3QpCisgICByZXR1cm4gbWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YTsKKyB9CisgCisrR3N0QnVm
ZmVyICoKKytnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKEdzdE1zc01hbmlmZXN0ICogbWFu
aWZlc3QpCisreworKyAgR3N0QnVmZmVyICprZXlfaWRfYnVmZmVyID0KKysgICAgICBnc3RfYnVm
ZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbWFuaWZlc3QtPmtleV9pZF9sZW4sIE5VTEwpOworKyAg
Z3N0X2J1ZmZlcl9maWxsIChrZXlfaWRfYnVmZmVyLCAwLCBtYW5pZmVzdC0+a2V5X2lkLCBtYW5p
ZmVzdC0+a2V5X2lkX2xlbik7CisrICByZXR1cm4ga2V5X2lkX2J1ZmZlcjsKKyt9CisrCisgR1NM
aXN0ICoKKyBnc3RfbXNzX21hbmlmZXN0X2dldF9zdHJlYW1zIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0KQorIHsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlm
ZXN0LmggYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKK2luZGV4IDAzYjA2
NmEuLjRlNmFkNzMgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlm
ZXN0LmgKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAorQEAgLTU2
LDYgKzU2LDcgQEAgR3N0Q2xvY2tUaW1lIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X21pbl9mcmFnbWVu
dF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmUKKyBjb25zdCBnY2hhciAqIGdzdF9t
c3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fc3lzdGVtX2lkIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0KTsKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25f
ZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7CisgZ2Jvb2xlYW4gZ3N0X21zc19tYW5p
ZmVzdF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LCBnaW50
NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCk7CisrR3N0QnVmZmVyICogZ3N0X21zc19tYW5pZmVz
dF9nZXRfa2V5X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyAKKyBHc3RNc3NTdHJl
YW1UeXBlIGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChHc3RNc3NTdHJlYW0gKnN0cmVhbSk7Cisg
R3N0Q2FwcyAqIGdzdF9tc3Nfc3RyZWFtX2dldF9jYXBzIChHc3RNc3NTdHJlYW0gKiBzdHJlYW0p
OworLS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0
LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQt
YS1kZWZhdWx0LWtpZC5wYXRjaCBiL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5z
LWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVs
dC1raWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNWY1
YmIzNDhhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3Qt
cGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRlZC1h
LWRlZmF1bHQta2lkLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGE4MTZkOGRhYjZiYjMz
NzcwMTUwMjg5YTRhZWRlNDNlMmY3YWU0NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9t
OiBDaGFybGllIFR1cm5lciA8Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIE1heSAy
MDE5IDIzOjM0OjQzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIGFuIHVwc3RyZWFt
IGRlbXV4ZXIgcHJvdmlkZWQgYSBkZWZhdWx0IGtpZC4KKworU21vb3RoIHN0cmVhbWluZyBkZW11
eGVycyBkbyBub3Qgc2VuZCBib3hlcyBjb250YWluaW5nIG1ldGFkYXRhIGFib3V0Cit0aGUgc3Ry
ZWFtLiBUaGV5IGhhdmUgdG8gc2VuZCBtZXRhZGF0YSAib3V0LW9mLWJhbmQiLgorCitGb3IgcGlm
ZiBlbmNvZGVkIHN0cmVhbXMsIGlmIG5vIGJveCBoYXMgYmVlbiBmb3VuZCBjb250YWluaW5nIGEg
ZGVmYXVsdAora2lkIGZvciB0aGUgc2FtcGxlLCBjaGVjayBpZiBhbiB1cHN0cmVhbSBkZW11eGVy
IGhhcyBwcm92aWRlZCBvbmUgdmlhIGEKK3Byb3RlY3Rpb24gZXZlbnQsIGFuZCB1c2UgdGhpcyBh
cyBhIGZhbGxiYWNrLgorCitTaWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8
Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKy0tLQorIGdzdC9pc29tcDQvcXRkZW11eC5jIHwgNDMgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2Vk
LCA0MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXguYyBi
L2dzdC9pc29tcDQvcXRkZW11eC5jCitpbmRleCBjZjE1ZmFkNDYuLmU0NDliNDgwYyAxMDA2NDQK
Ky0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5jCisrKysgYi9nc3QvaXNvbXA0L3F0ZGVtdXguYwor
QEAgLTQ1MSw2ICs0NTEsNyBAQCBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0KKyAgIGd1aW50MzIgcHJv
dGVjdGlvbl9zY2hlbWVfdmVyc2lvbjsKKyAgIGdwb2ludGVyIHByb3RlY3Rpb25fc2NoZW1lX2lu
Zm87ICAgICAgLyogc3BlY2lmaWMgdG8gdGhlIHByb3RlY3Rpb24gc2NoZW1lICovCisgICBHUXVl
dWUgcHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWU7CisrICBHc3RCdWZmZXIgKmRlZmF1bHRf
a2lkOworIAorICAgZ2ludCByZWZfY291bnQ7ICAgICAgICAgICAgICAgLyogYXRvbWljICovCisg
fTsKK0BAIC0yMDA4LDYgKzIwMDksNyBAQCBfY3JlYXRlX3N0cmVhbSAoR3N0UVREZW11eCAqIGRl
bXV4LCBndWludDMyIHRyYWNrX2lkKQorICAgc3RyZWFtLT5zdHJlYW1fdGFncyA9IGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkgKCk7CisgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChzdHJlYW0tPnN0
cmVhbV90YWdzLCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7CisgICBnX3F1ZXVlX2luaXQgKCZzdHJl
YW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlKTsKKysgIHN0cmVhbS0+ZGVmYXVsdF9r
aWQgPSBOVUxMOworICAgc3RyZWFtLT5yZWZfY291bnQgPSAxOworICAgLyogY29uc2lzdGVudCBk
ZWZhdWx0IGZvciBwdXNoIGJhc2VkIG1vZGUgKi8KKyAgIGdzdF9zZWdtZW50X2luaXQgKCZzdHJl
YW0tPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CitAQCAtMjQ3Niw2ICsyNDc4LDMyIEBAIGdz
dF9xdGRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3Qg
KiBwYXJlbnQsCisgICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046CisgICAgIHsKKyAgICAg
ICBjb25zdCBnY2hhciAqc3lzdGVtX2lkID0gTlVMTDsKKysgICAgICBHc3RCdWZmZXIgKmRlZmF1
bHRfa2V5X2lkID0gTlVMTDsKKysgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsK
KysgICAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBOVUxMOworKyAgICAgIEdzdE1hcEluZm8g
bWFwOworKworKyAgICAgIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVu
dCk7CisrICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUs
ICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIpKSB7CisrICAgICAgICBnc3Rfc3RydWN0dXJlX2dl
dCAoc3RydWN0dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVSLAorKyAgICAgICAgICAgICZk
ZWZhdWx0X2tleV9pZCwgTlVMTCk7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwK
KysgICAgICAgICAgICAicmVjZWl2ZWQgYSBkZWZhdWx0IGtleSBpZCBvZiBzaXplICUiIEdfR1NJ
WkVfRk9STUFULAorKyAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGRlZmF1bHRfa2V5
X2lkKSk7CisrCisrICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQg
KEdTVF9DQVRfREVGQVVMVCkgPj0KKysgICAgICAgICAgICBHU1RfTEVWRUxfTUVNRFVNUCkgewor
KyAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoZGVmYXVsdF9rZXlfaWQsICZtYXAsIEdTVF9NQVBf
UkVBRCk7CisrICAgICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAoZGVtdXgsICJkZWZhdWx0IGtl
eSBpZCIsIChndWludDggKikgbWFwLmRhdGEsCisrICAgICAgICAgICAgICBtYXAuc2l6ZSk7Cisr
ICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGRlZmF1bHRfa2V5X2lkLCAmbWFwKTsKKysgICAg
ICAgIH0KKysKKysgICAgICAgIGlmIChRVERFTVVYX05fU1RSRUFNUyAoZGVtdXgpKSB7CisrICAg
ICAgICAgIHN0cmVhbSA9IFFUREVNVVhfTlRIX1NUUkVBTSAoZGVtdXgsIDApOworKyAgICAgICAg
ICBzdHJlYW0tPmRlZmF1bHRfa2lkID0gZGVmYXVsdF9rZXlfaWQ7CisrICAgICAgICB9CisrICAg
ICAgfQorIAorICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uIChldmVudCwgJnN5c3Rl
bV9pZCwgTlVMTCwgTlVMTCk7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZWNl
aXZlZCBwcm90ZWN0aW9uIGV2ZW50IGZvciBzeXN0ZW0gSUQgJXMiLAorQEAgLTI2ODgsNiArMjcx
Niw4IEBAIGdzdF9xdGRlbXV4X3N0cmVhbV9jbGVhciAoUXREZW11eFN0cmVhbSAqIHN0cmVhbSkK
KyAgIGdfcXVldWVfZm9yZWFjaCAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVl
dWUsCisgICAgICAgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwpOworICAgZ19xdWV1ZV9j
bGVhciAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUpOworKyAgaWYgKHN0
cmVhbS0+ZGVmYXVsdF9raWQpCisrICAgIGdzdF9idWZmZXJfdW5yZWYgKHN0cmVhbS0+ZGVmYXVs
dF9raWQpOworICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21lbnRzX2RhdGEgKHN0cmVh
bSk7CisgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19kYXRhIChzdHJlYW0pOwor
IH0KK0BAIC0yOTU0LDYgKzI5ODQsMTkgQEAgcXRkZW11eF9wYXJzZV9waWZmIChHc3RRVERlbXV4
ICogcXRkZW11eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBnaW50IGxlbmd0aCwKKyAgICAgdXNl
c19zdWJfc2FtcGxlX2VuY3J5cHRpb24gPSBUUlVFOworICAgfQorIAorKyAgLy8gSW4gdGhlIGNh
c2Ugb2Ygc21vb3RoIHN0cmVhbWluZywgd2UgbmV2ZXIgZ2V0IG1vb3YgYm94ZXMgYW5kIHRoZWly
CisrICAvLyBkZWZhdWx0IGVuY3J5cHRpb24gbWV0YWRhdGEuIEluc3RlYWQsIHRoZSBkZW11eGVy
IGhhcyB0byBwYXJzZSB0aGlzCisrICAvLyBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIHBsYXlyZWFk
eSBzcGVjaWZpYyBwYXlsb2FkcyBhbmQgbWFrZSBpdCBhdmFpbGJsZQorKyAgLy8gc29tZWhvdyB0
byB1cy4KKysgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHNzX2luZm8tPmRlZmF1bHRf
cHJvcGVydGllcywgImtpZCIpKSB7CisrICAgIGlmICghc3RyZWFtLT5kZWZhdWx0X2tpZCkgewor
KyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIk5vIGF2YWlsYWJsZSBrZXkgaWQg
Zm9yIHNhbXBsZSIpOworKyAgICB9IGVsc2UgeworKyAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChz
c19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMsICJraWQiLCBHU1RfVFlQRV9CVUZGRVIsCisrICAg
ICAgICAgIHN0cmVhbS0+ZGVmYXVsdF9raWQsIE5VTEwpOworKyAgICB9CisrICB9CisrCisgICBp
ZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywg
Iml2X3NpemUiLAorICAgICAgICAgICAmaXZfc2l6ZSkpIHsKKyAgICAgR1NUX0VSUk9SX09CSkVD
VCAocXRkZW11eCwgIkVycm9yIGdldHRpbmcgZW5jcnlwdGlvbiBJViBzaXplIGZpZWxkIik7Cist
LSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMg
Yi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKaW5kZXggNjEzNjdiNTAwY2EzLi45ZmJl
M2U0ZDk4Y2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcworKysg
Yi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKQEAgLTE5MCw2ICsxOTAsNyBAQCBmdW5j
dGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aEFwdCB7CiAgICAgICAgIGdpdCBcCiAgICAgICAg
IGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVt
YXMtZGV2IFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAg
ICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGliY3VwczItZGV2IFwKQEAgLTM3OCw2ICsz
NzksNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aFBhY21hbiB7CiAgICAgICAg
IGdudXRscyBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0
aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgICAgICBneXAgXAogICAgICAgICBpY29uLW5hbWlu
Zy11dGlscyBcCiAgICAgICAgIGxpYmNyb2NvIFwKICAgICAgICAgbGliY3VwcyBcCkBAIC01NjEs
NiArNTYzLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhEbmYgewogICAgICAg
ICBnbnV0bHMtZGV2ZWwgXAogICAgICAgICBnb2JqZWN0LWludHJvc3BlY3Rpb24gXAogICAgICAg
ICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAg
ICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBpdHN0b29sIFwKICAgICAgICAgbGliWGZv
bnQyLWRldmVsIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5w
eSBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQppbmRleCBiYmJkYmYzNjAzOWYu
LjNlMjYxZTcyZDdiYSAxMDA2NDQKLS0tIGEvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9u
LnB5CisrKyBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQpAQCAtODMsMyArODMs
OCBAQCBkZWYgaW5pdChqaGJ1aWxkcmNfZ2xvYmFscywgamhidWlsZF9wbGF0Zm9ybSk6CiAKICAg
ICBpZiAneDg2XzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5lKCk6CiAgICAgICAgIGpoYnVpbGRyY19n
bG9iYWxzWydjb25kaXRpb25zJ10uYWRkKCd4ODZfNjQnKQorCisgICAgaWYgJ0pIQlVJTERfRU5B
QkxFX09QRU5DRE0nIGluIG9zLmVudmlyb246CisgICAgICAgIGpoYnVpbGRfZW5hYmxlX29wZW5j
ZG0gPSBvcy5lbnZpcm9uWydKSEJVSUxEX0VOQUJMRV9PUEVOQ0RNJ10ubG93ZXIoKQorICAgICAg
ICBpZiBqaGJ1aWxkX2VuYWJsZV9vcGVuY2RtID09ICd5ZXMnIG9yIGpoYnVpbGRfZW5hYmxlX29w
ZW5jZG0gPT0gJzEnIG9yIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJ3RydWUnOgorICAgICAg
ICAgICAgamhidWlsZHJjX2dsb2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQoJ09wZW5DRE0nKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzIGIvVG9vbHMvd3BlL2luc3Rh
bGwtZGVwZW5kZW5jaWVzCmluZGV4IGFkODI2MjEzNWU5ZC4uMWUyYWVkMzY0M2M3IDEwMDc1NQot
LS0gYS9Ub29scy93cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIvVG9vbHMvd3BlL2luc3Rh
bGwtZGVwZW5kZW5jaWVzCkBAIC0xMjAsNiArMTIwLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVu
ZGVuY2llc1dpdGhBcHQgewogICAgIHBhY2thZ2VzPSIkcGFja2FnZXMgXAogICAgICAgICBnaXQg
XAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldiBcCisgICAgICAgIGd5cCBc
CiAgICAgICAgIGxpYmVnbDEtbWVzYS1kZXYgXAogICAgICAgICBsaWJleHBhdDEtZGV2IFwKICAg
ICAgICAgbGliZmRrLWFhYy1kZXYgXApAQCAtMjM5LDYgKzI0MCw3IEBAIGZ1bmN0aW9uIGluc3Rh
bGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFuIHsKICAgICAgICAgZXhwYXQgXAogICAgICAgICBnaXQg
XAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICAgICAgZ3lwIFwKICAg
ICAgICAgbGliZmRrLWFhYyBcCiAgICAgICAgIGxpYnByb3h5IFwKICAgICAgICAgbGlicHNsIFwK
QEAgLTM1OSw2ICszNjEsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aERuZiB7
CiAgICAgICAgIGZkay1hYWMtZGV2ZWwgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGlu
Z3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGlibW91
bnQtZGV2ZWwgXAogICAgICAgICBsaWJwcm94eS1kZXZlbCBcCiAgICAgICAgIGxpYnBzbC1kZXZl
bCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403462</attachid>
            <date>2020-07-03 08:37:39 -0700</date>
            <delta_ts>2020-07-04 03:13:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>152651</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjNjYzNzM2NDhmYjguLmJk
OGZiMmM5Yzc5ZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA2LTI1ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRw
aW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRW5hYmxlIFdFQl9BUElfU1RBVElTVElD
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZwppbmRleCA3MThhZDM4MmY5ZDQuLjIwNjA1MTIwMjgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0g
c3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzNTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm1FbmFibGUuaDogRGlzYWJsZSBPUEVOQ0RNIGJ5IGRlZmF1bHQuCisKIDIw
MjAtMDYtMjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW5hbWUgaW5pdGlhbGl6ZVRocmVhZGluZyB0byBpbml0aWFsaXplCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFi
bGUuaAppbmRleCA3MWNkNTEyOWVhN2IuLjc2OWIzZjYwYTMzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVu
YWJsZS5oCkBAIC00MDEsNiArNDAxLDEwIEBACiAjZGVmaW5lIEVOQUJMRV9PRkZTQ1JFRU5fQ0FO
VkFTIDAKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX09QRU5DRE0pCisjZGVmaW5lIEVO
QUJMRV9PUEVOQ0RNIDAKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX09SSUVOVEFUSU9O
X0VWRU5UUykKICNkZWZpbmUgRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyAwCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBkZmQ2NWViMWNmODkuLjlhODc2OGVjODZhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3MyBAQAorMjAyMC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVt
ZW50IE9wZW5DRE0gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEzNTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGhlIE9wZW5DRE0gc3VwcG9ydCBpbiB0aGUgQ0RNT3Bl
bkNETSBhbmQKKyAgICAgICAgQ0RNUHJveHlPcGVuQ0RNIHJlbGF0ZWQgY2xhc3Nlcy4gQ0RNT3Bl
bkNETSBjbGFzc2VzIGNoZWNrIGZvcgorICAgICAgICBXaWRldmluZSBzdXBwb3J0IGluIE9wZW5D
RE0gYW5kIGdsdWVzIHRoZSBKYXZhU2NyaXB0IEFQSSB0byB0aGUKKyAgICAgICAgT3BlbkNETS9U
aHVuZGVyIGZyYW1ld29yay4gQnVpbGRpbmcgdGhpcyBpcyBvcHRpb25hbCBhbmQgLS1vcGVuY2Rt
CisgICAgICAgIHBhcmFtZXRlciBuZWVkcyB0byBiZSBwYXNzZWQgdG8gYnVpbGQtd2Via2l0IHRv
IGdldCBpdC4KKworICAgICAgICBDRE1Qcm94eSByZWxhdGVkIG5lZWRlZCBjaGFuZ2VzIGJlY2F1
c2Ugb2Ygc2V2ZXJhbCByZWFzb25zLiBGaXJzdAorICAgICAgICBpcyB0aGF0IEtleSB3YXMgY29u
c2lkZXJpbmcgb25seSBhIFZlY3Rvcjx1aW50OF90PiBhcyBhIHR5cGUgYW5kCisgICAgICAgIE9w
ZW5DRE0gaGFzIHNlc3Npb24gb2JqZWN0cy4gS2V5IGlzIGFsc28gcmVuYW1lZCB0byBLZXlIYW5k
bGUgYXMKKyAgICAgICAgdGhpcyBuYW1lIHJlZmxlY3RzIGluIGEgYmV0dGVyIHdheSB0aGUgcHVy
cG9zZSBvZiB0aGUgY2xhc3MuIFRoaXMKKyAgICAgICAgYmxlZWRzIG91dCB0byBhbGwgQ0RNUHJv
eHkgcmVsYXRlZCBjbGFzc2VzLiBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eQorICAgICAgICBnZXRz
IHN1cHBvcnQgdG8gcmVtb3ZlIGl0c2VsZiBmcm9tIHRoZSBDRE1TZXNzaW9uUHJveHkuCisKKyAg
ICAgICAgUmVnYXJkaW5nIENsZWFyS2V5LCB3ZSBhZGFwdCB0aGUgY2hhbmdlcyB0byB0aGUgQ0RN
UHJveHkgY2xhc3NlcworICAgICAgICBhbmQgZGUtY2FibGUgcHJvdGVjdGlvbiBzeXN0ZW0gZnJv
bSB0aGUgZGVjcnlwdG9ycyBhcyB0aGUgT3BlbkNETQorICAgICAgICBkZWNyeXB0b3IgY291bGQg
aGFuZGxlIG1vcmUgdGhhbiBvbmUgc3lzdGVtLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gWW91
VHViZSBUViAyMDE5IHRlc3RzIGFyZSBncmVlbi4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0ciBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1PcGVuQ0RNVHlwZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OmlkQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFsbEtleXNBcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
b3h5OjpnZXRPcldhaXRGb3JLZXlIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
UHJveHk6OmdldE9yV2FpdEZvcktleVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlU2Vzc2lvblByb3h5OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6cmVtb3ZlRnJvbUluc3RhbmNlUHJv
eHkpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlI
YW5kbGU6OmlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6dmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjp2YWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlIYW5kbGU6OmlzU3RhdHVzQ3VycmVudGx5VmFsaWQpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5SGFuZGxlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6
b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6S2V5SGFuZGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5OjppbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25Qcm94eTo6cmVsZWFzZURlY3J5cHRpb25SZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OmNkbUluc3RhbmNlUHJveHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlU2Vzc2lvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5
R1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNETVV0aWxpdGllczo6cGFyc2VKU09O
T2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUNsZWFyS2V5Ojpz
dXBwb3J0c0luaXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVDbGVh
cktleTo6c2FuaXRpemVSZXNwb25zZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnBhcmVudEluc3RhbmNlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNPcGVuQ0RNUmFua2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlVmVjdG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5jcHA6IEFkZGVkLgorICAg
ICAgICAob3BlbkNETUxpY2Vuc2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXREYXRhTUQ1
KToKKyAgICAgICAgKFdlYkNvcmU6OnNlc3Npb25Mb2FkRmFpbHVyZUZyb21PcGVuQ0RNKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06OmRlc3RydWN0T3BlbkNETVNlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6T3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Npb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJD
b3JlOjpDRE1GYWN0b3J5T3BlbkNETTo6Y3JlYXRlQ0RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUZhY3RvcnlPcGVuQ0RNOjpjcmVhdGVDRE1Qcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1G
YWN0b3J5T3BlbkNETTo6c3VwcG9ydGVkS2V5U3lzdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydHNLZXlTeXN0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZEluaXREYXRhVHlwZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzQ29uZmlndXJhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydGVk
Um9idXN0bmVzc2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RN
OjpkaXN0aW5jdGl2ZUlkZW50aWZpZXJzUmVxdWlyZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnBlcnNpc3RlbnRTdGF0ZVJlcXVpcmVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpkaXN0aW5jdGl2ZUlkZW50
aWZpZXJzQXJlVW5pcXVlUGVyT3JpZ2luQW5kQ2xlYXJhYmxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6bG9hZEFuZEluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2VydmVyQ2VydGlmaWNhdGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c1Nlc3Npb25z
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0lu
aXREYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzYW5p
dGl6ZVJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RN
OjpzYW5pdGl6ZVNlc3Npb25JZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZU9wZW5DRE06OkNETUluc3RhbmNlT3BlbkNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZU9wZW5DRE06OmluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OnNldFNlcnZlckNlcnRpZmljYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlT3BlbkNETTo6c2V0U3RvcmFnZURpcmVjdG9yeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlT3BlbkNETTo6Y3JlYXRl
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OlBhcnNl
ZFJlc3BvbnNlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3Nh
Z2U6Omhhc1BheWxvYWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VN
ZXNzYWdlOjpwYXlsb2FkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNl
TWVzc2FnZTo6cGF5bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3Nh
Z2U6Omhhc1R5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNz
YWdlOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2Fn
ZTo6dHlwZU9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9w
ZW5DRE06OmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnN0
YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RN
OjprZXlVcGRhdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNz
aW9uT3BlbkNETTo6a2V5c1VwZGF0ZURvbmVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjplcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnJlcXVlc3RMaWNlbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnNlc3Npb25GYWlsdXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnVwZGF0ZUxpY2Vuc2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6bG9hZFNlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2xvc2VT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnJl
bW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9w
ZW5DRE06OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06Ok9wZW5DRE1TeXN0ZW1EZWxldGVy
OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06Ok9wZW5DRE1T
ZXNzaW9uRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpnZXREZWNyeXB0aW9uU2Vzc2lv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eU9wZW5DRE06OmRlY3J5cHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RN
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkluaXREYXRhOjpJbml0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbml0RGF0YTo6cGF5
bG9hZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJFTUVVdGlsaXRpZXM6Omlz
V2lkZXZpbmVLZXlTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRU1FVXRpbGl0
aWVzOjprZXlTeXN0ZW1Ub1V1aWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
d2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAocHJv
dGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAodHJhbnNmb3JtQ2Fwcyk6CisgICAgICAgICh0cmFuc2Zvcm1JblBsYWNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgor
ICAgICAgICAocHJvdGVjdGlvblN5c3RlbUlkKToKKyAgICAgICAgKGNkbVByb3h5QXR0YWNoZWQp
OgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDIw
LTA2LTA5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtjc3MtZmxleGJveF0gV2ViS2l0IG1pc3Rha2VubHkgbGV0cyBwb2ludGVyIGV2ZW50cyAo
Y2xpY2svaG92ZXIvZXRjKSBwYXNzIHRocm91Z2ggZmxleCBpdGVtcywgaWYgdGhleSBoYXZlIG5l
Z2F0aXZlIG1hcmdpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDgyNjg3MDQ3NTE2Li41NWVlMzVj
YmFiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVJlcXVpcmVtZW50LmgKICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1SZXN0cmlj
dGlvbnMuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25UeXBlLmgKKyAg
ICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaAogCiAgICAgcGxhdGZvcm0v
Z2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBmYTMxOTA4YmQwY2UuLjhmYTNkYWM4NjZjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDEw
OSw2ICs0MTA5LDcgQEAKIAkJQ0QzQ0UxMDIyNDAxQUFEQTAwNEJBMDFEIC8qIENETVJlcXVpcmVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0
QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDNDRTEwMzI0MDFBQURBMDA0QkEw
MUQgLyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Qz
Q0UxMDQyNDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0QTVENTFGNzFDQjZEMDBGNTI1QzUg
LyogQ0RNU2Vzc2lvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDRDNDRTEwNTI0MDFBQURBMDA0QkEwMUQgLyogQ0RNVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0QTVENTFG
NzFDQjZEMDBGNTI1QzUgLyogQ0RNVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIElt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQ0QzRTI1MUMxODA0NkIwNjAwRTI3RjU2IC8qIEdyaWRBcmVhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDNFMjUxQjE4MDQ2QjA2MDBFMjdGNTYg
LyogR3JpZEFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDRDNFMjUyNDE4MDQ2QkNEMDBFMjdGNTYgLyogQ1NTR3JpZFRlbXBsYXRlQXJlYXNW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Qz
RTI1MjIxODA0NkJDRDAwRTI3RjU2IC8qIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCAqLzsg
fTsKQEAgLTE0MTU1LDYgKzE0MTU2LDggQEAKIAkJQ0Q5NEE1RDYxRjcxQ0I2RDAwRjUyNUM1IC8q
IENETU1lc3NhZ2VUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETU1l
c3NhZ2VUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOTRBNURBMUY3MUNC
QjAwMEY1MjVDNSAvKiBDRE1DbGVhcktleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDRE1DbGVhcktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDk0QTVE
QjFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNQ2xlYXJLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ0RNQ2xlYXJLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDRDk0QTVEQzFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNVXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDRDk0QTVERDFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNVXRpbGl0aWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENETVV0aWxpdGllcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOUE4N0Y5MjE1RDZDRjMwMDZGMTdC
NSAvKiBRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVpcmtzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5QTg3RkIyMTVENkNGMzAwNkYxN0I1IC8qIFF1aXJrcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBRdWlya3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0Q5RDM3NUEyMTUxNjNFNDAwNDk2NTdCIC8qIENETUluc3RhbmNlU2Vzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1JbnN0YW5jZVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI2ODU5LDYgKzI2ODYyLDcgQEAKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyog
Q0RNUmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RN
UmVzdHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNl
c3Npb25UeXBlLmggKi8sCisJCQkJQ0Q5NEE1REMxRjcxQ0JCMDAwRjUyNUM1IC8qIENETVV0aWxp
dGllcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBlbmNyeXB0ZWRtZWRpYTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDAzMCw2ICszMDAzNCw3IEBACiAJCQkJQ0QzQ0UxMDMyNDAx
QUFEQTAwNEJBMDFEIC8qIENETVJlc3RyaWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RF
NTk1OTcxQkYyNkUyMTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEM0NFMTA0MjQwMUFBREEwMDRCQTAxRCAvKiBDRE1TZXNzaW9u
VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0QzQ0UxMDUyNDAxQUFEQTAwNEJBMDFEIC8qIENE
TVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJE
IC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2
NTAwMEMyQjAwIC8qIENlcnRpZmljYXRlSW5mb0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggNzk1NDdjYmFm
MGQ1Li5mNmRmMDcwYmNlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKIAogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Qcm94eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRp
bGl0aWVzLmNwcAogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1D
bGVhcktleS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1G
YWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0xODAsNiArMTgxLDIzIEBAIGlmIChFTkFCTEVf
RU5DUllQVEVEX01FRElBKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAg
ICAgICR7TElCR0NSWVBUX0xJQlJBUklFU30gLWxncGctZXJyb3IKICAgICApCisKKyAgICBpZiAo
RU5BQkxFX09QRU5DRE0pCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xV
REVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICAg
ICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAg
ICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisgICAg
ICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBpZiAoVVNFX0NBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMjRkMjBiNjQ2OGJhLi5kZGY3
YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAt
MTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25zdAog
ICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRhdGEoKTsKIH0KIAorY29uc3QgdWlu
dDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSk7Cit9CisKIFNoYXJlZEJ1
ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoc2l6ZV90IHBvc2l0aW9uKSBj
b25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9uIDwgbV9zaXplKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4ZmU3MDFiMTliLi41MWVlNmQ0ZmMx
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMDYsNiArMTA2
LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkg
YW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgY29uc3QgdWludDhfdCogZGF0
YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0ZXMgYW4gQXJyYXlCdWZmZXIgYW5k
IGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRzIHRvIHRoYXQKICAgICAvLyBBcnJh
eUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1ZmZlcnMgaW50byBhIGZsYXQgYnVm
ZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZjZDY2YWQxZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApA
QCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENsZWFyS2V5LAogICAgICAgICBGYWly
UGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lmIEVOQUJMRShPUEVOQ0RNKQorICAg
ICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2aXJ0dWFsIEltcGxlbWVudGF0aW9u
VHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAppbmRleCAxYzQ2MmYw
YjY1NDMuLmYyYTVmMzE3NjZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1Nj
b3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MSwzNSAr
OTIsNDIgQEAgc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZlYykKIAogfSAvLyBuYW1lc3BhY2Uge30KIAotU3RyaW5nIEtleTo6aWRBc1N0cmlu
ZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjppZEFzU3RyaW5nKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1faWQpLCAiXSIpOwogfQog
Ci1TdHJpbmcgS2V5Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK2Jvb2wgS2V5SGFuZGxlOjp0YWtl
VmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1fdmFsdWUpLCAiXSIpOwor
ICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdAorYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5cGUm
IGtleUlEKSBjb25zdAogewotICAgIHJldHVybiBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25z
dCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAgcmV0
dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7CiAgICAgfSkgIT0gV1RGOjpub3RGb3VuZDsKIH0KIAog
dm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVyKQogeworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2lu
ZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlz
KCksIG51bUtleXMoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikgewogICAg
ICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlm
IGl0IG1hdGNoZXMgYSBrZXkgSUQKICAgICAgICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMg
ZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CiAg
ICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgotICAg
ICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9y
ZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkK
KyAgICAgICAgc2l6ZV90IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZE1h
dGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgeyByZXR1cm4g
KmtleSA9PSAqc3RvcmVkS2V5OyB9KTsKKyAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlE
SW5kZXggPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3aXRo
IERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgotICAgICAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBzYW1l
IElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleXMgd2l0aCB0aGUgc2FtZSBJRCEiKTsKKyAgICAg
ICAgICAgIEFTU0VSVChrZXktPnZhbHVlKCkgPT0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlE
SW5kZXhdLT52YWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmICFMT0dfRElTQUJMRUQK
QEAgLTEyOSwxNSArMTM3LDE1IEBAIHZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3Jl
JiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9CiAKLUNETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0CitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykgY29uc3QKIHsKICAgICBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9K
U0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVz
VmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gc3RhdHVzOwog
ICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OmFkZEtleXMo
VmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29sIEtleVN0b3JlOjphZGRLZXlzKFZl
Y3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQogewogICAgIGJvb2wgZGlkS2V5U3Rv
cmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtleSA6IG5ld0tleXMpIHsKQEAgLTE0
NywxNiArMTU1LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+
PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOwogfQogCi1ib29sIEtl
eVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRy
PEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOwot
ICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5V2l0
aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQ
dHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9y
ZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBX
VEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9r
ZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyBy
ZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IGtleVdpdGhNYXRjaGlu
Z0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3JlQ2hhbmdlKQorICAgICAgICAgICAg
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8g
a2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAogICAg
ICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyArMTc4LDcgQEAgYm9vbCBLZXlTdG9y
ZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBh
cyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBhbGwKICAgICAgICAgLy8gcHJhY3Rp
Y2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVtIG9mIDIga2V5cy4KICAgICAgICAg
c3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCi0gICAgICAgICAgICBbXShj
b25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtleT4mIGIpIHsKKyAgICAgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYg
YikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpiOwogICAgICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtMTgzLDcgKzE5Myw3IEBAIHZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9t
KGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVtb3ZlKGtleSk7CiB9CiAKLWJvb2wg
S2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQorYm9vbCBLZXlTdG9yZTo6
cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkpCiB7CiAgICAgYm9vbCBzdG9yZUNo
YW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyMTQsMTEgQEAgYm9vbCBLZXlTdG9yZTo6cmVt
b3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsKIH0K
IAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2NvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBLZXlTdG9y
ZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgZm9yIChj
b25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAgaWYgKCprZXkgPT0ga2V5SUQpCi0g
ICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGtleTsK
ICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0IGV4aXN0
IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSArMjQ4LDExIEBAIHZvaWQgQ0RNUHJv
eHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQogICAgIG1faW5zdGFu
Y2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IENETVByb3h5OjprZXlWYWx1ZShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorUmVmUHRyPEtleUhhbmRsZT4gQ0RN
UHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwogICAgIEFTU0VSVChtX2tleVN0b3Jl
LmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4gbV9rZXlTdG9yZS5rZXlWYWx1ZShr
ZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFuZGxlKGtleUlEKTsKIH0KIAogdm9p
ZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdApAQCAtMjYxLDcgKzI3MSw3
IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKICAgICBtX2lu
c3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQogCi1PcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5
SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JL
ZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsKICAgICBzdGFydGVkV2Fp
dGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9w
cGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldApAQCAt
MjgxLDMyICsyOTEsNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5
V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKQogCiAgICAgaWYgKHdhc0tl
eVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN1Y2Nlc3Nm
dWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7CisgICAgICAgIFJl
ZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShrZXlJRCk7CisgICAgICAgIHJldHVy
biBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KICAgICAKICAg
ICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQgJXMgbm90IGF2YWlsYWJsZSIsIHZl
Y3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJs
ZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
a2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAKLWJvb2wgQ0RNUHJveHk6OmtleUF2
YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorYm9vbCBDRE1Qcm94
eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAgICAgcmV0dXJuIGtleUF2YWlsYWJs
ZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94
eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitP
cHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleUhhbmRsZShj
b25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAgIGlmICgha2V5QXZhaWxhYmxlKGtl
eUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMg
bm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgICAgICBy
ZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGtl
eVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxlPiBoYW5kbGUgPSBrZXlIYW5kbGUo
a2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxsKCkp
OworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlhbnQ+IENETVByb3h5OjpnZXRPcldh
aXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAoreworICAgIGlmIChh
dXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRsZShrZXlJRCkpCisgICAgICAgIHJl
dHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9y
S2V5KCkKQEAgLTM2MCw2ICszNzksMTggQEAgdm9pZCBDRE1JbnN0YW5jZVByb3h5Ojp0cmFja1Nl
c3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkmIHNlc3Npb24pCiAgICAgbV9zZXNz
aW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNlU2Vzc2lvblByb3h5OjpDRE1JbnN0
YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBpbnN0YW5jZSkKKyAgICA6IG1faW5z
dGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQorCit2b2lkIENETUluc3RhbmNlU2Vz
c2lvblByb3h5OjpyZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgpCit7CisgICAgaWYgKCFtX2luc3Rh
bmNlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbnN0YW5jZS0+cmVtb3ZlU2Vzc2lvbigqdGhp
cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNUHJveHkuaAppbmRleCBhOWU3YmNkOTExYjEuLjRiNzI0YmY5M2FiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0z
OCwzMSArMzgsNTEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSA8bWVtb3J5
PgorCitzdHJ1Y3QgT3BlbkNETVNlc3Npb247CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3VzaW5nIEtleUlEVHlw
ZSA9IFZlY3Rvcjx1aW50OF90PjsKK3VzaW5nIEtleUhhbmRsZVZhbHVlVmFyaWFudCA9IFZhcmlh
bnQ8CisgICAgVmVjdG9yPHVpbnQ4X3Q+CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgLCBzdGQ6
OnNoYXJlZF9wdHI8T3BlbkNETVNlc3Npb24+CisjZW5kaWYKKz47CisKK2NsYXNzIEtleUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxLZXlIYW5kbGU+IHsKIHB1YmxpYzoKICAg
ICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czsKIAotICAg
IHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgIHN0YXRpYyBSZWZQ
dHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgS2V5SURUeXBlJiYga2V5SUQs
IEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIGtleUhhbmRsZVZhbHVlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUo
a2V5VmFsdWUpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleUhhbmRsZShzdGF0
dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlKSkpOwogICAgIH0KICAg
ICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hh
cmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQogCi0gICAgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAg
IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgYm9vbCB0
YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJik7CisKKyAgICBjb25z
dCBLZXlJRFR5cGUmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IEtleUhh
bmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAg
S2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBL
ZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBib29sIGlz
U3RhdHVzQ3VycmVudGx5VmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdHVzID09
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUgfHwgbV9zdGF0dXMgPT0gQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQgfHwKKyAgICAgICAg
ICAgIG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3du
c2NhbGVkOworICAgIH0KIAogICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBp
ZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgot
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikg
eyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIHsgcmV0dXJuIGsu
bV9pZCA9PSBrZXlJRDsgfQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJldHVybiBrID09IGtleUlEOyB9Ci0g
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSYgazEsIGNvbnN0IEtleSYgazIpCisg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlIYW5kbGUgJmsxLCBjb25zdCBLZXlI
YW5kbGUgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1faWQ7IH0KKyAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmaywgY29uc3QgS2V5SURUeXBlJiBrZXlJRCkg
eyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBLZXlJRFR5cGUmIGtleUlELCBjb25zdCBLZXlIYW5kbGUgJmspIHsgcmV0dXJuIGsgPT0g
a2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5SGFuZGxlJiBrMSwg
Y29uc3QgS2V5SGFuZGxlJiBrMikKICAgICB7CiAgICAgICAgIC8vIEtleSBJRHMgYXJlIGNvbXBh
cmVkIGFzIGZvbGxvd3M6IEZvciBrZXkgSURzIEEgb2YgbGVuZ3RoIG0gYW5kCiAgICAgICAgIC8v
IEIgb2YgbGVuZ3RoIG4sIGFzc2lnbmVkIHN1Y2ggdGhhdCBtIDw9IG4sIGxldCBBIDwgQiBpZiBh
bmQgb25seQpAQCAtODQsMTIgKzEwNCwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG51bVNl
c3Npb25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4g
bV9udW1TZXNzaW9uUmVmZXJlbmNlczsgfQogICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKIAot
ICAgIEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9y
PHVpbnQ4X3Q+JiYga2V5VmFsdWUpCi0gICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChX
VEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorICAgIEtleUhh
bmRsZShLZXlTdGF0dXMgc3RhdHVzLCBLZXlJRFR5cGUmJiBrZXlJRCwgS2V5SGFuZGxlVmFsdWVW
YXJpYW50JiYga2V5SGFuZGxlVmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9p
ZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlIYW5kbGVWYWx1ZSkpIHsgfQog
CiAgICAgS2V5U3RhdHVzIG1fc3RhdHVzOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOwotICAg
IFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIEtleUlEVHlwZSBtX2lkOworICAgIEtleUhh
bmRsZVZhbHVlVmFyaWFudCBtX3ZhbHVlOwogICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVy
ZW5jZXMgeyAwIH07CiB9OwogCkBAIC05NywxOCArMTE3LDIxIEBAIGNsYXNzIEtleVN0b3JlIHsK
IHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3IgPSBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvcjsKIAotICAgIGJvb2wgY29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICB2b2lkIG1lcmdlKGNvbnN0IEtleVN0b3JlJiBv
dGhlcik7Ci0gICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIp
OworICAgIEtleVN0b3JlKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNv
bnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmKTsK
KyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CiAgICAgdm9pZCBy
ZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQotICAgIGJvb2wgYWRkS2V5cyhWZWN0
b3I8UmVmUHRyPEtleT4+JiYpOwotICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYpOwotICAgIGJv
b2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgYm9vbCBhZGRLZXlzKFZlY3RvcjxS
ZWZQdHI8S2V5SGFuZGxlPj4mJik7CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleUhhbmRsZT4mJik7
CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mKTsKICAgICBib29sIGhh
c0tleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgbnVt
S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Owot
ICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIGNvbnN0
IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7Cisg
ICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
cykgY29uc3Q7CiAgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmlzRW1w
dHkoKTsgfQogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CiAg
ICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CkBAIC0xMjAs
NyArMTQzLDcgQEAgcHVibGljOgogICAgIGF1dG8gcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
cy5yZW5kKCk7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPEtleT4+IG1fa2V5czsK
KyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5czsKIH07CiAKIGNsYXNzIENETUlu
c3RhbmNlUHJveHk7CkBAIC0xMjksNyArMTUyLDcgQEAgY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsK
IC8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgogY2xhc3MgQ0RN
UHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9z
OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMgPSA3
X3M7CiAKICAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKIApAQCAtMTQzLDEzICsx
NjYsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBib29s
IGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBi
b29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNv
bnN0OwotICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gdHJ5V2FpdEZvcktleShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBPcHRpb25hbDxWZWN0b3I8dWludDhf
dD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsK
KyAgICBSZWZQdHI8S2V5SGFuZGxlPiBrZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7
CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgYm9v
bCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBPcHRp
b25hbDxSZWY8S2V5SGFuZGxlPj4gdHJ5V2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUm
KSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gZ2V0T3JXYWl0Rm9yS2V5SGFu
ZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPEtleUhhbmRsZVZhbHVl
VmFyaWFudD4gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CiAg
ICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OwogICAgIHZvaWQgc3RvcHBlZFdh
aXRpbmdGb3JLZXkoKSBjb25zdDsKKyAgICBjb25zdCBDRE1JbnN0YW5jZVByb3h5KiBpbnN0YW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAogcHJpdmF0ZToKICAgICBtdXRhYmxl
IExvY2sgbV9pbnN0YW5jZU11dGV4OwpAQCAtMTg0LDE0ICsyMDksMjQgQEAgcHJpdmF0ZToKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPENETVByb3h5RmFjdG9yeSo+JiByZWdpc3Rl
cmVkRmFjdG9yaWVzKCk7CiB9OwogCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5OworCiBjbGFzcyBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vha1B0ckZhY3RvcnlJ
bml0aWFsaXphdGlvbjo6RWFnZXI+IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURlY3J5
cHRpb25SZXNvdXJjZXMoKSB7IG1faW5zdGFuY2UuY2xlYXIoKTsgfQorICAgIHZvaWQgcmVtb3Zl
RnJvbUluc3RhbmNlUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIENETUluc3RhbmNlU2Vzc2lv
blByb3h5KENETUluc3RhbmNlUHJveHkmKTsKKyAgICBjb25zdCBXZWFrUHRyPENETUluc3RhbmNl
UHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQor
Citwcml2YXRlOgorICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gbV9pbnN0YW5jZTsKIH07
CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9uIG1hbmFnZW1lbnQgY29kZSBhbmQg
Zm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKIC8vIGZyb20gInJlYWwgQ0RNIiBzdGF0ZSBjaGFu
Z2VzIHRvIEpTLgotY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZSB7
CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3RhbmNlLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gewogcHVibGljOgogICAgIGV4cGxpY2l0IENE
TUluc3RhbmNlUHJveHkoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAgewpAQCAtMjA3LDcg
KzI0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0
b3JlJik7CiAKICAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1haW4gdGhyZWFk
IG9ubHkuCi0gICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAgICBjb25zdCBSZWZQdHI8Q0RNUHJv
eHk+JiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fY2Rt
UHJveHk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yS2V5KCkgY29uc3QgeyBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+
IDA7IH0KICAgICB2b2lkIHNldFBsYXllcihNZWRpYVBsYXllciogcGxheWVyKSB7IEFTU0VSVChp
c01haW5UaHJlYWQoKSk7IG1fcGxheWVyID0gcGxheWVyOyB9CiAKQEAgLTIxNSw2ICsyNTAsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIHZvaWQgc3Rv
cHBlZFdhaXRpbmdGb3JLZXkoKTsKIAorICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihjb25zdCBDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikgeyBtX3Nlc3Npb25zLnJlbW92ZShzZXNzaW9u
KTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTg4NWFkNmU1ODYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRp
ZXMuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNETVV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDRE1VdGlsaXRpZXMgeworCitSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZm
ZXIpCit7CisgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9lc24ndCBm
aXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorICAgIHNpemVfdCBzaXplID0gYnVm
ZmVyLnNpemUoKTsKKyAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQYXJzZSB0aGUgYnVm
ZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBvYmplY3QgKGlmIGFueSku
CisgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c2l6ZSkgfTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwg
dmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit9OworCit9OworCisjZW5kaWYgLy8gRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi43NGY1MTViMGJkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKwor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworbmFtZXNwYWNlIENE
TVV0aWxpdGllcyB7CisKK1JlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25z
dCBTaGFyZWRCdWZmZXImKTsKKworfTsKKworfTsKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKaW5kZXggNjUzMjJlZDk5ZTk3
Li5lNmNjMjJkOTBjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM0LDM2
ICszNCwxOSBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKICNpbmNs
dWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgorI2lu
Y2x1ZGUgIkNETVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkluaXREYXRhUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0
IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIC8vIEZhaWwgb24gbGFyZ2UgYnVmZmVycyB3
aG9zZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KLSAg
ICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJv
b3Qgb2JqZWN0IChpZiBhbnkpLgotICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCFKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGlj
IE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBK
U09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5k
bGU+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKIHsKICAg
ICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSByb290IG9iamVjdCwgcGFy
c2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkICds
aWNlbnNlJyBmb3JtYXQuCkBAIC03Niw3ICs1OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290
CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlk
Rm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgp
LAogICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKICAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsKQEAgLTkxLDExICs3NCwxMiBAQCBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046Ok9iamVjdCYgcm9vdAogICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdldFN0
cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIsIGtleVZhbHVl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RGOjpi
YXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERl
Y29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBLZXlJRFR5cGUg
a2V5SUREYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRsZVZhbHVlRGF0
YTsKKyAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SURE
YXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlIYW5kbGVWYWx1
ZURhdGEgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBk
ZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0YSkpKTsK
KyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdURk1v
dmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC00MDEsNyArMzg1LDcgQEAgYm9vbCBD
RE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdAogYm9vbCBDRE1Qcml2
YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFU
eXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBjb25zdAogewogICAgIC8vIFZhbGlk
YXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBvYmplY3QgaW4ga2V5aWRzIGNhc2Uu
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtl
eWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkpCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtleWlkcyIpICYmIENETVV0aWxpdGll
czo6cGFyc2VKU09OT2JqZWN0KGluaXREYXRhKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFzIENFTkMgaW5pdERhdGEuCkBAIC00
MTgsNyArNDAyLDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEo
Y29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25zdAogUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgcmVzcG9uc2UpIGNvbnN0CiB7CiAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3BvbnNlIGJ1ZmZl
ciBhcyBhbiBKU09OIG9iamVjdC4KLSAgICBpZiAoIXBhcnNlSlNPTk9iamVjdChyZXNwb25zZSkp
CisgICAgaWYgKCFDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdChyZXNwb25zZSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNvcHkoKTsKQEAgLTUw
Nyw3ICs0OTEsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNl
bnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICB9OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNP
Tk9iamVjdChyZXNwb25zZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IENETVV0
aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsKICAgICBpZiAoIXJvb3QpIHsKICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5bG9h
ZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpOwpAQCAtNTI0LDcgKzUwOCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgICAg
IE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlz
Q2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lv
biAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAg
ICAgICAgcGFyZW50SW5zdGFuY2UoKS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAgICAg
ICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9y
KCk7CiAgICAgICAgIH0KIApAQCAtNTM0LDcgKzUxOCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vu
c2VUCiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgq
cm9vdCkpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBy
ZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zy
b20obV9rZXlTdG9yZSk7CisgICAgICAgIHBhcmVudEluc3RhbmNlKCkucmVtb3ZlQWxsS2V5c0Zy
b20obV9rZXlTdG9yZSk7CiAgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAg
ICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CkBAIC01OTIsNyArNTc2LDcgQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBz
ZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9i
amVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUK
ICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtl
eVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzUmVsZWFzZWQoKTsKKyAgICBLZXlT
dGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsKICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtZXNzYWdlOwogICAgIHsKICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXBy
ZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFy
cmF5CkBAIC02MjEsNiArNjA1LDEzIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQogewogfQogCitDRE1JbnN0YW5j
ZUNsZWFyS2V5JiBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UoKSBj
b25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZVByb3h5KCk7CisgICAgQVNT
RVJUKGluc3RhbmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VDbGVhcktl
eSY+KCppbnN0YW5jZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4
YmYzNjI3MmFkYjYuLjEwNzkwODYwODBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBA
IC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vz
c2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xhc3MgQ0RNSW5zdGFu
Y2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktl
eSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0
YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwpAQCAt
MTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblByb3h5IHsKIHB1YmxpYzoKICAgICBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCi0g
ICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsgfQorICAgICAgICA6IENETUluc3Rh
bmNlU2Vzc2lvblByb3h5KHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNl
bnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVy
PiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmLCBM
aWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNl
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFj
ayYmKSBmaW5hbDsKQEAgLTExNiw4ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVT
ZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFD
YWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBT
dHJpbmcmKSBmaW5hbDsKIHByaXZhdGU6CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgcGFyZW50
SW5zdGFuY2UoKSBjb25zdDsKKwogICAgIFN0cmluZyBtX3Nlc3Npb25JRDsKLSAgICBDRE1JbnN0
YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOwogICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDhhYzlhYjMxOGU2Zi4uZmVj
M2QyMzkyYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtNTAsNiArNTAsOSBA
QAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJXZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5oIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIldl
YktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVklERU8pCkBAIC0yNzUsNiArMjc4LDIyIEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1l
cihPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4mJiBvcHRpb25zKQogICAgIHJldHVybiBpc0dTdHJl
YW1lckluaXRpYWxpemVkOwogfQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5B
QkxFKE9QRU5DRE0pCisvLyBXZWJNIGRvZXMgbm90IHNwZWNpZnkgYSBwcm90ZWN0aW9uIHN5c3Rl
bSBJRCBzbyBpdCBjYW4gaGFwcGVuIHRoYXQKKy8vIHRoZSBDbGVhcktleSBkZWNyeXB0b3IgaXMg
Y2hvc2VuIGluc3RlYWQgb2YgdGhlIE9wZW5DRE0gb25lIGZvcgorLy8gV2lkZXZpbmUgKGFuZCB2
aWNldmVyc2EpIHdoaWNoIGNhbiBjYW4gY3JlYXRlIGNoYW9zLiBUaGlzIGlzIGFuCisvLyBlbnZp
cm9ubWVudCB2YXJpYWJsZSB0byBzZXQgaW4gcnVuIHRpbWUgaWYgd2UgcHJlZmVyIHRvIHJhbmsg
aGlnaGVyCisvLyBPcGVuQ0RNIG9yIENsZWFyS2V5LiBJZiB3ZSB3YW50IHRvIHJ1biB0ZXN0cyB3
aXRoIE9wZW5DRE0sIHdlIG5lZWQKKy8vIHRvIHNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxl
IHRvIE9wZW5DRE0gYW5kIHRoYXQgZGVjcnlwdG9yIHdpbGwKKy8vIGJlIHJhbmtlZCBoaWdoZXIg
d2hlbiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIHN5c3RlbSBzZXQgKGFzIGluCisvLyBXZWJNKS4K
K2Jvb2wgaXNPcGVuQ0RNUmFua2VkKCkKK3sKKyAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdfZ2V0
ZW52KCJXRUJLSVRfRU1FX1JBTktfUFJJT1JJVFkiKTsKKyAgICByZXR1cm4gdmFsdWUgJiYgZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIk9wZW5DRE0iKTsKK30KKyNlbmRpZgorCiBib29s
IGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKIHsKICAgICBp
ZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKQEAgLTI4Myw3ICszMDIsMTEgQEAgYm9vbCBpbml0
aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpCiAgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0
ZXIobnVsbHB0ciwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VC
S0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVy
KG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAyMDAsIFdFQktJ
VF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgICAgICB1
bnNpZ25lZCBvcGVuQ0RNUmFuayA9IGlzT3BlbkNETVJhbmtlZCgpID8gMzAwIDogMTAwOworICAg
ICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0b3BlbmNkbSIsIEdTVF9S
QU5LX1BSSU1BUlkgKyBvcGVuQ0RNUmFuaywgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNS
WVBUKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAtMzgy
LDYgKzQwNSwxMyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZVNo
YXJlZEJ1ZmZlcigpCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCp0aGlzKTsKIH0K
IAorVmVjdG9yPHVpbnQ4X3Q+IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlVmVjdG9yKCkKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoZGF0YSgpLCBzaXpl
KCkpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIGJvb2wgaXNHU3RyZWFtZXJQbHVnaW5BdmFp
bGFibGUoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBHUmVmUHRyPEdzdFBsdWdpbj4gcGx1Z2lu
ID0gYWRvcHRHUmVmKGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbihnc3RfcmVnaXN0cnlfZ2V0KCks
IG5hbWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCBhMWU1NjI0NGIxN2UuLjAyYTAy
YzA1Nzc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApAQCAtNzMsNiArNzMsOSBAQCBib29s
IGluaXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiYgPSBXVEY6Om51
bGxvcHQpOwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50
cygpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljayk7CiB1aW50NjRf
dCB0b0dzdFVuc2lnbmVkNjRUaW1lKGNvbnN0IE1lZGlhVGltZSYpOworI2lmIEVOQUJMRShPUEVO
Q0RNKQorYm9vbCBpc09wZW5DRE1SYW5rZWQoKTsKKyNlbmRpZgogCiBpbmxpbmUgR3N0Q2xvY2tU
aW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogewpAQCAtODEs
NiArODQsMTEgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRp
YVRpbWUgJm1lZGlhVGltZSkKIAogY2xhc3MgR3N0TWFwcGVkQnVmZmVyIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1ZmZlcj4gewogcHVibGljOgorICAgIHN0YXRpYyBS
ZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RCdWZmZXI+JiBi
dWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIuZ2V0KCksIGZsYWdzKTsKKyAgICB9CisKICAgICBzdGF0aWMgUmVmUHRyPEdzdE1hcHBl
ZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKICAg
ICB7CiAgICAgICAgIEdzdE1hcEluZm8gaW5mbzsKQEAgLTEwNiw2ICsxMTQsNyBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
aW5mby5zaXplKTsgfQogICAgIGJvb2wgaXNTaGFyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9p
bmZvLmZsYWdzICYgR1NUX01BUF9XUklURSk7IH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBjcmVh
dGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRlVmVjdG9yKCk7CiAK
IHByaXZhdGU6CiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBJ
bmZvJiYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggYzIwYWZmY2QzNDc0Li4xYTdhZWU4M2Y2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yMDgsNiArMjA4LDEwIEBA
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4o
c2hhcmVkRGlzcGxheSkpCiAgICAgICAgIG1fd3BlVmlkZW9QbGFuZURpc3BsYXlEbWFCdWYucmVz
ZXQod3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZV9jcmVhdGUoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5iYWNrZW5kKCkpKTsKICNlbmRp
ZgorICAgIHN0YXRpYyB1bnNpZ25lZCB0aW1lcyA9IDA7CisgICAgKyt0aW1lczsKKyAgICBHU1Rf
SU5GTygiY3JlYXRlZCBtZWRpYSBwbGF5ZXIgcHJpdmF0ZSAoJXUgdGltZXMpIDwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgdGltZXMpOworICAgIGZwcmlu
dGYoc3RkZXJyLCAiY2FsdmFyaXMgY3JlYXRlZCBtZWRpYSBwbGF5ZXIgcHJpdmF0ZSAoJXUgdGlt
ZXMpXG4iLCB0aW1lcyk7CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCkBAIC0zMDEsNiArMzA1LDExIEBAIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAKICAgICBt
X3BsYXllciA9IG51bGxwdHI7CiAgICAgbV9ub3RpZmllci0+aW52YWxpZGF0ZSgpOworCisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisgICAgaWYgKG1fY2Rt
SW5zdGFuY2UpCisgICAgICAgIG1fY2RtSW5zdGFuY2UtPnJlbGVhc2VEZWNyeXB0aW9uUmVzb3Vy
Y2VzKCk7CisjZW5kaWYKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omlz
QXZhaWxhYmxlKCkKQEAgLTE1OTUsNiArMTYwNCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCiAKIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQogeworICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNT
QUdFX0VSUk9SICYmICFnX3N0cmNtcDAoZ19nZXRlbnYoIldFQktJVF9DUkFTSF9PTl9HU1RSRUFN
RVJfRVJST1IiKSwgInN5bmMiKSkgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
OworICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKKyAgICAgICAgZ3N0X21lc3Nh
Z2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwgJmRlYnVnLm91dFB0cigpKTsK
KyAgICAgICAgR1NUX0VSUk9SKCJFcnJvciAlZCBmcm9tICVzOiAlcyAodXJsPSVzKSIsIGVyci0+
Y29kZSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSksIGVyci0+bWVzc2FnZSwgbV91cmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJ
TEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hP
V19BTEwsICJ3ZWJraXQtdmlkZW8tc3luYy1lcnJvciIpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBH
U1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKICAg
ICAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgICAgICBn
c3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5v
dXRQdHIoKSk7CkBAIC0xNzYyLDcgKzE3ODAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1l
KTsKLSAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2
b2x1bWUpKTsKKyAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91
YmxlPigwKSk7CiB9CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1l
KCkgY29uc3QKQEAgLTE4NjksNiArMTg4Nyw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICAgICAgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC12aWRlby5lcnJvciIpOwogCisgICAg
ICAgIGlmICghZ19zdHJjbXAwKGdfZ2V0ZW52KCJXRUJLSVRfQ1JBU0hfT05fR1NUUkVBTUVSX0VS
Uk9SIiksICJhc3luYyIpKQorICAgICAgICAgICAgQ1JBU0goKTsKKwogICAgICAgICBlcnJvciA9
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGU6OkVtcHR5OwogICAgICAgICBpZiAoZ19lcnJvcl9t
YXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9DT0RF
Q19OT1RfRk9VTkQpCiAgICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBH
U1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUpCkBAIC0zNTE3LDcg
KzM1MzgsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJiBpbml0RAogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBp
bml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRh
LnBheWxvYWQoKS0+c2l6ZSgpKTsKKyAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGluaXRp
YWxpemF0aW9uRGF0YUVuY291bnRlcmVkICVzIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEu
cGF5bG9hZENvbnRhaW5lclR5cGUoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgaW5pdERh
dGEucGF5bG9hZCgpLT5zaXplKCkpOwogICAgICAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhcyIs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluaXREYXRhLnBheWxvYWQoKS0+ZGF0
YSgpKSwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOwogICAgICAgICB3ZWFrVGhpcy0+bV9w
bGF5ZXItPmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKGluaXREYXRhLnBheWxvYWRDb250
YWluZXJUeXBlKCksIGluaXREYXRhLnBheWxvYWQoKS0+dHJ5Q3JlYXRlQXJyYXlCdWZmZXIoKSk7
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAppbmRl
eCAwZjlhNjhkMmNkNmQuLjM3ZTg0NzA2ZTA2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZh
Y3RvcnlHU3RyZWFtZXIuY3BwCkBAIC0zMywxNyArMzMsMjkgQEAKIAogI2luY2x1ZGUgIkNETVBy
b3h5Q2xlYXJLZXkuaCIKIAorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUgIkNETU9wZW5D
RE0uaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ0RNRmFjdG9yeTo6
cGxhdGZvcm1SZWdpc3RlckZhY3RvcmllcyhWZWN0b3I8Q0RNRmFjdG9yeSo+JiBmYWN0b3JpZXMp
CiB7CiAgICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9yeUNsZWFyS2V5OjpzaW5nbGV0b24o
KSk7CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9y
eU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNlbmRpZgogfQogCiBWZWN0b3I8Q0RNUHJveHlGYWN0
b3J5Kj4gQ0RNUHJveHlGYWN0b3J5OjpwbGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKCkKIHsKICAg
ICBWZWN0b3I8Q0RNUHJveHlGYWN0b3J5Kj4gZmFjdG9yaWVzOworI2lmIEVOQUJMRShPUEVOQ0RN
KQorICAgIGZhY3Rvcmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworICAgIGZhY3Rvcmll
cy51bmNoZWNrZWRBcHBlbmQoJkNETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24oKSk7CisjZWxz
ZQogICAgIGZhY3Rvcmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOworI2VuZGlmCiAgICAg
ZmFjdG9yaWVzLnVuY2hlY2tlZEFwcGVuZCgmQ0RNUHJveHlGYWN0b3J5Q2xlYXJLZXk6OnNpbmds
ZXRvbigpKTsKICAgICByZXR1cm4gZmFjdG9yaWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNETS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMjU4MzY5M2YwYTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwCkBAIC0wLDAgKzEsNjcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUgIkNETUtleVN5c3RlbUNv
bmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJDRE1Qcm94eU9wZW5DRE0uaCIKKyNpbmNsdWRlICJD
RE1SZXN0cmljdGlvbnMuaCIKKyNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgorI2luY2x1ZGUg
IkNETVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUtleU1lc3NhZ2VUeXBlLmgiCisjaW5j
bHVkZSAiTWVkaWFLZXlTdGF0dXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxp
dGVyYXRvcj4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgKCFkZWZp
bmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykpCisjaW5jbHVkZSA8d3RmL01ENS5oPgorR1NUX0RF
QlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRlZ29y
eSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVi
dWdDYXRlZ29yeQorI2VuZGlmCisKK25hbWVzcGFjZSB7CisKKy8vIFdlIGFyZSBkb2luZyB0aGlz
IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMuCit1
c2luZyBPcGVuQ0RNS2V5U3RhdHVzID0gS2V5U3RhdHVzOworCit9CisKK3N0YXRpYyBMaWNlbnNl
VHlwZSBvcGVuQ0RNTGljZW5zZVR5cGUoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNl
bnNlVHlwZSBsaWNlbnNlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGxpY2Vuc2VUeXBlKSB7CisgICAg
Y2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpUZW1wb3Jhcnk6
CisgICAgICAgIHJldHVybiBUZW1wb3Jhcnk7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50VXNhZ2VSZWNvcmQ6CisgICAgICAgIHJl
dHVybiBQZXJzaXN0ZW50VXNhZ2VSZWNvcmQ7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50TGljZW5zZToKKyAgICAgICAgcmV0dXJu
IFBlcnNpc3RlbnRMaWNlbnNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gVGVtcG9yYXJ5OworICAgIH0KK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWYgKCFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykpCitTdHJp
bmcgaW5pdERhdGFNRDUoY29uc3QgSW5pdERhdGEmIGluaXREYXRhKQoreworICAgIFdURjo6TUQ1
IG1kNTsKKyAgICBtZDUuYWRkQnl0ZXMoaW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0
cigpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CisKKyAgICBXVEY6Ok1ENTo6RGlnZXN0
IGRpZ2VzdDsKKyAgICBtZDUuY2hlY2tzdW0oZGlnZXN0KTsKKworICAgIHJldHVybiBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGlnZXN0WzBdLCBXVEY6Ok1ENTo6aGFzaFNpemUpOworfQorI2VuZGlm
CisKK3N0YXRpYyBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZSBzZXNzaW9u
TG9hZEZhaWx1cmVGcm9tT3BlbkNETShjb25zdCBTdHJpbmdWaWV3JiBsb2FkU3RhdHVzKQorewor
ICAgIGlmIChsb2FkU3RhdHVzID09ICJOb25lIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNl
U2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lOworICAgIGlmIChsb2FkU3RhdHVzID09
ICJTZXNzaW9uTm90Rm91bmQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpT
ZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGE7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0g
Ik1pc21hdGNoZWRTZXNzaW9uVHlwZSIpCisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Np
b246OlNlc3Npb25Mb2FkRmFpbHVyZTo6TWlzbWF0Y2hlZFNlc3Npb25UeXBlOworICAgIGlmIChs
b2FkU3RhdHVzID09ICJRdW90YUV4Y2VlZGVkIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNl
U2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpRdW90YUV4Y2VlZGVkOworICAgIHJldHVybiBD
RE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6T3RoZXI7Cit9CisKKwordm9p
ZCBPcGVuQ0RNOjpkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKE9wZW5DRE1TZXNzaW9uKiBzZXNzaW9u
KQoreworICAgIGlmICghc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworICAgIG9wZW5jZG1fZGVz
dHJ1Y3Rfc2Vzc2lvbihzZXNzaW9uKTsKK30KKworT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Np
b24gT3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Npb24oT3BlbkNETVNlc3Npb24qIHNl
c3Npb24pCit7CisgICAgcmV0dXJuIE9wZW5DRE06OlNoYXJlZE9wZW5DRE1TZXNzaW9uKHNlc3Np
b24sIE9wZW5DRE06OmRlc3RydWN0T3BlbkNETVNlc3Npb24pOworfQorCitDRE1GYWN0b3J5T3Bl
bkNETSYgQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENETUZhY3RvcnlPcGVuQ0RNPiBzX2ZhY3Rvcnk7CisgICAgcmV0dXJuIHNfZmFj
dG9yeTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENETVByaXZhdGU+IENETUZhY3RvcnlPcGVuQ0RN
OjpjcmVhdGVDRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCit7CisgICAgQVNTRVJUKHN1cHBv
cnRzS2V5U3lzdGVtKGtleVN5c3RlbSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPENETVByaXZh
dGVPcGVuQ0RNPihrZXlTeXN0ZW0pOworfQorCitSZWZQdHI8Q0RNUHJveHk+IENETUZhY3RvcnlP
cGVuQ0RNOjpjcmVhdGVDRE1Qcm94eShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBB
U1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lzdGVtKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDRE1Qcm94eU9wZW5DRE0oa2V5U3lzdGVtKSk7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJp
bmc+JiBDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0Cit7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
XSB7CisgICAgICAgIHN0ZDo6c3RyaW5nIGVtcHR5U3RyaW5nOworICAgICAgICAvLyBZZXMsIHRo
aXMgaXMgcmlnaHQsIDAgbWVhbnMgc3VwcG9ydGVkLCBoZW5jZSBzb21ldGhpbmcgZWxzZSBtZWFu
cyBub3Qgc3VwcG9ydGVkLgorICAgICAgICBpZiAoIW9wZW5jZG1faXNfdHlwZV9zdXBwb3J0ZWQo
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX1dpZGV2aW5lS2V5U3lzdGVtLCBlbXB0eVN0cmluZy5j
X3N0cigpKSkKKyAgICAgICAgICAgIHN1cHBvcnRlZEtleVN5c3RlbXMuYXBwZW5kKEdTdHJlYW1l
ckVNRVV0aWxpdGllczo6c19XaWRldmluZUtleVN5c3RlbSk7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBpZiAoc3VwcG9ydGVkS2V5U3lzdGVtcy5pc0VtcHR5KCkgJiYgaXNPcGVuQ0RNUmFua2Vk
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRF9XSVRIX01FU1NBR0UoIk9wZW5D
RE0gaXMgdXAtcmFua2VkIGFzIHByZWZlcnJlZCBkZWNyeXB0b3IgYnV0IE9wZW5DRE0gaXMgbm90
IHN1cHBvcnRpbmcgYW55IGVuY3J5cHRpb24gc3lzdGVtLiBJcyAiCisgICAgICAgICAgICAgICAg
IlRodW5kZXIgcnVubmluZz8gQXJlIHRoZSBwbHVnaW5zIGJ1aWx0PyIpOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9KTsKKyAgICByZXR1cm4gc3VwcG9ydGVkS2V5U3lzdGVtczsKK30KKworYm9v
bCBDRE1GYWN0b3J5T3BlbkNETTo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlT
eXN0ZW0pCit7CisgICAgcmV0dXJuIENETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24oKS5zdXBw
b3J0ZWRLZXlTeXN0ZW1zKCkuY29udGFpbnMoa2V5U3lzdGVtKTsKK30KKworVmVjdG9yPEF0b21T
dHJpbmc+IENETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzKCkgY29uc3QK
K3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZlY3Rv
cjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzOworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbXSB7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy51bmNoZWNr
ZWRBcHBlbmQoQXRvbVN0cmluZygia2V5aWRzIikpOworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0
YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5nKCJjZW5jIikpOworICAgICAgICBzdXBw
b3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5nKCJ3ZWJtIikpOwor
ICAgIH0pOworICAgIHJldHVybiBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzOworfQorCitib29sIENE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGF1
ZGlvQ2FwYWJpbGl0eSA6IGNvbmZpZ3VyYXRpb24uYXVkaW9DYXBhYmlsaXRpZXMpIHsKKyAgICAg
ICAgaWYgKG9wZW5jZG1faXNfdHlwZV9zdXBwb3J0ZWQobV9rZXlTeXN0ZW0udXRmOCgpLmRhdGEo
KSwgYXVkaW9DYXBhYmlsaXR5LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHZpZGVvQ2FwYWJpbGl0eSA6
IGNvbmZpZ3VyYXRpb24udmlkZW9DYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgaWYgKG9wZW5jZG1f
aXNfdHlwZV9zdXBwb3J0ZWQobV9rZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSwgdmlkZW9DYXBhYmls
aXR5LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVjdG9yPEF0b21TdHJpbmc+IENETVBy
aXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRSb2J1c3RuZXNzZXMoKSBjb25zdAoreworICAgIHJldHVy
biB7IGVtcHR5QXRvbSgpIH07Cit9CisKK0NETVJlcXVpcmVtZW50IENETVByaXZhdGVPcGVuQ0RN
OjpkaXN0aW5jdGl2ZUlkZW50aWZpZXJzUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENETVJlcXVpcmVtZW50OjpPcHRpb25hbDsKK30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJpdmF0
ZU9wZW5DRE06OnBlcnNpc3RlbnRTdGF0ZVJlcXVpcmVtZW50KGNvbnN0IENETUtleVN5c3RlbUNv
bmZpZ3VyYXRpb24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdAoreworICAgIHJldHVy
biBDRE1SZXF1aXJlbWVudDo6T3B0aW9uYWw7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06
OmRpc3RpbmN0aXZlSWRlbnRpZmllcnNBcmVVbmlxdWVQZXJPcmlnaW5BbmRDbGVhcmFibGUoY29u
c3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitSZWZQdHI8Q0RNSW5zdGFuY2U+IENETVByaXZhdGVPcGVuQ0RNOjpjcmVhdGVJbnN0
YW5jZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZU9wZW5DRE0obV9r
ZXlTeXN0ZW0pKTsKK30KKwordm9pZCBDRE1Qcml2YXRlT3BlbkNETTo6bG9hZEFuZEluaXRpYWxp
emUoKQoreworICAgIC8vIE5vLW9wLgorfQorCitib29sIENETVByaXZhdGVPcGVuQ0RNOjpzdXBw
b3J0c1NlcnZlckNlcnRpZmljYXRlcygpIGNvbnN0Cit7CisgICAgLy8gU2VydmVyIGNlcnRpZmlj
YXRlcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ0RN
UHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdAoreworICAgIC8vIFNlc3Np
b25zIGFyZSBzdXBwb3J0ZWQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0
ZU9wZW5DRE06OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBl
LCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBjb25zdAoreworICAgIC8vIFZhbGlkYXRl
IHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBvYmplY3QgaW4ga2V5aWRzIGNhc2UuCisg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtleWlk
cyIpICYmIENETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KGluaXREYXRhKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFzIENF
TkMgaW5pdERhdGEuIEZJWE1FOiBWYWxpZGF0ZSBpdCBpcyBhY3R1YWxseSBDRU5DLgorICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJjZW5jIikgJiYg
IWluaXREYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBWYWxp
ZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFzIFdlYk0gaW5pdERhdGEuCisgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgIndlYm0iKSAmJiAhaW5pdERh
dGEuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplUmVz
cG9uc2UoY29uc3QgU2hhcmVkQnVmZmVyJiByZXNwb25zZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
cmVzcG9uc2UuY29weSgpOworfQorCitPcHRpb25hbDxTdHJpbmc+IENETVByaXZhdGVPcGVuQ0RN
OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2Vzc2lvbklkOworfQorCitDRE1JbnN0YW5jZU9wZW5DRE06OkNETUluc3RhbmNl
T3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKKyAgICA6IENETUluc3RhbmNlUHJveHko
a2V5U3lzdGVtKQorICAgICwgbV9vcGVuQ0RNU3lzdGVtKG9wZW5jZG1fY3JlYXRlX3N5c3RlbShr
ZXlTeXN0ZW0udXRmOCgpLmRhdGEoKSkpCisgICAgLCBtX2tleVN5c3RlbShrZXlTeXN0ZW0pCit7
Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjppbml0aWFsaXplV2l0aENvbmZpZ3VyYXRp
b24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIEFsbG93RGlzdGluY3RpdmVJZGVu
dGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3RhdGUsCisgICAgU3VjY2Vzc0NhbGxiYWNrJiYgY2Fs
bGJhY2spCit7CisgICAgY2FsbGJhY2soU3VjY2VlZGVkKTsKK30KKwordm9pZCBDRE1JbnN0YW5j
ZU9wZW5DRE06OnNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYgY2VydGlm
aWNhdGUsICBTdWNjZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBPcGVuQ0RNRXJyb3Ig
ZXJyb3IgPSBvcGVuY2RtX3N5c3RlbV9zZXRfc2VydmVyX2NlcnRpZmljYXRlKG1fb3BlbkNETVN5
c3RlbS5nZXQoKSwgY29uc3RfY2FzdDx1aW50OF90Kj4oY2VydGlmaWNhdGUtPmRhdGFBc1VJbnQ4
UHRyKCkpLAorICAgICAgICBjZXJ0aWZpY2F0ZS0+c2l6ZSgpKTsKKyAgICBjYWxsYmFjayghZXJy
b3IgPyBTdWNjZWVkZWQgOiBGYWlsZWQpOworfQorCit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6
c2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0NETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OkNETUluc3RhbmNlU2Vzc2lvbk9w
ZW5DRE0oQ0RNSW5zdGFuY2VPcGVuQ0RNJiBpbnN0YW5jZSkKKyAgICA6IENETUluc3RhbmNlU2Vz
c2lvblByb3h5KGluc3RhbmNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
bV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcy5wcm9jZXNzX2NoYWxsZW5nZV9jYWxsYmFjayA9IFtd
KE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXJbXSwgY29uc3QgdWlu
dDhfdCBjaGFsbGVuZ2VbXSwKKyAgICAgICAgY29uc3QgdWludDE2X3QgY2hhbGxlbmdlTGVuZ3Ro
KSB7CisgICAgICAgIEdTVF9ERUJVRygiR290ICdjaGFsbGVuZ2UnIE9DRE0gbm90aWZpY2F0aW9u
Iik7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzdGF0
aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKSwgYnVmZmVyID0g
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoY2hhbGxlbmdlLAorICAgICAgICAgICAgY2hh
bGxlbmdlTGVuZ3RoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghc2Vzc2lvbikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZXNzaW9uLT5jaGFsbGVuZ2VHZW5l
cmF0ZWRDYWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworICAg
IG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3Mua2V5X3VwZGF0ZV9jYWxsYmFjayA9IFtdKE9wZW5D
RE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IHVpbnQ4X3Qga2V5SUREYXRhW10sIGNv
bnN0IHVpbnQ4X3Qga2V5SURMZW5ndGgpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJHb3QgJ2tleSB1
cGRhdGVkJyBPQ0RNIG5vdGlmaWNhdGlvbiIpOworICAgICAgICBLZXlJRFR5cGUga2V5SUQ7Cisg
ICAgICAgIGtleUlELmFwcGVuZChrZXlJRERhdGEsIGtleUlETGVuZ3RoKTsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3Rh
bmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBrZXlJRCA9IFdURk1vdmUoa2V5SUQpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmtleVVwZGF0ZWRDYWxsYmFjayhXVEZNb3ZlKGtl
eUlEKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vzc2lvbkNhbGxiYWNr
cy5rZXlzX3VwZGF0ZWRfY2FsbGJhY2sgPSBbXShjb25zdCBPcGVuQ0RNU2Vzc2lvbiosIHZvaWQq
IHVzZXJEYXRhKSB7CisgICAgICAgIEdTVF9ERUJVRygiR290ICdhbGwga2V5cyB1cGRhdGVkJyBP
Q0RNIG5vdGlmaWNhdGlvbiIpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZXNzaW9uID0g
bWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSo+KHVzZXJE
YXRhKSldKCkgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmtleXNVcGRhdGVEb25lQ2FsbGJhY2soKTsKKyAg
ICAgICAgfSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLmVycm9yX21l
c3NhZ2VfY2FsbGJhY2sgPSBbXShPcGVuQ0RNU2Vzc2lvbiosIHZvaWQqIHVzZXJEYXRhLCBjb25z
dCBjaGFyIG1lc3NhZ2VbXSkgeworICAgICAgICBHU1RfRVJST1IoIkdvdCAnZXJyb3InIE9DRE0g
bm90aWZpY2F0aW9uOiAlcyIsIG1lc3NhZ2UpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtz
ZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TSo+KHVzZXJEYXRhKSksIGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1l
c3NhZ2UsCisgICAgICAgICAgICBzdHJsZW4obWVzc2FnZSkpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHNlc3Npb24tPmVycm9yQ2FsbGJhY2soV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfSk7Cisg
ICAgfTsKK30KKworUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VPcGVuQ0RN
OjpjcmVhdGVTZXNzaW9uKCkKK3sKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TT4gbmV3U2Vzc2lvbiA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKCp0
aGlzKSk7CisgICAgQVNTRVJUKG5ld1Nlc3Npb24pOworICAgIHRyYWNrU2Vzc2lvbigqbmV3U2Vz
c2lvbik7CisgICAgcmV0dXJuIG5ld1Nlc3Npb247Cit9CisKK2NsYXNzIFBhcnNlZFJlc3BvbnNl
TWVzc2FnZSB7CisKK3B1YmxpYzoKKyAgICBQYXJzZWRSZXNwb25zZU1lc3NhZ2UoY29uc3QgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFN0cmluZ1ZpZXcgcGF5bG9hZChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUoKSk7
CisgICAgICAgIHNpemVfdCB0eXBlUG9zaXRpb24gPSBwYXlsb2FkLmZpbmQoIjpUeXBlOiIpOwor
ICAgICAgICBTdHJpbmdWaWV3IHJlcXVlc3RUeXBlKHBheWxvYWQuY2hhcmFjdGVyczgoKSwgdHlw
ZVBvc2l0aW9uICE9IG5vdEZvdW5kID8gdHlwZVBvc2l0aW9uIDogMCk7CisgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IDB1OworICAgICAgICBpZiAoIXJlcXVlc3RUeXBlLmlzRW1wdHkoKSAmJiBy
ZXF1ZXN0VHlwZS5sZW5ndGgoKSAhPSBwYXlsb2FkLmxlbmd0aCgpKQorICAgICAgICAgICAgb2Zm
c2V0ID0gdHlwZVBvc2l0aW9uICsgNjsKKworICAgICAgICBpZiAocmVxdWVzdFR5cGUubGVuZ3Ro
KCkgPT0gMSkKKyAgICAgICAgICAgIG1fdHlwZSA9IG1ha2VPcHRpb25hbChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlPihyZXF1ZXN0VHlwZS50b0ludCgpKSk7CisKKyAg
ICAgICAgbV9wYXlsb2FkID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUocGF5bG9hZC5jaGFyYWN0ZXJz
OCgpICsgb2Zmc2V0LCBwYXlsb2FkLmxlbmd0aCgpIC0gb2Zmc2V0KTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1BheWxvYWQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX3BheWxv
YWQpOyB9CisgICAgY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIHBheWxvYWQoKSBjb25zdCYgeyBB
U1NFUlQobV9wYXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgpOyB9CisgICAgUmVmPFNo
YXJlZEJ1ZmZlcj4mIHBheWxvYWQoKSAmIHsgQVNTRVJUKG1fcGF5bG9hZCk7IHJldHVybiBtX3Bh
eWxvYWQudmFsdWUoKTsgfQorICAgIGJvb2wgaGFzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1fdHlwZSk7IH0KKyAgICBXZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBl
IHR5cGUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUpOyByZXR1cm4gbV90eXBlLnZhbHVlKCk7IH0K
KyAgICBXZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlIHR5cGVPcihXZWJDb3JlOjpNZWRpYUtl
eU1lc3NhZ2VUeXBlIGFsdGVybmF0ZSkgY29uc3QgeyByZXR1cm4gbV90eXBlID8gbV90eXBlLnZh
bHVlKCkgOiBhbHRlcm5hdGU7IH0KKworcHJpdmF0ZToKKyAgICBPcHRpb25hbDxSZWY8U2hhcmVk
QnVmZmVyPj4gbV9wYXlsb2FkOworICAgIE9wdGlvbmFsPFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2Fn
ZVR5cGU+IG1fdHlwZTsKK307CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2hh
bGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7
CisgICAgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShidWZmZXIp
OworCisgICAgaWYgKCFtX2NoYWxsZW5nZUNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9tZXNzYWdlID0gV1RGTW92ZShwYXJzZWRSZXNwb25zZU1lc3NhZ2UucGF5bG9hZCgpKTsKKyAg
ICAgICAgbV9uZWVkc0luZGl2aWR1YWxpemF0aW9uID0gcGFyc2VkUmVzcG9uc2VNZXNzYWdlLnR5
cGUoKSA9PSBDRE1JbnN0YW5jZVNlc3Npb246Ok1lc3NhZ2VUeXBlOjpJbmRpdmlkdWFsaXphdGlv
blJlcXVlc3Q7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjaGFsbGVuZ2VDYWxsYmFjayA6
IG1fY2hhbGxlbmdlQ2FsbGJhY2tzKQorICAgICAgICAgICAgY2hhbGxlbmdlQ2FsbGJhY2soKTsK
KyAgICAgICAgbV9jaGFsbGVuZ2VDYWxsYmFja3MuY2xlYXIoKTsKKyAgICB9IGVsc2UgaWYgKCFt
X3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGF1dG8m
IHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAg
ICAgICAgICAgc2Vzc2lvbkNoYW5nZWRDYWxsYmFjayh0cnVlLCBwYXJzZWRSZXNwb25zZU1lc3Nh
Z2UucGF5bG9hZCgpLmNvcHlSZWYoKSk7CisgICAgICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
a3MuY2xlYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9jbGllbnQgJiYgcGFyc2Vk
UmVzcG9uc2VNZXNzYWdlLmhhc1R5cGUoKSkgeworICAgICAgICAgICAgbV9jbGllbnQtPnNlbmRN
ZXNzYWdlKHN0YXRpY19jYXN0PENETU1lc3NhZ2VUeXBlPihwYXJzZWRSZXNwb25zZU1lc3NhZ2Uu
dHlwZSgpKSwKKyAgICAgICAgICAgICAgICBXVEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5w
YXlsb2FkKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2lmICFkZWZpbmVkKEdTVF9ESVNB
QkxFX0dTVF9ERUJVRykgfHwgIUdTVF9ESVNBQkxFX0dTVF9ERUJVRworc3RhdGljIGNvbnN0IGNo
YXIqIHRvU3RyaW5nKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykKK3sKKyAg
ICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXM6OlVzYWJsZToKKyAgICAgICAgcmV0dXJuICJVc2FibGUiOworICAgIGNhc2UgQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ6CisgICAgICAgIHJldHVybiAiRXhwaXJlZCI7
CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ6CisgICAg
ICAgIHJldHVybiAiUmVsZWFzZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiAiT3V0cHV0UmVzdHJpY3Rl
ZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0RG93bnNj
YWxlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXREb3duc2NhbGVkIjsKKyAgICBjYXNlIENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpTdGF0dXNQZW5kaW5nOgorICAgICAgICByZXR1cm4g
IlN0YXR1c1BlbmRpbmciOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6
OkludGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiAiSW50ZXJuYWxFcnJvciI7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAidW5r
bm93biI7CisgICAgfQorfQorI2VuZGlmCisKK0NETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVz
IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnN0YXR1cyhjb25zdCBLZXlJRFR5cGUmIGtleUlE
KSBjb25zdAoreworICAgIE9wZW5DRE1LZXlTdGF0dXMgc3RhdHVzID0gbV9zZXNzaW9uICYmICFt
X3Nlc3Npb25JRC5pc0VtcHR5KCkgPyBvcGVuY2RtX3Nlc3Npb25fc3RhdHVzKG1fc2Vzc2lvbi5n
ZXQoKSwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpIDogU3RhdHVzUGVuZGluZzsKKworICAg
IHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBVc2FibGU6CisgICAgICAgIHJldHVybiBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOworICAgIGNhc2UgRXhwaXJlZDoKKyAg
ICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpFeHBpcmVkOworICAg
IGNhc2UgUmVsZWFzZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6UmVsZWFzZWQ7CisgICAgY2FzZSBPdXRwdXRSZXN0cmljdGVkOgorICAgICAgICByZXR1
cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQ7CisgICAg
Y2FzZSBPdXRwdXREb3duc2NhbGVkOgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6Ok91dHB1dERvd25zY2FsZWQ7CisgICAgY2FzZSBTdGF0dXNQZW5kaW5nOgor
ICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRp
bmc7CisgICAgY2FzZSBJbnRlcm5hbEVycm9yOgorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXM6OkludGVybmFsRXJyb3I7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1czo6SW50ZXJuYWxFcnJvcjsKKyAgICB9Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6a2V5VXBkYXRlZENhbGxiYWNrKEtleUlEVHlwZSYmIGtleUlEKQorewor
ICAgIEdTVF9NRU1EVU1QKCJ1cGRhdGVkIGtleSIsIGtleUlELmRhdGEoKSwga2V5SUQuc2l6ZSgp
KTsKKworICAgIGF1dG8ga2V5U3RhdHVzID0gc3RhdHVzKGtleUlEKTsKKyAgICBHU1RfREVCVUco
InVwZGF0ZWQgd2l0aCB3aXRoIGtleSBzdGF0dXMgJXMiLCB0b1N0cmluZyhrZXlTdGF0dXMpKTsK
KyAgICBtX2RvZXNLZXlTdG9yZU5lZWRNZXJnaW5nIHw9IG1fa2V5U3RvcmUuYWRkKEtleUhhbmRs
ZTo6Y3JlYXRlKGtleVN0YXR1cywgV1RGTW92ZShrZXlJRCksIE9wZW5DRE06OmNyZWF0ZVNoYXJl
ZE9wZW5DRE1TZXNzaW9uKCkpKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RN
OjprZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCkKK3sKKyAgICBHU1RfREVCVUcoInVwZGF0ZSBkb25l
Iik7CisgICAgaWYgKG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcpIHsKKyAgICAgICAgbV9kb2Vz
S2V5U3RvcmVOZWVkTWVyZ2luZyA9IGZhbHNlOworICAgICAgICBhdXRvIGluc3RhbmNlID0gY2Rt
SW5zdGFuY2VPcGVuQ0RNKCk7CisgICAgICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgICAgIGlu
c3RhbmNlLT5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgIH0KKworICAgIGlmIChtX3Nl
c3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmlzRW1wdHkoKSAmJiBtX2NsaWVudCkgeworICAgICAgICBt
X2NsaWVudC0+dXBkYXRlS2V5U3RhdHVzZXMobV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1
c1ZlY3RvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgc2Vz
c2lvbkNoYW5nZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAg
IHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sodHJ1ZSwgbnVsbHB0cik7CisgICAgbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5D
RE06OmVycm9yQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBtZXNzYWdlKQoreworICAg
IEdTVF9FUlJPUigiQ0RNIGVycm9yIik7CisgICAgR1NUX01FTURVTVAoImVycm9yIGR1bXAiLCBt
ZXNzYWdlLT5kYXRhQXNVSW50OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgIGZvciAoY29u
c3QgYXV0byYgY2hhbGxlbmdlQ2FsbGJhY2sgOiBtX2NoYWxsZW5nZUNhbGxiYWNrcykKKyAgICAg
ICAgY2hhbGxlbmdlQ2FsbGJhY2soKTsKKyAgICBtX2NoYWxsZW5nZUNhbGxiYWNrcy5jbGVhcigp
OworCisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrIDogbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNoYW5nZWRDYWxsYmFjayhmYWxzZSwgbWVz
c2FnZS5jb3B5UmVmKCkpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsK
K30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpyZXF1ZXN0TGljZW5zZShMaWNl
bnNlVHlwZSBsaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8
U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhU2hhcmVkQnVmZmVyLAorICAgIExpY2Vuc2VDYWxsYmFj
ayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBG
SVhNRTogVVVJRCBvciBzeXN0ZW0gSUQ/CisgICAgYXV0byBpbnN0YW5jZSA9IGNkbUluc3RhbmNl
T3BlbkNETSgpOworICAgIEFTU0VSVChpbnN0YW5jZSk7CisgICAgbV9pbml0RGF0YSA9IEluaXRE
YXRhKGluc3RhbmNlLT5rZXlTeXN0ZW0oKSwgV1RGTW92ZShpbml0RGF0YVNoYXJlZEJ1ZmZlcikp
OworCisgICAgR1NUX1RSQUNFKCJHb2luZyB0byByZXF1ZXN0IGEgbmV3IHNlc3Npb24gaWQsIGlu
aXQgZGF0YSBzaXplICVsdSBhbmQgTUQ1ICVzIiwgbV9pbml0RGF0YS5wYXlsb2FkKCktPnNpemUo
KSwgaW5pdERhdGFNRDUobV9pbml0RGF0YSkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX01FTURV
TVAoImluaXQgZGF0YSIsIG1faW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBt
X2luaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKworICAgIE9wZW5DRE1TZXNzaW9uKiBzZXNz
aW9uID0gbnVsbHB0cjsKKyAgICBvcGVuY2RtX2NvbnN0cnVjdF9zZXNzaW9uKCZpbnN0YW5jZS0+
b3BlbkNETVN5c3RlbSgpLCBvcGVuQ0RNTGljZW5zZVR5cGUobGljZW5zZVR5cGUpLCBpbml0RGF0
YVR5cGUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9pbml0RGF0YS5wYXlsb2Fk
KCktPmRhdGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCksIG51bGxw
dHIsIDAsICZtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLCB0aGlzLCAmc2Vzc2lvbik7CisgICAg
aWYgKCFzZXNzaW9uKSB7CisgICAgICAgIEdTVF9FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBzZXNz
aW9uIik7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0
YS5wYXlsb2FkKCk7CisgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCks
IHsgfSwgZmFsc2UsIEZhaWxlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zZXNz
aW9uLnJlc2V0KHNlc3Npb24pOworICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpmcm9tVVRGOChv
cGVuY2RtX3Nlc3Npb25faWQobV9zZXNzaW9uLmdldCgpKSk7CisKKyAgICBhdXRvIGdlbmVyYXRl
Q2hhbGxlbmdlID0gW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJs
ZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGlmICht
X3Nlc3Npb25JRC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigiY291bGQgbm90
IGNyZWF0ZSBzZXNzaW9uIGlkIik7CisgICAgICAgICAgICBjYWxsYmFjayhpbml0RGF0YS5yZWxl
YXNlTm9uTnVsbCgpLCB7IH0sIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJjcmVhdGVkIGludmFsaWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwg
bV9zZXNzaW9uSUQsIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUluc3Rh
bmNlUHJveHkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEdT
VF9ERUJVRygiY3JlYXRlZCB2YWxpZCBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIGNhbGxiYWNrKG1fbWVzc2FnZS5jb3B5UmVmKCkucmVsZWFzZU5vbk51
bGwoKSwgbV9zZXNzaW9uSUQsIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiwgU3VjY2VlZGVkKTsK
KyAgICB9OworCisgICAgaWYgKG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBpc1ZhbGlkKCkpCisg
ICAgICAgIGdlbmVyYXRlQ2hhbGxlbmdlKCk7CisgICAgZWxzZQorICAgICAgICBtX2NoYWxsZW5n
ZUNhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShnZW5lcmF0ZUNoYWxsZW5nZSkpOworfQorCit2b2lk
IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnNlc3Npb25GYWlsdXJlKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tz
KQorICAgICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBudWxscHRyKTsKKyAgICBt
X3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGlj
ZW5zZVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2UsIExpY2Vuc2VVcGRhdGVDYWxs
YmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vzc2lvbklELCBzZXNzaW9u
SUQgPT0gbV9zZXNzaW9uSUQpOworCisgICAgR1NUX1RSQUNFKCJVcGRhdGluZyBzZXNzaW9uICVz
Iiwgc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxi
YWNrcy5hcHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJvb2wgc3Vj
Y2VzcywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZU1lc3NhZ2UpIG11dGFibGUgewor
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2Vzcykgewor
ICAgICAgICAgICAgaWYgKCFyZXNwb25zZU1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIW1fa2V5U3RvcmUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxz
ZSwgbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNpbmcgSlNPTiByZXBvbnNlIG1lc3Nh
Z2VzIGlzIG11Y2ggY2xlYW5lciB0aGFuIHVzaW5nIHN0cmluZyBwcmVmaXhlcywgSSBiZWxpZXZl
IHRoZXJlCisgICAgICAgICAgICAgICAgLy8gd2lsbCBldmVuIGJlIG90aGVyIHBhcnRzIG9mIHRo
ZSBzcGVjIHdoZXJlIG5vdCBoYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpbGwgYmUgYmFkLgorICAg
ICAgICAgICAgICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZSBwYXJzZWRSZXNwb25zZU1lc3NhZ2Uo
cmVzcG9uc2VNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2VNZXNz
YWdlLmhhc1BheWxvYWQoKSkgeworICAgICAgICAgICAgICAgICAgICBSZWY8U2hhcmVkQnVmZmVy
PiBtZXNzYWdlID0gV1RGTW92ZShwYXJzZWRSZXNwb25zZU1lc3NhZ2UucGF5bG9hZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJnb3QgbWVzc2FnZSBvZiBzaXplICVsdSIsIG1l
c3NhZ2UtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9NRU1EVU1QKCJtZXNzYWdl
IiwgbWVzc2FnZS0+ZGF0YUFzVUludDhQdHIoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIocGFyc2VkUmVzcG9uc2VNZXNz
YWdlLnR5cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShtZXNzYWdlKSksIFN1Y2Nlc3NWYWx1ZTo6U3Vj
Y2VlZGVkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBH
U1RfRVJST1IoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIiwgcmVz
cG9uc2VNZXNzYWdlID8gcmVzcG9uc2VNZXNzYWdlLT5zaXplKCkgOiAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1IoInVwZGF0
ZSBsaWNlbnNlIHJlcG9ydGVkIGVycm9yIHN0YXRlIik7CisgICAgICAgICAgICBjYWxsYmFjayhm
YWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1Zh
bHVlOjpGYWlsZWQpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwg
bV9zZXNzaW9uSUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl91cGRhdGUobV9zZXNzaW9u
LmdldCgpLCByZXNwb25zZS0+ZGF0YUFzVUludDhQdHIoKSwgcmVzcG9uc2UtPnNpemUoKSkpCisg
ICAgICAgIHNlc3Npb25GYWlsdXJlKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETTo6bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUX1VOVVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7CisKKyAgICBt
X3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNl
TWVzc2FnZSkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
ICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNlTWVzc2FnZSkKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVj
dG9yKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRl
ZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBVc2luZyBKU09OIHJlcG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBj
bGVhbmVyIHRoYW4gdXNpbmcgc3RyaW5nIHByZWZpeGVzLCBJIGJlbGlldmUgdGhlcmUKKyAgICAg
ICAgICAgICAgICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIgcGFydHMgb2YgdGhlIHNwZWMgd2hlcmUg
bm90IGhhdmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBiZSBiYWQuCisgICAgICAgICAgICAgICAg
UGFyc2VkUmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShyZXNwb25zZU1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFzUGF5bG9h
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2UgPSBX
VEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICAgICAgICAg
ICAgICBHU1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZS0+c2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlLT5k
YXRhQXNVSW50OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgc3RkOjptYWtlX3BhaXIocGFyc2Vk
UmVzcG9uc2VNZXNzYWdlLnR5cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVz
dCksCisgICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKG1lc3NhZ2UpKSwgU3VjY2Vzc1Zh
bHVlOjpTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJtZXNzYWdlIG9mIHNp
emUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIHJlc3BvbnNlTWVzc2FnZSA/IHJlc3BvbnNl
TWVzc2FnZS0+c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVk
LCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2Fn
ZURhdGEgPSByZXNwb25zZU1lc3NhZ2UgPyByZXNwb25zZU1lc3NhZ2UtPmRhdGEoKSA6IG51bGxw
dHI7CisgICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2FnZVNpemUgPSByZXNwb25zZU1lc3Nh
Z2UgPyByZXNwb25zZU1lc3NhZ2UtPnNpemUoKSA6IDA7CisgICAgICAgICAgICBTdHJpbmdWaWV3
IHJlc3BvbnNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXNwb25zZU1lc3NhZ2VE
YXRhKSwgcmVzcG9uc2VNZXNzYWdlU2l6ZSk7CisgICAgICAgICAgICBHU1RfRVJST1IoInNlc3Np
b24gJXMgbm90IGxvYWRlZCwgcmVhc29uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwg
cmVzcG9uc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCwgc2Vz
c2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0ocmVzcG9uc2UpKTsKKyAgICAgICAgfQorICAgIH0p
OworICAgIGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2Rt
X3Nlc3Npb25fbG9hZChtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgp
OworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmIHNlc3Npb25JRCwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsK
KworICAgIGlmIChtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1wdHkoKSkKKyAgICAgICAg
b3BlbmNkbV9zZXNzaW9uX2Nsb3NlKG1fc2Vzc2lvbi5nZXQoKSk7CisKKyAgICByZW1vdmVGcm9t
SW5zdGFuY2VQcm94eSgpOworCisgICAgY2FsbGJhY2soKTsKK30KKwordm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25J
RCwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsK
KworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1Y2Nlc3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYg
YnVmZmVyKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpSZWxlYXNl
ZCksIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3Bv
bnNlTWVzc2FnZShidWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1l
c3NhZ2UuaGFzUGF5bG9hZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZm
ZXI+IG1lc3NhZ2UgPSBXVEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOwor
ICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUcoInNlc3Npb24gJXMgcmVtb3ZlZCwgbWVzc2Fn
ZSBsZW5ndGggJWx1IiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwgbWVzc2FnZS0+c2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVk
aWFLZXlTdGF0dXM6OlJlbGVhc2VkKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCBh
cyBzZXNzaW9uICVzIHJlbW92YWwgYW5zd2VyIiwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5
U3RhdHVzOjpJbnRlcm5hbEVycm9yKSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxl
ZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgR1NUX1dBUk5JTkcoImNvdWxkIG5vdCByZW1vdmUgc2Vzc2lvbiAlcyIsIG1f
c2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9y
ZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJyb3IpLCBXVEY6Om51bGxvcHQs
IFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9z
ZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fcmVtb3Zl
KG1fc2Vzc2lvbi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWlsdXJlKCk7CisKKyAgICByZW1v
dmVGcm9tSW5zdGFuY2VQcm94eSgpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5D
RE06OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK09wdGlvbmFsPENETUluc3RhbmNlT3BlbkNETSY+IENETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE06OmNkbUluc3RhbmNlT3BlbkNETSgpIGNvbnN0Cit7CisgICAgYXV0byBp
bnN0YW5jZSA9IGNkbUluc3RhbmNlUHJveHkoKTsKKyAgICBpZiAoIWluc3RhbmNlKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRE1JbnN0YW5j
ZU9wZW5DRE0mPigqaW5zdGFuY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
T3BlbkNETS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9DRE1PcGVuQ0RNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4x
ZWViNzU5YWExNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaApAQCAtMCwwICsxLDE5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShP
UEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNRmFjdG9yeS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNl
U2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNETVByaXZhdGUuaCIKKyNpbmNsdWRlICJDRE1Qcm94eS5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgPG9wZW5fY2RtLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgT3BlbkNETSB7CisKK3N0cnVjdCBP
cGVuQ0RNU3lzdGVtRGVsZXRlciB7CisgICAgT3BlbkNETUVycm9yIG9wZXJhdG9yKCkoT3BlbkNE
TVN5c3RlbSogcHRyKSBjb25zdCB7IHJldHVybiBvcGVuY2RtX2Rlc3RydWN0X3N5c3RlbShwdHIp
OyB9Cit9OwordXNpbmcgVW5pcXVlT3BlbkNETVN5c3RlbSA9IHN0ZDo6dW5pcXVlX3B0cjxPcGVu
Q0RNU3lzdGVtLCBPcGVuQ0RNU3lzdGVtRGVsZXRlcj47CisKK3ZvaWQgZGVzdHJ1Y3RPcGVuQ0RN
U2Vzc2lvbihPcGVuQ0RNU2Vzc2lvbiopOworc3RydWN0IE9wZW5DRE1TZXNzaW9uRGVsZXRlciB7
CisgICAgdm9pZCBvcGVyYXRvcigpKE9wZW5DRE1TZXNzaW9uKiBwdHIpIGNvbnN0IHsgZGVzdHJ1
Y3RPcGVuQ0RNU2Vzc2lvbihwdHIpOyB9Cit9OwordXNpbmcgVW5pcXVlT3BlbkNETVNlc3Npb24g
PSBzdGQ6OnVuaXF1ZV9wdHI8T3BlbkNETVNlc3Npb24sIE9wZW5DRE1TZXNzaW9uRGVsZXRlcj47
Cit1c2luZyBTaGFyZWRPcGVuQ0RNU2Vzc2lvbiA9IHN0ZDo6c2hhcmVkX3B0cjxPcGVuQ0RNU2Vz
c2lvbj47CitTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBjcmVhdGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbihP
cGVuQ0RNU2Vzc2lvbiogPSBudWxscHRyKTsKKworfSAvLyBuYW1lc3BhY2UgT3BlbkNETQorCitj
bGFzcyBDRE1GYWN0b3J5T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5LCBwdWJsaWMg
Q0RNUHJveHlGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgQ0RNRmFjdG9yeU9wZW5DRE0mIHNpbmdsZXRvbigpOworCisgICAgdmlydHVh
bCB+Q0RNRmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q0RNUHJpdmF0ZT4gY3JlYXRlQ0RNKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIFJlZlB0cjxD
RE1Qcm94eT4gY3JlYXRlQ0RNUHJveHkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBz
dXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgc3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDRE1GYWN0b3J5T3BlbkNETT47CisgICAgQ0RNRmFj
dG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDRE1Qcml2YXRlT3BlbkNETSBm
aW5hbCA6IHB1YmxpYyBDRE1Qcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBDRE1Qcml2YXRlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkg
OiBtX2tleVN5c3RlbShrZXlTeXN0ZW0pIHsgfTsKKyAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlT3Bl
bkNETSgpID0gZGVmYXVsdDsKKworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0
RGF0YVR5cGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRpb24o
Y29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
c3VwcG9ydHNDb25maWd1cmF0aW9uV2l0aFJlc3RyaWN0aW9ucyhjb25zdCBDRE1LZXlTeXN0ZW1D
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25z
dCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25m
aWd1cmF0aW9uKTsKKyAgICB9CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25UeXBlV2l0aENvbmZp
Z3VyYXRpb24oY29uc3QgQ0RNU2Vzc2lvblR5cGUmLCBjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgVmVjdG9y
PEF0b21TdHJpbmc+IHN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0IGZpbmFsOworICAgIENE
TVJlcXVpcmVtZW50IGRpc3RpbmN0aXZlSWRlbnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1L
ZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmlu
YWw7CisgICAgQ0RNUmVxdWlyZW1lbnQgcGVyc2lzdGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3Qg
Q0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdp
bkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgY29uc3QgZmlu
YWw7CisgICAgUmVmUHRyPENETUluc3RhbmNlPiBjcmVhdGVJbnN0YW5jZSgpIGZpbmFsOworICAg
IHZvaWQgbG9hZEFuZEluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzU2VydmVy
Q2VydGlmaWNhdGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25zKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcm
LCBjb25zdCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYpIGNvbnN0IGZpbmFsOwor
ICAgIE9wdGlvbmFsPFN0cmluZz4gc2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJikgY29u
c3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsKKworY2xh
c3MgQ0RNSW5zdGFuY2VPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHkgewor
cHVibGljOgorICAgIENETUluc3RhbmNlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7
CisgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VPcGVuQ0RNKCkgPSBkZWZhdWx0OworCisgICAgLy8g
Q0RNSW5zdGFuY2UKKyAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RNOyB9CisgICAg
dm9pZCBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmln
dXJhdGlvbiYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3Rh
dGUsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlcnZlckNlcnRpZmlj
YXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2
b2lkIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgY29uc3Qg
U3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2tleVN5c3RlbTsgfQor
ICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKKwor
ICAgIE9wZW5DRE1TeXN0ZW0mIG9wZW5DRE1TeXN0ZW0oKSBjb25zdCB7IHJldHVybiAqbV9vcGVu
Q0RNU3lzdGVtLmdldCgpOyB9OworCisgICAgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJlc291cmNl
cygpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAg
ICBDRE1JbnN0YW5jZVByb3h5OjpyZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpOworICAgICAg
ICBtX29wZW5DRE1TeXN0ZW0ucmVzZXQobnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAg
IE9wZW5DRE06OlVuaXF1ZU9wZW5DRE1TeXN0ZW0gbV9vcGVuQ0RNU3lzdGVtOworICAgIFN0cmlu
ZyBtX2tleVN5c3RlbTsKK307CisKK2NsYXNzIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0gZmlu
YWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgeworcHVibGljOgorICAgIENETUlu
c3RhbmNlU2Vzc2lvbk9wZW5DRE0oQ0RNSW5zdGFuY2VPcGVuQ0RNJik7CisKKyAgICB2b2lkIHJl
cXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUs
IFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lk
IGxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBM
b2FkU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0
IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3Zl
U2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRh
Q2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCBzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Nl
c3Npb24gJiYgbV9tZXNzYWdlICYmICFtX21lc3NhZ2UtPmlzRW1wdHkoKTsgfQorCisgICAgdm9p
ZCBzZXRDbGllbnQoV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGllbnQ+JiYgY2xpZW50KSBm
aW5hbCB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBjbGVhckNsaWVu
dCgpIGZpbmFsIHsgbV9jbGllbnQuY2xlYXIoKTsgfQorCisgICAgdm9pZCByZWxlYXNlRGVjcnlw
dGlvblJlc291cmNlcygpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICAgICAgbV9zZXNz
aW9uLnJlc2V0KG51bGxwdHIpOworICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6cmVs
ZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9u
YWw8Q0RNSW5zdGFuY2VPcGVuQ0RNJj4gY2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29uc3Q7CisKKyAg
ICB1c2luZyBOb3RpZmljYXRpb24gPSB2b2lkIChDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjoq
KShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB1c2luZyBDaGFsbGVuZ2VH
ZW5lcmF0ZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcgU2Vzc2lvbkNo
YW5nZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoYm9vbCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4m
Jik+OworCisgICAgdm9pZCBjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVk
QnVmZmVyPiYmKTsKKyAgICB2b2lkIGtleVVwZGF0ZWRDYWxsYmFjayhLZXlJRFR5cGUmJik7Cisg
ICAgdm9pZCBrZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgdm9pZCBlcnJvckNhbGxiYWNr
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzIHN0YXR1cyhjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIHNlc3Npb25GYWls
dXJlKCk7CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgYWxsIG9yaWdpbmFsIHVzZXMgb2YgdGhlc2Ug
YXR0cmlidXRlcy4KKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgS2V5U3RvcmUgbV9rZXlT
dG9yZTsKKyAgICBib29sIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgeyBmYWxzZSB9OworICAg
IEluaXREYXRhIG1faW5pdERhdGE7CisgICAgT3BlbkNETVNlc3Npb25DYWxsYmFja3MgbV9vcGVu
Q0RNU2Vzc2lvbkNhbGxiYWNrcyB7IH07CisgICAgT3BlbkNETTo6VW5pcXVlT3BlbkNETVNlc3Np
b24gbV9zZXNzaW9uOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWVzc2FnZTsKKyAgICBi
b29sIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiB7IGZhbHNlIH07CisgICAgVmVjdG9yPENoYWxs
ZW5nZUdlbmVyYXRlZENhbGxiYWNrPiBtX2NoYWxsZW5nZUNhbGxiYWNrczsKKyAgICBWZWN0b3I8
U2Vzc2lvbkNoYW5nZWRDYWxsYmFjaz4gbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrczsKKyAgICBX
ZWFrUHRyPENETUluc3RhbmNlU2Vzc2lvbkNsaWVudD4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0RNX0lOU1RBTkNFKFdl
YkNvcmU6OkNETUluc3RhbmNlT3BlbkNETSwgV2ViQ29yZTo6Q0RNSW5zdGFuY2U6OkltcGxlbWVu
dGF0aW9uVHlwZTo6T3BlbkNETSk7CisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
CmluZGV4IGU3NzMyYWI5NGU3YS4uY2ZlNGM3YWE1MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
UHJveHlDbGVhcktleS5jcHAKQEAgLTEyMSwxMSArMTIxLDE0IEBAIGJvb2wgQ0RNUHJveHlDbGVh
cktleTo6Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikK
ICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CiAgICAga2V5SURWZWMuYXBwZW5kKGluLmtl
eUlELCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKIAotICAgIGF1dG8ga2V5RGF0YSA9IGdldE9yV2Fp
dEZvcktleShrZXlJRFZlYyk7CisgICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5VmFs
dWUoa2V5SURWZWMpOwogICAgIGlmICgha2V5RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShn
Q3J5cHRIYW5kbGUoKSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7CisgICAg
QVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHVpbnQ4X3Q+PihrZXlEYXRhLnZh
bHVlKCkpKTsKKyAgICBhdXRvJiBrZXlEYXRhVmFsdWUgPSBXVEY6OmdldDxWZWN0b3I8dWludDhf
dD4+KGtleURhdGEudmFsdWUoKSk7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9y
ID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRsZSgpLCBrZXlEYXRhVmFsdWUuZGF0YSgp
LCBrZXlEYXRhVmFsdWUuc2l6ZSgpKSkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRrZXkp
OiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVu
Q0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlPcGVuQ0RNLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjBjMTBhOWY1OGZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNwcApAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eU9wZW5D
RE0uaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQor
CisjaW5jbHVkZSAiQ0RNT3BlbkNETS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
IDxvcGVuX2NkbV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCitHU1Rf
REVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVn
b3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHRE
ZWJ1Z0NhdGVnb3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTk9URTogWW91VHViZSAy
MDE5IEVNRSBjb25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhpcyB0byBiZSA+PTVzLgorY29uc3Qg
V1RGOjpTZWNvbmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dCA9IFdURjo6U2Vjb25kcyg2
KTsKKworT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24gQ0RNUHJveHlPcGVuQ0RNOjpnZXRE
ZWNyeXB0aW9uU2Vzc2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYgaW4pIGNvbnN0Cit7Cisg
ICAgYXV0byBtYXBwZWRLZXlJRCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGluLmtleUlEQnVm
ZmVyLCBHU1RfTUFQX1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5SUQpIHsKKyAgICAgICAgR1NU
X0VSUk9SKCJGYWlsZWQgdG8gbWFwIGtleSBJRCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgYXV0byBrZXlJRCA9IG1hcHBlZEtleUlELT5jcmVhdGVWZWN0
b3IoKTsKKworICAgIGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGtleUlE
KTsKKyAgICBpZiAoIWtleUhhbmRsZS5oYXNWYWx1ZSgpIHx8ICFrZXlIYW5kbGUudmFsdWUoKS0+
aXNTdGF0dXNDdXJyZW50bHlWYWxpZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IEtleUhhbmRsZVZhbHVlVmFyaWFudCYga2V5RGF0YSA9IGtleUhhbmRsZS52YWx1ZSgpLT52YWx1
ZSgpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE9wZW5DRE06OlNoYXJlZE9w
ZW5DRE1TZXNzaW9uPihrZXlEYXRhKSk7CisKKyAgICBhdXRvJiBrZXlWYWx1ZSA9IFdURjo6Z2V0
PE9wZW5DRE06OlNoYXJlZE9wZW5DRE1TZXNzaW9uPihrZXlEYXRhKTsKKworICAgIGlmICgha2V5
VmFsdWUpIHsKKyAgICAgICAgYXV0byBuZXdLZXlWYWx1ZSA9IE9wZW5DRE06OmNyZWF0ZVNoYXJl
ZE9wZW5DRE1TZXNzaW9uKG9wZW5jZG1fZ2V0X3N5c3RlbV9zZXNzaW9uKCZzdGF0aWNfY2FzdDxj
b25zdCBDRE1JbnN0YW5jZU9wZW5DRE0qPihpbnN0YW5jZSgpKS0+b3BlbkNETVN5c3RlbSgpLAor
ICAgICAgICAgICAga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCksIHNfbGljZW5zZUtleVJlc3Bv
bnNlVGltZW91dC5taWxsaXNlY29uZHNBczx1aW50MzJfdD4oKSkpOworICAgICAgICBBU1NFUlQo
bmV3S2V5VmFsdWUpOworICAgICAgICBrZXlIYW5kbGUudmFsdWUoKS0+dGFrZVZhbHVlSWZEaWZm
ZXJlbnQoV1RGTW92ZShuZXdLZXlWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1
ZTsKK30KKworYm9vbCBDRE1Qcm94eU9wZW5DRE06OmRlY3J5cHQoQ0RNUHJveHlPcGVuQ0RNOjpE
ZWNyeXB0aW9uQ29udGV4dCYgaW5wdXQpCit7CisgICAgT3BlbkNETTo6U2hhcmVkT3BlbkNETVNl
c3Npb24gc2Vzc2lvbiA9IGdldERlY3J5cHRpb25TZXNzaW9uKGlucHV0KTsKKyAgICBpZiAoIXNl
c3Npb24pIHsKKyAgICAgICAgR1NUX0VSUk9SKCJ0aGVyZSBpcyBubyB2YWxpZCBzZXNzaW9uIHRv
IGRlY3J5cHQgZm9yIHRoZSBwcm92aWRlZCBrZXkgSUQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIEdTVF9UUkFDRSgiZGVjcnlwdGluZyIpOworICAgIC8vIERlY3J5cHQg
Y2lwaGVyLgorICAgIE9wZW5DRE1FcnJvciBlcnJvckNvZGUgPSBvcGVuY2RtX2dzdHJlYW1lcl9z
ZXNzaW9uX2RlY3J5cHQoc2Vzc2lvbi5nZXQoKSwgaW5wdXQuZGF0YUJ1ZmZlciwgaW5wdXQuc3Vi
c2FtcGxlc0J1ZmZlciwgaW5wdXQubnVtU3Vic2FtcGxlcywKKyAgICAgICAgaW5wdXQuaXZCdWZm
ZXIsIGlucHV0LmtleUlEQnVmZmVyLCAwKTsKKyAgICBpZiAoZXJyb3JDb2RlKSB7CisgICAgICAg
IEdTVF9FUlJPUigiZGVjcnlwdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgJVgiLCBlcnJvckNvZGUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYmZiMDhiZGRlOGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL0NETVByb3h5T3BlbkNETS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2lu
Y2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBz
aG91bGQgdXNlIHRvIG1ha2UgdXNlIG9mIGEgcGxhdGZvcm0gQ0RNIG1vZHVsZS4KK2NsYXNzIENE
TVByb3h5T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFr
UHRyPENETVByb3h5T3BlbkNETSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+
IHsKK3B1YmxpYzoKKyAgICBDRE1Qcm94eU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0p
CisgICAgICAgIDogbV9rZXlTeXN0ZW0oa2V5U3lzdGVtKSB7IH0KKyAgICB2aXJ0dWFsIH5DRE1Q
cm94eU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1Y3QgRGVjcnlwdGlvbkNvbnRleHQg
eworICAgICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyOworICAgICAgICBHc3RCdWZmZXIqIGl2
QnVmZmVyOworICAgICAgICBHc3RCdWZmZXIqIGRhdGFCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZl
ciogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisgICAg
fTsKKworICAgIGJvb2wgZGVjcnlwdChEZWNyeXB0aW9uQ29udGV4dCYpOworICAgIGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKCkgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KKworcHJpdmF0ZToKKyAg
ICBPcGVuQ0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBnZXREZWNyeXB0aW9uU2Vzc2lvbihjb25z
dCBEZWNyeXB0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURf
TUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1F
VXRpbGl0aWVzLmgKaW5kZXggOGE5MmNhM2IxZWE4Li4yMWUyZDU1ZWRmZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVy
RU1FVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaApAQCAtMjksNiArMjksOSBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVS
X0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJRCAiMTA3N2VmZWMtYzBiMi00ZDAyLWFjZTMtM2Mx
ZTUyZTJmYjRiIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2RlZmluZSBXRUJDT1JFX0dTVFJFQU1F
Ul9FTUVfVVRJTElUSUVTX1dJREVWSU5FX1VVSUQgImVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3
ZGNkNTFkMjFlZCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbml0RGF0
YSB7CkBAIC00OCw2ICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGF5bG9hZCA9IG1hcHBl
ZEluaXREYXRhLT5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKICAgICB9CiAKKyAgICBJbml0RGF0YShj
b25zdCBTdHJpbmcmIHN5c3RlbUlkLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHBheWxvYWQpCisg
ICAgICAgIDogbV9zeXN0ZW1JZChzeXN0ZW1JZCkKKyAgICAgICAgLCBtX3BheWxvYWQoV1RGTW92
ZShwYXlsb2FkKSkKKyAgICB7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEmJiBp
bml0RGF0YSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBzb21lIGNvbmZ1c2lv
biBoZXJlIGFib3V0IGhvdyB0byBkZXRlY3QgdGhlCkBAIC02NCw3ICs3Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9wYXlsb2FkLT5hcHBlbmQoKmluaXREYXRhLnBheWxvYWQoKSk7CiAgICAgfQog
Ci0gICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF5bG9hZDsgfQorICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBwYXlsb2FkKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVtSWQ7IH0KICAgICBTdHJpbmcgcGF5bG9hZENvbnRhaW5l
clR5cGUoKSBjb25zdAogICAgIHsKQEAgLTExNSwxNyArMTI0LDMzIEBAIGNsYXNzIEdTdHJlYW1l
ckVNRVV0aWxpdGllcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0
KiBzX0NsZWFyS2V5VVVJRCA9IFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJL
RVlfVVVJRDsKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlLZXlT
eXN0ZW0gPSAib3JnLnczLmNsZWFya2V5IjsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0
aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfV2lkZXZpbmVVVUlEID0gV0VCQ09SRV9HU1RSRUFN
RVJfRU1FX1VUSUxJVElFU19XSURFVklORV9VVUlEOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hh
ciBjb25zdCogc19XaWRldmluZUtleVN5c3RlbSA9ICJjb20ud2lkZXZpbmUuYWxwaGEiOworI2Vu
ZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpc0NsZWFyS2V5S2V5U3lzdGVtKGNvbnN0IFN0cmluZyYg
a2V5U3lzdGVtKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
a2V5U3lzdGVtLCBzX0NsZWFyS2V5S2V5U3lzdGVtKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoT1BF
TkNETSkKKyAgICBzdGF0aWMgYm9vbCBpc1dpZGV2aW5lS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYg
a2V5U3lzdGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
a2V5U3lzdGVtLCBzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBrZXlTeXN0ZW1Ub1V1aWQoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0p
CiAgICAgewogICAgICAgICBpZiAoaXNDbGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pKQogICAg
ICAgICAgICAgcmV0dXJuIHNfQ2xlYXJLZXlVVUlEOwogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisg
ICAgICAgIGlmIChpc1dpZGV2aW5lS2V5U3lzdGVtKGtleVN5c3RlbSkpCisgICAgICAgICAgICBy
ZXR1cm4gc19XaWRldmluZVVVSUQ7CisjZW5kaWYKKwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlw
dG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDg2Yjdj
NjZmYWQ0Zi4uNTEwM2Q0Y2I5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBz
dHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7CiB9OwogCiBzdGF0aWMg
dm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5
c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyBib29s
IGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZiwgY29uc3QgUmVmUHRyPENETVByb3h5PiYpOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBr
ZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVm
ZmVyKiBzdWJTYW1wbGVzKTsKIApAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
bWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdAogICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7
CiAKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFz
cyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwotICAgIGNlbmNDbGFz
cy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5
VVVJRDsKKyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5D
UFRSKHByb3RlY3Rpb25TeXN0ZW1JZCk7CiAgICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0dGFjaGVk
ID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2VuY0NsYXNzLT5k
ZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKQEAgLTEwNiw2ICsxMDcsMTEg
QEAgc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIEdTVF9DQUxMX1BB
UkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAorc3RhdGljIGNv
bnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KikKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5
VVVJRDsKK30KKwogc3RhdGljIGJvb2wgY2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94
eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChz
ZWxmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCA0N2I1NjBmNzM5MjAuLjE1
ZTEzYWJmYmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0xMzQsMTQgKzEz
NCwxNCBAQCBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiBi
YXNlLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAogICAgICAgICAgICAgLy8gY2FuIGNhdXNl
IGNhcHMgbmVnb3RpYXRpb24gZmFpbHVyZXMgd2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVhbXMu
CiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMob3V0Z29pbmdTdHJ1Y3R1
cmUuZ2V0KCksICJiYXNlLXByb2ZpbGUiLCAiY29kZWNfZGF0YSIsICJoZWlnaHQiLCAiZnJhbWVy
YXRlIiwgImxldmVsIiwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICJwcm9maWxlIiwgInJhdGUiLCAi
d2lkdGgiLCBudWxscHRyKTsKIAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29p
bmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGts
YXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChv
dXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklO
Rywga2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZChzZWxmKSwKICAgICAgICAgICAgICAgICAib3Jp
Z2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUo
aW5jb21pbmdTdHJ1Y3R1cmUpLCBudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gR1NUX1BST1RF
Q1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lEIHdhcyBhZGRlZCBpbiB0aGUgR1N0cmVhbWVyCiAg
ICAgICAgICAgICAvLyBkZXZlbG9wZW1lbnQgZ2l0IG1hc3RlciB3aGljaCB3aWxsIHNoaXAgYXMg
dmVyc2lvbiAxLjE2LjAuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dGdv
aW5nU3RydWN0dXJlLmdldCgpLAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQotICAg
ICAgICAgICAgICAgICFnX3N0cmNtcDAoa2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwgR1NUX1BS
T1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVNX0lEKSA/ICJhcHBsaWNhdGlvbi94LXdlYm0tZW5j
IiA6CisgICAgICAgICAgICAgICAgIWdfc3RyY21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlk
KHNlbGYpLCBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklFRF9TWVNURU1fSUQpID8gImFwcGxpY2F0
aW9uL3gtd2VibS1lbmMiIDoKICNlbmRpZgogICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94
LWNlbmMiKTsKICAgICAgICAgfQpAQCAtMTc3LDYgKzE3NywxMiBAQCBzdGF0aWMgR3N0Rmxvd1Jl
dHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciog
YnVmZmVyKQogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9H
RVRfUFJJVkFURShzZWxmKTsKIAorICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9w
cm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CisgICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJCdWZmZXIgJXAgZG9lcyBub3QgY29udGFpbiBw
cm90ZWN0aW9uIG1ldGEsIG5vdCBkZWNyeXB0aW5nIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX09LOworICAgIH0KKwogICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0
dGFjaG1lbnRNdXRleCk7CiAKICAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5l
Z290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgpAQCAtMTkxLDEyICsxOTcs
NiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zv
cm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB9CiAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHByaXYt
PmNkbVByb3h5LmdldCgpKTsKICAgICB9Ci0KLSAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVj
dGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZl
cl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwotICAgIGlmICghcHJvdGVjdGlvbk1ldGEp
IHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90
ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgfQogICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlv
bk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsK
ICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5oCmluZGV4IGJiMTE2NmQzODAzMy4uYTA0NjVmZjUzZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuaApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQgewogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
Q2xhc3MgewogICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAotICAgIGNv
bnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAgICBjb25zdCBjaGFyKiAoKnByb3RlY3Rp
b25TeXN0ZW1JZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogICAgIGJv
b2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5PiYpOwogICAgIGJvb2wgKCpkZWNyeXB0
KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZl
ciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1
YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAwY2Q3YzEyNmI3ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwx
NzIgQEAKKy8qIEdTdHJlYW1lciBPcGVuQ0RNIGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1
MDAsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oIgorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RS
RUFNRVIpCisKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVu
Q0RNLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
RU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2Uv
Z3N0Ynl0ZXJlYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VU
X1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRf
VFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2
YXRlKSkKK3N0cnVjdCBfV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUgeworICAgIFJl
ZlB0cjxDRE1Qcm94eU9wZW5DRE0+IGNkbVByb3h5OworfTsKKworc3RhdGljIHZvaWQgZmluYWxp
emUoR09iamVjdCopOworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0
dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBjb25zdCBSZWZQdHI8
Q0RNUHJveHk+Jik7CitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIq
IHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LAorICAgIEdzdEJ1ZmZlciogc3ViU2Ft
cGxlcyk7CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVi
dWdDYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYU9wZW5DRE1E
ZWNyeXB0RGVidWdDYXRlZ29yeQorCitzdGF0aWMgY29uc3QgY2hhciogY2VuY0VuY3J5cHRpb25N
ZWRpYVR5cGVzW10gPSB7ICJ2aWRlby9tcDQiLCAiYXVkaW8vbXA0IiwgInZpZGVvL3gtaDI2NCIs
ICJhdWRpby9tcGVnIiwgbnVsbHB0ciB9Oworc3RhdGljIGNvbnN0IGNoYXIqIHdlYm1FbmNyeXB0
aW9uTWVkaWFUeXBlc1tdID0geyAidmlkZW8vd2VibSIsICJhdWRpby93ZWJtIiwgInZpZGVvL3gt
dnA5IiwgbnVsbHB0ciB9OworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxh
dGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAg
ICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMoCisgICAgICAgICJ2aWRlby93
ZWJtOyAiCisgICAgICAgICJhdWRpby93ZWJtOyAiCisgICAgICAgICJ2aWRlby9tcDQ7ICIKKyAg
ICAgICAgImF1ZGlvL21wNDsgIgorICAgICAgICAiYXVkaW8vbXBlZzsgIgorICAgICAgICAidmlk
ZW8veC1oMjY0OyAiCisgICAgICAgICJ2aWRlby94LXZwOTsgIikpOworCisjZGVmaW5lIHdlYmtp
dF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJ
TkVfVFlQRShXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0LCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9k
ZWNyeXB0LCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpOworCitzdGF0aWMgR1JlZlB0
cjxHc3RDYXBzPiBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCkKK3sKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBrZXlTeXN0ZW0gOiBDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9uKCku
c3VwcG9ydGVkS2V5U3lzdGVtcygpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBjZW5jRW5j
cnlwdGlvbk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5k
X3N0cnVjdHVyZShjYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1j
ZW5jIiwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAg
ICAgIGNlbmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19U
WVBFX1NUUklORywgR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQoa2V5U3lz
dGVtKSwgbnVsbHB0cikpOworICAgICAgICB9CisgICAgICAgIGlmIChHU3RyZWFtZXJFTUVVdGls
aXRpZXM6OmlzV2lkZXZpbmVLZXlTeXN0ZW0oa2V5U3lzdGVtKSkgeworICAgICAgICAgICAgLy8g
Tm8ga2V5IHN5c3RlbSBVVUlEIGZvciB3ZWJtLiBJdCdzIG5vdCBzZXQgaW4gY2FwcyBmb3IgaXQg
YW5kIGl0J3MganVzdCBXaWRldmluZS4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyB3ZWJt
RW5jcnlwdGlvbk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgICAgIGdzdF9jYXBz
X2FwcGVuZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0
aW9uL3gtd2VibS1lbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsCisg
ICAgICAgICAgICAgICAgICAgIHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgbnVsbHB0cikp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJzaW5r
IHBhZCB0ZW1wbGF0ZSBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKworICAg
IHJldHVybiBjYXBzOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNy
eXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzKiBrbGFzcykKK3sK
KyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVi
dWdDYXRlZ29yeSwgIndlYmtpdG9wZW5jZG0iLCAwLCAiT3BlbkNETSBkZWNyeXB0Iik7CisKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gZmluYWxpemU7CisKKyAgICBHc3RFbGVtZW50Q2xh
c3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHUmVmUHRy
PEdzdENhcHM+IGdzdFNpbmtQYWRUZW1wbGF0ZUNhcHMgPSBjcmVhdGVTaW5rUGFkVGVtcGxhdGVD
YXBzKCk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xh
c3MsIGdzdF9wYWRfdGVtcGxhdGVfbmV3KCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FM
V0FZUywgZ3N0U2lua1BhZFRlbXBsYXRlQ2Fwcy5nZXQoKSkpOworICAgIGdzdF9lbGVtZW50X2Ns
YXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0
ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGlj
X21ldGFkYXRhKGVsZW1lbnRDbGFzcywgIkRlY3J5cHQgZW5jcnlwdGVkIGNvbnRlbnQgdXNpbmcg
T3BlbkNETSIsIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SLAorICAgICAgICAi
RGVjcnlwdHMgZW5jcnlwdGVkIG1lZGlhIHVzaW5nIE9wZW5DRE0uIiwgIlhhYmllciBSb2Ryw61n
dWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4iKTsKKworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY29tbW9uQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKKyAgICBjb21tb25DbGFzcy0+cHJvdGVjdGlvblN5c3Rl
bUlkID0gR1NUX0RFQlVHX0ZVTkNQVFIocHJvdGVjdGlvblN5c3RlbUlkKTsKKyAgICBjb21tb25D
bGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNo
ZWQpOworICAgIGNvbW1vbkNsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlw
dCk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRN
ZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfb3BlbmNkbV9kZWNyeXB0X2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCogc2VsZikK
K3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgc2VsZi0+cHJpdiA9
IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSgp
OworfQorCitzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2Vi
S2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZ
UFQob2JqZWN0KTsKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9
IHNlbGYtPnByaXY7CisgICAgcHJpdi0+fldlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRl
KCk7CisKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2Jq
ZWN0KSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisgICAgQVNT
RVJUKHByaXYtPmNkbVByb3h5KTsKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpr
ZXlTeXN0ZW1Ub1V1aWQocHJpdi0+Y2RtUHJveHktPmtleVN5c3RlbSgpKTsKK30KKworc3RhdGlj
IGJvb2wgY2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKK3sKKyAgICBXZWJLaXRN
ZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RF
Q1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7Cisg
ICAgcHJpdi0+Y2RtUHJveHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5T3BlbkNETSo+KGNk
bVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CisKK3N0YXRpYyBi
b29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0
QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZm
ZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50LAorICAgIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1
ZmZlcikKK3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5D
RE1fREVDUllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8
fCAhYnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVj
cnlwdCgpIHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzdWJzYW1wbGVDb3VudCAmJiAhc3Vi
c2FtcGxlc0J1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlk
IGRlY3J5cHQoKSBzdWJzYW1wbGVzIHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENETVByb3h5T3Bl
bkNETTo6RGVjcnlwdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEQnVmZmVy
ID0ga2V5SURCdWZmZXI7CisgICAgY29udGV4dC5pdkJ1ZmZlciA9IGl2QnVmZmVyOworICAgIGNv
bnRleHQuZGF0YUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBjb250ZXh0Lm51bVN1YnNhbXBsZXMgPSBz
dWJzYW1wbGVDb3VudDsKKyAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBzdWJzYW1wbGVD
b3VudCA/IHN1YnNhbXBsZXNCdWZmZXIgOiBudWxscHRyOworCisgICAgcmV0dXJuIHByaXYtPmNk
bVByb3h5LT5kZWNyeXB0KGNvbnRleHQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9w
ZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTgzMGE3MTdjZTBhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyog
R1N0cmVhbWVyIE9wZW5DRE0gY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNS
WVBUICAgICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVD
UllQVCwgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9P
UEVOQ0RNX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5D
RE1EZWNyeXB0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNETV9ERUNSWVBU
KG9iaikgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNE
TV9ERUNSWVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdF
QktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRNZWRpYU9wZW5DRE1EZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyAgIFdlYktpdE1l
ZGlhT3BlbkNETURlY3J5cHRDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5D
RE1EZWNyeXB0UHJpdmF0ZSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZTsKKworR1R5
cGUgd2Via2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9nZXRfdHlwZSh2b2lkKTsKKworc3RydWN0
IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0IHsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0IHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2
YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0Q2xhc3Mg
eworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFz
czsKK307CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBFTkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFr
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZWQzODNjYzk5Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZQpAQCAtMCww
ICsxLDY5IEBACisjLnJzdAorIyBGaW5kT3BlbkNETQorIyAtLS0tLS0tLS0tLS0tCisjCisjIEZp
bmRzIHRoZSBPcGVuQ0RNIGxpYnJhcnkuCisjCisjIFRoaXMgd2lsbCBkZWZpbmUgdGhlIGZvbGxv
d2luZyB2YXJpYWJsZXM6CisjCisjIGBgT1BFTkNETV9GT1VORGBgCisjICAgICBUcnVlIGlmIHRo
ZSByZXF1ZXN0ZWQgdmVyc2lvbiBvZiBnY3J5cHQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9WRVJT
SU9OYGAKKyMgICAgIFRoZSB2ZXJzaW9uIG9mIGdjcnlwdCB0aGF0IHdhcyBmb3VuZAorIyBgYE9Q
RU5DRE1fSU5DTFVERV9ESVJTYGAKKyMgICAgIFRoZSBnY3J5cHQgaW5jbHVkZSBkaXJlY3Rvcmll
cworIyBgYE9QRU5DRE1fTElCUkFSSUVTYGAKKyMgICAgIFRoZSBsaW5rZXIgbGlicmFyaWVzIG5l
ZWRlZCB0byB1c2UgdGhlIGdjcnlwdCBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwKKyMgQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gVGhlIG5hbWUgb2YgdGhl
IGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisj
ICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisj
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuCisjIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ZpbmRfbGlicmFyeShPUEVOQ0RNX0xJQlJBUlkKKyAgTkFNRVMgbGli
b2NkbS5zbworKQorZmluZF9wYXRoKE9QRU5DRE1fSU5DTFVERV9ESVIKKyAgTkFNRVMgb3Blbl9j
ZG0uaAorICBQQVRIX1NVRkZJWEVTICJXUEVGcmFtZXdvcmsvb2NkbS8iCispCisKK2luY2x1ZGUo
RmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3Rh
bmRhcmRfYXJncyhPcGVuY2RtCisgICAgRk9VTkRfVkFSIE9QRU5DRE1fRk9VTkQKKyAgICBSRVFV
SVJFRF9WQVJTIE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElSCispCitpZiAoT1BF
TkNETV9GT1VORCkKKyAgICBzZXQoT1BFTkNETV9MSUJSQVJJRVMgJHtPUEVOQ0RNX0xJQlJBUll9
KQorICAgIHNldChPUEVOQ0RNX0lOQ0xVREVfRElSUyAke09QRU5DRE1fSU5DTFVERV9ESVJ9KQor
ZW5kaWYgKCkKKworbWFya19hc19hZHZhbmNlZChPUEVOQ0RNX0xJQlJBUlkgT1BFTkNETV9JTkNM
VURFX0RJUikKKworaW5jbHVkZShGZWF0dXJlU3VtbWFyeSkKK3NldF9wYWNrYWdlX3Byb3BlcnRp
ZXMoT3BlbmNkbSBQUk9QRVJUSUVTCisgICAgREVTQ1JJUFRJT04gIk9wZW5DRE0gRFJNIGZyYW1l
d29yayIKKyAgICBVUkwgImh0dHBzOi8vZ2l0aHViLmNvbS9yZGtjZW50cmFsL1RodW5kZXIiCisp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDQxNzVkNmNjNWNkZS4uYzk3MWUyYzlkNjY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0dUSy5jbWFrZQpAQCAtMTg3LDYgKzE4Nyw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFURSBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFU
SVZFX1JFVkFMSURBVElPTiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSBQUklWQVRF
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09GRlNDUkVFTl9D
QU5WQVMgUFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUEVSSU9ESUNfTUVNT1JZX01PTklU
T1IgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9Q
T0lOVEVSX0xPQ0sgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTQyOCw2ICs0
MjksMTAgQEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCitpZiAo
RU5BQkxFX0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5DRE0pCisgIGZpbmRfcGFja2Fn
ZShPcGVuQ0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjQ3CiBpZiAoRU5BQkxFRF9DT01QSUxFUl9TQU5JVElaRVJT
KQogICAgIHNldChFTkFCTEVfSU5UUk9TUEVDVElPTiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmlu
ZGV4IDFlMzJmMTZlOWQyYy4uMGVlNGM1OTk3ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dQRS5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAt
NDUsNiArNDUsNyBAQCBpbmNsdWRlKEdTdHJlYW1lckRlZmluaXRpb25zKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBQVUJMSUMg
T0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJ
VFkgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0VO
Q1JZUFRFRF9NRURJQSBQVUJMSUMgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKK1dF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PUEVOQ0RNIFBSSVZBVEUgT0ZG
KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkRSSVZFUiBQVUJM
SUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBU
TyBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNM
VCBQVUJMSUMgT04pCkBAIC0xOTgsNiArMTk5LDEwIEBAIGlmIChVU0VfU1lTVEVNRCkKICAgICBl
bmRpZiAoKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJM
RV9PUEVOQ0RNKQorICBmaW5kX3BhY2thZ2UoT3BlbkNETSBSRVFVSVJFRCkKK2VuZGlmICgpCisK
IGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dQRV9fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURH
RVRURVhUX1BBQ0tBR0U9IldQRSIpCiBhZGRfZGVmaW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5B
QkxFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1Nv
dXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCBlMmFhMzk2NjI3NTcuLjFiYzk3
OWU3MzEzNSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMTgyLDYgKzE4Miw3IEBA
IG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSAiVG9vZ2xlIG5ldHdvcmsg
Y2FjaGUgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBjYWNoaW5nIHN0cmF0ZWd5IiBQUklWQVRFIE9G
RikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTk9USUZJQ0FUSU9OUyAiVG9nZ2xl
IE5vdGlmaWNhdGlvbnMgc3VwcG9ydCIgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RF
RklORShFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBw
b3J0IiBQUklWQVRFIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfT1BFTkNE
TSAiVG9nZ2xlIEVNRSBWMyBPcGVuQ0RNIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJ
VF9PUFRJT05fREVGSU5FKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMgIlRvZ2dsZSBPcmllbnRh
dGlvbiBFdmVudHMgc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCAiVG9nZ2xlIGFjY2VsZXJhdGVkIHNj
cm9sbGluZyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfUEFZTUVOVF9SRVFVRVNUICJUb2dnbGUgUGF5bWVudCBSZXF1ZXN0IHN1cHBvcnQiIFBS
SVZBVEUgT0ZGKQpAQCAtMjU1LDYgKzI1Niw3IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4p
CiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCBF
TkFCTEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NPVVJD
RSBFTkFCTEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NU
UkVBTSBFTkFCTEVfVklERU8pCisgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX09QRU5D
RE0gRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFC
TEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUgRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJ
T05fREVQRU5EKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiBFTkFCTEVfVklE
RU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1RPVUNIX1NMSURFUiBFTkFCTEVf
VE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDIzN2M5ZDg3ZWY0OC4uYmZhNmJjNTdmZTQ3IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjAtMDct
MDMgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1
cHBvcnQgdG8gYnVpbGQgT3BlbkNETSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhlcmUgaXMgYW4K
KyAgICAgICAgb3B0IGluIGVudiB2YXIgdG8gZ2V0IEpIQnVpbGQgYnVpbGRpbmcgVGh1bmRlciBp
dHMgV2lkZXZpbmUKKyAgICAgICAgZGVwZW5kZW5jaWVzLiBXZSBhbHNvIGluY2x1ZGUgYSBjb3Vw
bGUgb2YgR1N0cmVhbWVyIHBhdGNoZXMgbmVlZGVkCisgICAgICAgIHRvIGdldCBrZXkgSURzIGlu
IHRoZSBkZWNyeXB0b3JzLgorCisgICAgICAgIFdpZGV2aW5lIGlzIG9idmlvdXNseSBwcm9wcmll
dGFyeSBhbmQgYXMgeW91IG5lZWQgdG8gYmUgbGljZW5zZWQKKyAgICAgICAgdG8gYWNjZXNzIGl0
LCB5b3UgbmVlZCBjcmVkZW50aWFscyB0byBidWlsZCBpdC4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKyAgICAgICAgKiBnc3RyZWFtZXIvamhidWlsZC5t
b2R1bGVzOgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhZC0wMDA2
LW1zc2RlbXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5wYXRjaDogQWRkZWQuCisgICAgICAgICog
Z3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3Ry
ZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaDogQWRkZWQuCisgICAgICAg
ICogZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzOgorICAgICAgICAqIGpoYnVpbGQvamhidWlsZHJj
X2NvbW1vbi5weToKKyAgICAgICAgKGluaXQpOgorICAgICAgICAqIHdwZS9pbnN0YWxsLWRlcGVu
ZGVuY2llczoKKwogMjAyMC0wNi0yOSAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFt3ZWJraXRweV0gUEhQNy40IHN1cHBvcnQgb24gRGVi
aWFuIHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4
IGMwY2YwOTg3Mzc3ZC4uOGVhYTkwY2FlNDJmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtCkBAIC0xMzUsNiArMTM1LDcgQEAgbXkgKAogICAgICRuZXR3b3JrQ2FjaGVT
dGFsZVdoaWxlUmV2YWxpZGF0ZVN1cHBvcnQsCiAgICAgJG5vdGlmaWNhdGlvbnNTdXBwb3J0LAog
ICAgICRvZmZzY3JlZW5DYW52YXNTdXBwb3J0LAorICAgICRvcGVuQ0RNU3VwcG9ydCwKICAgICAk
b3JpZW50YXRpb25FdmVudHNTdXBwb3J0LAogICAgICRvdmVyZmxvd1Njcm9sbGluZ1RvdWNoU3Vw
cG9ydCwKICAgICAkcGF5bWVudFJlcXVlc3RTdXBwb3J0LApAQCAtNDQ4LDYgKzQ0OSw5IEBAIG15
IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAib2Zmc2NyZWVuLWNhbnZhcyIsIGRlc2Mg
PT4gIlRvZ2dsZSBPZmZzY3JlZW5DYW52YXMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9PRkZTQ1JFRU5fQ0FOVkFTIiwgdmFsdWUgPT4gXCRvZmZzY3JlZW5DYW52YXNTdXBwb3J0
IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAib3BlbmNkbSIsIGRlc2MgPT4gIlRvZ2dsZSBPcGVuQ0RN
IHN1cHBvcnQiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfT1BFTkNETSIsIHZhbHVlID0+IFwk
b3BlbkNETVN1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJvcmllbnRhdGlvbi1ldmVudHMi
LCBkZXNjID0+ICJUb2dnbGUgT3JpZW50YXRpb24gRXZlbnRzIHN1cHBvcnQiLAogICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIiwgdmFsdWUgPT4gXCRvcmllbnRhdGlv
bkV2ZW50c1N1cHBvcnQgfSwKIApkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQu
bW9kdWxlcyBiL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggOTU2ZjEyNmQ1
Yjc1Li4wYzFhODk0YjVjODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxkLm1v
ZHVsZXMKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcwpAQCAtMTEsNiArMTEs
MTIgQEAKICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LXBsdWdpbnMtYmFkIi8+CiAgICAgICA8ZGVw
IHBhY2thZ2U9ImdzdC1saWJhdiIvPgogICAgICAgPGRlcCBwYWNrYWdlPSJnc3RyZWFtZXItdmFh
cGkiLz4KKyAgICAgIDxpZiBjb25kaXRpb24tc2V0PSJPcGVuQ0RNIj4KKyAgICAgICAgPGRlcCBw
YWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICAgIDxkZXAgcGFja2FnZT0id2lkZXZpbmUiLz4KKyAg
ICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICAgICAgPGRl
cCBwYWNrYWdlPSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIvPgorICAgICAgPC9pZj4KICAgICA8L2Rl
cGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxlPgogCkBAIC0xOSw2ICsyNSw4IEBACiAgICAgICBo
cmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvIi8+CiAgIDxyZXBvc2l0
b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9ImdpdGh1Yi10YXJiYWxsIgogICAgICAgaHJlZj0iaHR0
cHM6Ly9naXRodWIuY29tLyIvPgorICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImdpdGh1
Yi1zc2giCisgICAgICBocmVmPSJnaXRAZ2l0aHViLmNvbToiLz4KICAgPHJlcG9zaXRvcnkgdHlw
ZT0iZ2l0IiBuYW1lPSJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tIgogICAgICAgaHJlZj0iaHR0
cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL3dlYm0vIi8+CiAgIDxyZXBvc2l0b3J5IHR5
cGU9ImdpdCIgbmFtZT0iYW9tZWRpYS5nb29nbGVzb3VyY2UuY29tIgpAQCAtNzksNiArODcsNyBA
QAogCiAgICAgPGJyYW5jaCBoYXNoPSJzaGEyNTY6NDBiYjNiYWZkYTI1YzBiNzM5YzhmYzM2ZTQ4
MzgwZmNjZjYxYzRkM2Y4Mzc0N2U5N2FjM2Y5YjAxNzFiMTMxOSIgbW9kdWxlPSJnc3QtcGx1Z2lu
cy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtJHt2ZXJzaW9ufS50YXIueHoiIHJlcG89ImdzdHJlYW1l
ciIgdmVyc2lvbj0iMS4xNi4yIj4KICAgICAgIDxwYXRjaCBmaWxlPSJnb29kLTAwMDEtcXRkZW11
eC1TcGVjaWZ5LVJFRElSRUNULWluZm9ybWF0aW9uLWluLWVycm9yLW1lc3NhZy5wYXRjaCIgc3Ry
aXA9IjEiLz4gPCEtLSBNZXJnZWQgdXBzdHJlYW0sIHNob3VsZCBiZSBzaGlwcGVkIGluIDEuMTYu
MyAtLT4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYt
YW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRlZC1hLWRlZmF1bHQta2lkLnBhdGNoIiBzdHJpcD0i
MSIgLz4KICAgICA8L2JyYW5jaD4KICAgPC9tZXNvbj4KIApAQCAtOTIsNiArMTAxLDcgQEAKICAg
ICA8L2RlcGVuZGVuY2llcz4KICAgICA8YnJhbmNoIGhhc2g9InNoYTI1NjpmMWNiN2FhMjM4OTU2
OWE1MzQzNjYxYWFlNDczZjBhOTQwYTkwYjg3MjAwMTgyNGJjNDdmYTgwNzJhMDQxZTc0IiBtb2R1
bGU9ImdzdC1wbHVnaW5zLWJhZC9nc3QtcGx1Z2lucy1iYWQtJHt2ZXJzaW9ufS50YXIueHoiIHJl
cG89ImdzdHJlYW1lciIgdmVyc2lvbj0iMS4xNi4yIj4KICAgICAgIDxwYXRjaCBmaWxlPSJnc3Qt
cGx1Z2lucy1iYWQtMDAwMS1oMjY0cGFyc2UtUG9zdC1hLVdBUk5JTkctd2hlbi1kYXRhLWlzLWJy
b2tlbi5wYXRjaCIgc3RyaXA9IjEiLz4gPCEtLSBNZXJnZWQsIGRpc2N1c3NpbmcgYmFja3BvcnRp
bmcgaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1i
YWQvbWVyZ2VfcmVxdWVzdHMvMzg2LS0+CisgICAgICA8cGF0Y2ggZmlsZT0iZ3N0LXBsdWdpbnMt
YmFkLTAwMDYtbXNzZGVtdXgtcGFyc2UtcHJvdGVjdGlvbi1kYXRhLnBhdGNoIiBzdHJpcD0iMSIg
Lz4KICAgICA8L2JyYW5jaD4KICAgPC9tZXNvbj4KIApAQCAtMTI1LDQgKzEzNSw4OSBAQAogICAg
ICAgICAgICBjaGVja291dGRpcj0ibGlidmEtJHt2ZXJzaW9ufSIgcmVwbz0iZ2l0aHViLXRhcmJh
bGwiLz4KICAgPC9tZXNvbj4KIAorICA8Y21ha2UgaWQ9InRodW5kZXIiCisgICAgICAgICBjbWFr
ZWFyZ3M9Ii1EQlVJTERfUkVGRVJFTkNFPSR7dmVyc2lvbn0gLURQT1JUPTgwODEKKyAgICAgICAg
ICAgICAgICAgICAgLURCSU5ESU5HPTAuMC4wLjAgLURJRExFX1RJTUU9MTgwCisgICAgICAgICAg
ICAgICAgICAgIC1EUEVSU0lTVEVOVF9QQVRIPS90bXAvdGh1bmRlci9wZXJzaXN0ZW50CisgICAg
ICAgICAgICAgICAgICAgIC1EVk9MQVRJTEVfUEFUSD0vdG1wL3RodW5kZXIvdm9sYXRpbGUKKyAg
ICAgICAgICAgICAgICAgICAgLUREQVRBX1BBVEg9JHtwcmVmaXh9L3NoYXJlL1dQRUZyYW1ld29y
aworICAgICAgICAgICAgICAgICAgICAtRFNZU1RFTV9QQVRIPSR7cHJlZml4fS9saWIvd3BlZnJh
bWV3b3JrL3BsdWdpbnMKKyAgICAgICAgICAgICAgICAgICAgLURQUk9YWVNUVUJfUEFUSD0ke3By
ZWZpeH0vbGliL3dwZWZyYW1ld29yay9wcm94eXN0dWJzCisgICAgICAgICAgICAgICAgICAgIC1E
T09NQURKVVNUPSAtREJVSUxEX1RZUEU9UmVsZWFzZVN5bWJvbHMKKyAgICAgICAgICAgICAgICAg
ICAgLURCTFVFVE9PVEhfU1VQUE9SVD1PRkYgLURWSVJUVUFMSU5QVVQ9T0ZGCisgICAgICAgICAg
ICAgICAgICAgIC1EQ09NUE9TSVRPUkNMSUVOVD1PRkYgLURDT01QT1NJVE9SQ0xJRU5UPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtREJST0FEQ0FTVD1PRkYgLURDRE1JPU9OIC1EQ0RNSV9CQ01f
TkVYVVNfU1ZQPU9GRgorICAgICAgICAgICAgICAgICAgICAtRENETUlfQURBUFRFUl9JTVBMRU1F
TlRBVElPTj1nc3RyZWFtZXIKKyAgICAgICAgICAgICAgICAgICAgLURHU1RSRUFNRVJDTElFTlQ9
T0ZGIC1EUFJPVklTSU9OUFJPWFk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EU0VDVVJJVFlB
R0VOVD1PRkYgLURDT01QT1NJVE9SU0VSVkVSUExVR0lOPU9GRgorICAgICAgICAgICAgICAgICAg
ICAtRFBMVUdJTl9XRUJLSVRCUk9XU0VSPU9GRiAtRFBMVUdJTl9XRUJTRVJWRVI9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX0VTUElBTD1PRkYgLURORVRXT1JLQ09OVFJPTD1PRkYi
PgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRhcmJhbGwiIG1vZHVsZT0icmRrY2VudHJhbC9U
aHVuZGVyL3RhcmJhbGwvJHt2ZXJzaW9ufSIgdmVyc2lvbj0iNmFkZWVlMDA2ZmVjZGQxYjJiYzQ5
YmQzNjBkNDlmYzU3MThkZWI2MSIgY2hlY2tvdXRkaXI9InRodW5kZXIiLz4KKyAgPC9jbWFrZT4K
KworICA8YXV0b3Rvb2xzIGlkPSJ3aWRldmluZSIgc3VwcG9ydHMtbm9uLXNyY2Rpci1idWlsZHM9
Im5vIgorICAgICAgICAgICAgIGF1dG9nZW4tc2g9ImJ1aWxkLnB5IiBhdXRvZ2VuYXJncz0ieDg2
LTY0IC1yIC1ET0VNQ1JZUFRPX0tFWUJPWF9QQVRIX1BSRUZJWD0ke3ByZWZpeH0iCisgICAgICAg
ICAgICAgbWFrZWFyZ3M9IkJVSUxEVFlQRT1SZWxlYXNlIC1qMSIKKyAgICAgICAgICAgICBtYWtl
aW5zdGFsbGFyZ3M9IkJVSUxEVFlQRT1SZWxlYXNlIC1qMSAtZiBNYWtlZmlsZS5pbnN0YWxsIiA+
CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRlciIvPgorICAg
IDwvZGVwZW5kZW5jaWVzPgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXNzaCIgbW9kdWxlPSJN
ZXRyb2xvZ2ljYWwvd2lkZXZpbmUuZ2l0IiBjaGVja291dGRpcj0id2lkZXZpbmUiIHRhZz0iMjY0
YzEzNzUwMWIyODllMzU2YjExZGFjYzMyOWIwNTYzNmVhOTM5NiIvPgorICA8L2F1dG90b29scz4K
KworICA8Y21ha2UgaWQ9InRodW5kZXItY2RtaS13aWRldmluZSIgY21ha2VhcmdzPSItRENNQUtF
X0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm8iPgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRh
cmJhbGwiCisgICAgICAgICAgICBtb2R1bGU9IldlYlBsYXRmb3JtRm9yRW1iZWRkZWQvT0NETS1X
aWRldmluZS90YXJiYWxsLyR7dmVyc2lvbn0iCisgICAgICAgICAgICB2ZXJzaW9uPSI5ZGMzOTY0
YjAzMzlhYmI3MGQ2NmU0ZjkzMTYzMjMyNGEwNzVkNmQ0IiBjaGVja291dGRpcj0idGh1bmRlci1j
ZG1pLXdpZGV2aW5lIi8+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0i
dGh1bmRlciIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJ3aWRldmluZSIvPgorICAgIDwvZGVwZW5k
ZW5jaWVzPgorICA8L2NtYWtlPgorCisgIDxjbWFrZSBpZD0idGh1bmRlci1uYW5vc2VydmljZXMi
CisgICAgICAgICBjbWFrZWFyZ3M9Ii1EQlVJTERfUkVGRVJFTkNFPSR7dmVyc2lvbn0gLURCVUlM
RF9UWVBFPVJlbGVhc2VTeW1ib2xzCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0NPQkFM
VD1PRkYgLURQTFVHSU5fQ09NTUFOREVSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9ERVZJQ0VJTkZPPU9GRiAtRFBMVUdJTl9ESVNQTEFZSU5GTz1PRkYKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fREVWSUNFSURFTlRJRklDQVRJT049T0ZGCisgICAgICAgICAgICAgICAg
ICAgIC1EUExVR0lOX0RTUkVTT0xVVElPTj1PRkYgLURQTFVHSU5fREhDUFNFUlZFUj1PRkYKKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRElBTFNFUlZFUj1PRkYgLURQTFVHSU5fRElDVElP
TkFSWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fSU9DT05ORUNUT1I9T0ZGIC1E
UExVR0lOX0VHTFRFU1Q9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0ZST05UUEFO
RUw9T0ZGIC1EUExVR0lOX0xPQ0FUSU9OU1lOQz1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fTU9OSVRPUj1PRkYgLURQTFVHSU5fTkVUV09SS0NPTlRST0w9T0ZGCisgICAgICAgICAg
ICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX09QRU5DRE1JX0FVVE9TVEFSVD10cnVlCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X09QRU5DRE1JX09PUD10cnVlCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1J
X1dJREVWSU5FPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX0NMRUFS
S0VZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RNSV9QTEFZUkVBRFk9
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX05BR1JBPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RNSV9OQ0FTPU9GRiAtRFBMVUdJTl9CTFVF
VE9PVEg9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0JMVUVUT09USFJFTU9URUNP
TlRST0w9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1JFTU9URUNPTlRST0w9T0ZG
IC1EUExVR0lOX1NOQVBTSE9UPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9TWVNU
RU1DT01NQU5EUz1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRklMRVRSQU5TRkVS
PU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9URVNUQ09OVFJPTExFUj1PRkYgLURQ
TFVHSU5fSlNPTlJQQz1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fVEVTVFVUSUxJ
VFk9T0ZGIC1EUExVR0lOX1RJTUVTWU5DPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9UUkFDRUNPTlRST0w9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1ZPTFVNRUNP
TlRST0w9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1dFQktJVEJST1dTRVI9T0ZG
IC1EUExVR0lOX1JUU1BDTElFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1dF
QlBBPU9GRiAtRFBMVUdJTl9XRUJQUk9YWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fV0VCU0VSVkVSPU9GRiAtRFBMVUdJTl9XRUJTSEVMTD1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURQTFVHSU5fV0lGSUNPTlRST0w9T0ZGIC1EUExVR0lOX1BBQ0tBR0VSPU9GRgorICAgICAg
ICAgICAgICAgICAgICAtRFBMVUdJTl9QTEFZRVJJTkZPPU9GRiAtRFBMVUdJTl9QT1dFUj1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUFJPQ0VTU01PTklUT1I9T0ZGIC1EUExVR0lO
X1NUUkVBTUVSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9TUEFSSz1PRkYgLURQ
TEFURk9STV9MSU5VWD1PTgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9NRVNTRU5HRVI9
T0ZGIC1EUExVR0lOX1NFQ1VSSVRZQUdFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX1JQQ0xJTks9T0ZGIC1EUExVR0lOX0NPTVBPU0lUT1I9T0ZGIj4KKyAgICA8YnJhbmNoIHJl
cG89ImdpdGh1Yi10YXJiYWxsIgorICAgICAgICAgICAgbW9kdWxlPSJyZGtjZW50cmFsL1RodW5k
ZXJOYW5vU2VydmljZXMvdGFyYmFsbC8ke3ZlcnNpb259IgorICAgICAgICAgICAgdmVyc2lvbj0i
ZGU5ZjNkNDBkODQwOGVlODExYzQ4ZjQ4NmM5YjE0Zjc1MmM5NzM0NSIKKyAgICAgICAgICAgIGNo
ZWNrb3V0ZGlyPSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIvPgorICAgIDxkZXBlbmRlbmNpZXM+Cisg
ICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRl
ci1jZG1pLXdpZGV2aW5lIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIDwvY21ha2U+CisKIDwv
bW9kdWxlc2V0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdp
bnMtYmFkLTAwMDYtbXNzZGVtdXgtcGFyc2UtcHJvdGVjdGlvbi1kYXRhLnBhdGNoIGIvVG9vbHMv
Z3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFkLTAwMDYtbXNzZGVtdXgtcGFyc2UtcHJv
dGVjdGlvbi1kYXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOGY5OTQ2ZjBlOWIyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNo
ZXMvZ3N0LXBsdWdpbnMtYmFkLTAwMDYtbXNzZGVtdXgtcGFyc2UtcHJvdGVjdGlvbi1kYXRhLnBh
dGNoCkBAIC0wLDAgKzEsMjQ3IEBACitGcm9tIDAwNTJmM2Q4MzE1ZThjZWZiMDRhNjJhNjRjYWMx
N2NiZmJjNmI4YjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGFybGllIFR1cm5l
ciA8Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI1IE1heSAyMDE4IDA5OjQzOjMwICsw
MTAwCitTdWJqZWN0OiBbUEFUQ0hdIFBhcnNlIHBsYXlyZWFkeSBwYXlsb2FkLgorCitMb29rIGF0
IHRoZSBwbGF5cmVhZHkgc3BlY2lmaWMgZGF0YSBwYXlsb2FkIHRvIGV4dHJhY3QgZGVmYXVsdCBr
ZXkgaWRzCitmb3IgZGVjcnlwdGluZyBzYW1wbGVzLiBUaGUgZm9ybWF0IG9mIHRoaXMgcGF5bG9h
ZCBzZWVtcyB0byBiZQorcHJvcHJpZXRhcnkuCisKK1NpZ25lZC1vZmYtYnk6IFhhYmllciBSb2Ry
aWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorLS0tCisgZXh0L3Ntb290aHN0cmVh
bWluZy9nc3Rtc3NkZW11eC5jICAgIHwgIDE0ICsrLQorIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0
bXNzbWFuaWZlc3QuYyB8IDEzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBleHQvc21v
b3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggfCAgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwg
MTUyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4dC9zbW9v
dGhzdHJlYW1pbmcvZ3N0bXNzZGVtdXguYyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZGVt
dXguYworaW5kZXggYmNlYThjYS4uNGZhOTViOSAxMDA2NDQKKy0tLSBhL2V4dC9zbW9vdGhzdHJl
YW1pbmcvZ3N0bXNzZGVtdXguYworKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11
eC5jCitAQCAtNDk1LDcgKzQ5NSwxOSBAQCBnc3RfbXNzX2RlbXV4X3NldHVwX3N0cmVhbXMgKEdz
dEFkYXB0aXZlRGVtdXggKiBkZW11eCkKKyAgICAgICAgICAgZ3N0X2V2ZW50X25ld19wcm90ZWN0
aW9uIChwcm90ZWN0aW9uX3N5c3RlbV9pZCwgcHJvdGVjdGlvbl9idWZmZXIsCisgICAgICAgICAg
ICJzbW9vdGgtc3RyZWFtaW5nIik7CisgCistICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwg
IlF1ZXVlaW5nIFByb3RlY3Rpb24gZXZlbnQgb24gc291cmNlIHBhZCIpOworKyAgICAgIEdzdEJ1
ZmZlciAqa2V5X2lkID0gZ3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChtc3NkZW11eC0+bWFu
aWZlc3QpOworKyAgICAgIGlmICghZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoa2V5X2lkKSkgeworKyAg
ICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzdHJlYW0sCisrICAgICAgICAgICAgInByb3RlY3Rl
ZCBtYW5pZmVzdCwgYnV0IG5vIGtleSBpZHMgYXZhaWxhYmxlIik7CisrICAgICAgfSBlbHNlIHsK
KysgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0sCisrICAgICAgICAgICAgIkFkZGluZyBr
ZXkgaWQgdG8gdGhlIHByb3RlY3Rpb24gZXZlbnQgb2Ygc2l6ZSAlbHUiLAorKyAgICAgICAgICAg
IGdzdF9idWZmZXJfZ2V0X3NpemUgKGtleV9pZCkpOworKyAgICAgICAgR3N0U3RydWN0dXJlICpz
dHJ1Y3R1cmUgPSBnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlIChldmVudCk7CisrICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVS
LCBrZXlfaWQsIE5VTEwpOworKyAgICAgIH0KKysKKysgICAgICBHU1RfTE9HX09CSkVDVCAoc3Ry
ZWFtLCAiUXVldWluZyBQcm90ZWN0aW9uIGV2ZW50IG9uIHNvdXJjZSBwYWQiKTsKKyAgICAgICBn
c3RfYWRhcHRpdmVfZGVtdXhfc3RyZWFtX3F1ZXVlX2V2ZW50ICgoR3N0QWRhcHRpdmVEZW11eFN0
cmVhbSAqKSBzdHJlYW0sCisgICAgICAgICAgIGV2ZW50KTsKKyAgICAgICBnc3RfYnVmZmVyX3Vu
cmVmIChwcm90ZWN0aW9uX2J1ZmZlcik7CitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWlu
Zy9nc3Rtc3NtYW5pZmVzdC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5j
CitpbmRleCBjODU1Y2IzLi5kZjMxMzMwIDEwMDY0NAorLS0tIGEvZXh0L3Ntb290aHN0cmVhbWlu
Zy9nc3Rtc3NtYW5pZmVzdC5jCisrKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlm
ZXN0LmMKK0BAIC0yOCw2ICsyOCw4IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUg
PGxpYnhtbC9wYXJzZXIuaD4KKyAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKysjaW5jbHVkZSA8
bGlieG1sL3hwYXRoLmg+CisrI2luY2x1ZGUgPGxpYnhtbC94cGF0aEludGVybmFscy5oPgorIAor
IC8qIGZvciBwYXJzaW5nIGgyNjQgY29kZWMgZGF0YSAqLworICNpbmNsdWRlIDxnc3QvY29kZWNw
YXJzZXJzL2dzdGgyNjRwYXJzZXIuaD4KK0BAIC0xMDksNiArMTExLDEwIEBAIHN0cnVjdCBfR3N0
TXNzTWFuaWZlc3QKKyAgIEdTdHJpbmcgKnByb3RlY3Rpb25fc3lzdGVtX2lkOworICAgZ2NoYXIg
KnByb3RlY3Rpb25fZGF0YTsKKyAKKysgIC8vIEZJWE1FOiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUg
a2V5IGlkcyBwcmVzZW50IGluIHByb3RlY3RlZCBtYW5pZmVzdHMuCisrICBnY2hhciAqa2V5X2lk
OworKyAgZ3NpemUga2V5X2lkX2xlbjsKKysKKyAgIEdTTGlzdCAqc3RyZWFtczsKKyB9OworIAor
QEAgLTMwMCw2ICszMDYsMTIyIEBAIF9nc3RfbXNzX3N0cmVhbV9pbml0IChHc3RNc3NNYW5pZmVz
dCAqIG1hbmlmZXN0LCBHc3RNc3NTdHJlYW0gKiBzdHJlYW0sCisgICBnc3RfbXNzX2ZyYWdtZW50
X3BhcnNlcl9pbml0ICgmc3RyZWFtLT5mcmFnbWVudF9wYXJzZXIpOworIH0KKyAKKytzdGF0aWMg
dm9pZAorK19nc3RfbXNzX3BhcnNlX3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBt
YW5pZmVzdCkKKyt7CisrICBndWNoYXIgKmRlY29kZWRfcHJvdGVjdGlvbl9kYXRhID0gTlVMTDsK
KysgIGdzaXplIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhX2xlbiA9IDA7CisrICB4bWxDaGFyICpw
cm90ZWN0aW9uX2RhdGFfdGV4dCA9IE5VTEw7CisrICBpbnQgcHJvdGVjdGlvbl9kYXRhX3RleHRf
bGVuID0gMDsKKysgIHhtbERvY1B0ciBwcm90ZWN0aW9uX2RhdGFfeG1sID0gTlVMTDsKKysgIC8v
IE5vdGUsIHRoaXMgZG9lcyBub3QgbmVlZCB0byBmcmVlJ2QsIGZyZWVpbmcgdGhlIGRvYyBwdHIg
d2lsbCBmcmVlIHRoaXMuCisrICB4bWxOb2RlICpwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50
ID0gTlVMTDsKKysgIGNvbnN0IHhtbENoYXIgKnByb3RlY3Rpb25fZGF0YV9uYW1lc3BhY2UgPSBO
VUxMOworKyAgeG1sWFBhdGhDb250ZXh0UHRyIHhwYXRoX2N0eCA9IE5VTEw7CisrICB4bWxYUGF0
aE9iamVjdFB0ciB4cGF0aF9vYmogPSBOVUxMOworKyAgeG1sTm9kZVNldFB0ciBrZXlfaWRfbm9k
ZSA9IE5VTEw7CisrICBnc2l6ZSBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiA9IDA7CisrICBndWNo
YXIgKnN0YXJ0X3RhZyA9IE5VTEw7CisrCisrICBkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YSA9Cisr
ICAgICAgZ19iYXNlNjRfZGVjb2RlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhLCAmZGVjb2Rl
ZF9wcm90ZWN0aW9uX2RhdGFfbGVuKTsKKysKKysgIHN0YXJ0X3RhZyA9IGRlY29kZWRfcHJvdGVj
dGlvbl9kYXRhOworKworKyAgLy8gVGhlIHByb3RlY3Rpb24gZGF0YSBzdGFydHMgd2l0aCBhIDEw
LWJ5dGUgUGxheVJlYWR5IHZlcnNpb24KKysgIC8vIGhlYWRlciB0aGF0IG5lZWRzIHRvIGJlIHNr
aXBwZWQgb3ZlciB0byBhdm9pZCBYTUwgcGFyc2luZworKyAgLy8gZXJyb3JzLgorKyAgd2hpbGUg
KHN0YXJ0X3RhZyAmJiAqc3RhcnRfdGFnICE9ICc8JykKKysgICAgc3RhcnRfdGFnKys7CisrCisr
ICBpZiAoIXN0YXJ0X3RhZykgeworKyAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZmluZCBhIHN0
YXJ0IHRhZyBpbiBwcm90ZWN0aW9uIGRhdGEgcGF5bG9hZCIpOworKyAgICBnb3RvIGJlYWNoOwor
KyAgfQorKworKyAgcHJvdGVjdGlvbl9kYXRhX3htbF9sZW4gPQorKyAgICAgIGRlY29kZWRfcHJv
dGVjdGlvbl9kYXRhX2xlbiAtIChzdGFydF90YWcgLSBkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YSk7
CisrICBwcm90ZWN0aW9uX2RhdGFfeG1sID0KKysgICAgICB4bWxSZWFkTWVtb3J5ICgoY29uc3Qg
Z2NoYXIgKikgc3RhcnRfdGFnLCBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiwKKysgICAgICAicHJv
dGVjdGlvbl9kYXRhIiwgInV0Zi0xNiIsIDApOworKworKyAgaWYgKCFwcm90ZWN0aW9uX2RhdGFf
eG1sKSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBwYXJzZSBwcm90ZWN0aW9uIGRhdGEg
WE1MIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICBpZiAoZ3N0X2RlYnVnX2NhdGVn
b3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkgPj0gR1NUX0xFVkVMX01FTURVTVAp
IHsKKysgICAgeG1sRG9jRHVtcE1lbW9yeUVuYyAocHJvdGVjdGlvbl9kYXRhX3htbCwgJnByb3Rl
Y3Rpb25fZGF0YV90ZXh0LAorKyAgICAgICAgJnByb3RlY3Rpb25fZGF0YV90ZXh0X2xlbiwgInV0
ZjgiKTsKKysgICAgR1NUX01FTURVTVAgKCJwcm90ZWN0aW9uIGRhdGEgWE1MIiwgcHJvdGVjdGlv
bl9kYXRhX3RleHQsCisrICAgICAgICBwcm90ZWN0aW9uX2RhdGFfdGV4dF9sZW4pOworKyAgICB4
bWxGcmVlIChwcm90ZWN0aW9uX2RhdGFfdGV4dCk7CisrICB9CisrCisrICBwcm90ZWN0aW9uX2Rh
dGFfcm9vdF9lbGVtZW50ID0geG1sRG9jR2V0Um9vdEVsZW1lbnQgKHByb3RlY3Rpb25fZGF0YV94
bWwpOworKyAgaWYgKHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPnR5cGUgIT0gWE1MX0VM
RU1FTlRfTk9ERSB8fAorKyAgICAgIHhtbFN0cmNtcCAocHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxl
bWVudC0+bmFtZSwKKysgICAgICAgICAgKGNvbnN0IHhtbENoYXIgKikgIldSTUhFQURFUiIpIHx8
ICFwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT5ucykgeworKyAgICBHU1RfRVJST1IgKCJp
bnZhbGlkIHByb3RlY3Rpb24gZGF0YSBYTUwiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysK
KysgIHhwYXRoX2N0eCA9IHhtbFhQYXRoTmV3Q29udGV4dCAocHJvdGVjdGlvbl9kYXRhX3htbCk7
CisrICBpZiAoIXhwYXRoX2N0eCkgeworKyAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gY3JlYXRl
IHhwYXRoIGNvbnRleHQiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIHByb3RlY3Rp
b25fZGF0YV9uYW1lc3BhY2UgPSBwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT5ucy0+aHJl
ZjsKKysgIGlmICh4bWxYUGF0aFJlZ2lzdGVyTnMgKHhwYXRoX2N0eCwgKGNvbnN0IHhtbENoYXIg
KikgInByaGRyIiwKKysgICAgICAgICAgcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSkgPCAwKSB7
CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byByZWdpc3RlciBYTUwgbmFtZXNwYWNlIik7Cisr
ICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICB4cGF0aF9vYmogPQorKyAgICAgIHhtbFhQYXRo
RXZhbEV4cHJlc3Npb24gKChjb25zdCB4bWxDaGFyICopICIvL3ByaGRyOktJRCIsIHhwYXRoX2N0
eCk7CisrICBpZiAoIXhwYXRoX29iaikgeworKyAgICBHU1RfREVCVUcgKCJmYWlsZWQgdG8gZXZh
bCBYUGF0aCBleHByZXNzaW9uIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICBrZXlf
aWRfbm9kZSA9IHhwYXRoX29iai0+bm9kZXNldHZhbDsKKysgIGludCBudW1fa2V5X2lkcyA9IGtl
eV9pZF9ub2RlID8ga2V5X2lkX25vZGUtPm5vZGVOciA6IDA7CisrCisrICBHU1RfREVCVUcgKCJm
b3VuZCAlZCBrZXkgaWRzIiwgbnVtX2tleV9pZHMpOworKworKyAgaWYgKG51bV9rZXlfaWRzICE9
IDAgJiYgKGtleV9pZF9ub2RlLT5ub2RlVGFiWzBdLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUp
KSB7CisrICAgIHhtbENoYXIgKmVuY29kZWRfa2V5X2lkID0geG1sTm9kZUdldENvbnRlbnQgKGtl
eV9pZF9ub2RlLT5ub2RlVGFiWzBdKTsKKysgICAgZ3NpemUgZGVjb2RlZF9rZXlfaWRfbGVuOwor
KyAgICBndWNoYXIgKmRlY29kZWRfa2V5X2lkID0KKysgICAgICAgIGdfYmFzZTY0X2RlY29kZSAo
KGNvbnN0IGdjaGFyICopIGVuY29kZWRfa2V5X2lkLCAmZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysK
KysgICAgR1NUX01FTURVTVAgKCJrZXkgcmV0cmlldmVkIiwgZGVjb2RlZF9rZXlfaWQsIGRlY29k
ZWRfa2V5X2lkX2xlbik7CisrCisrICAgIG1hbmlmZXN0LT5rZXlfaWQgPSBnX3JlYWxsb2MgKG1h
bmlmZXN0LT5rZXlfaWQsIGRlY29kZWRfa2V5X2lkX2xlbik7CisrICAgIG1lbWNweSAobWFuaWZl
c3QtPmtleV9pZCwgZGVjb2RlZF9rZXlfaWQsIGRlY29kZWRfa2V5X2lkX2xlbik7CisrICAgIG1h
bmlmZXN0LT5rZXlfaWRfbGVuID0gZGVjb2RlZF9rZXlfaWRfbGVuOworKworKyAgICB4bWxGcmVl
IChlbmNvZGVkX2tleV9pZCk7CisrICAgIGdfZnJlZSAoZGVjb2RlZF9rZXlfaWQpOworKyAgfSBl
bHNlIHsKKysgICAgR1NUX0VSUk9SICgiaW52YWxpZCBYTUwgcGF5bG9hZCIpOworKyAgICBnb3Rv
IGJlYWNoOworKyAgfQorKworK2JlYWNoOgorKyAgaWYgKGRlY29kZWRfcHJvdGVjdGlvbl9kYXRh
KQorKyAgICBnX2ZyZWUgKGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhKTsKKysgIGlmICh4cGF0aF9j
dHgpCisrICAgIHhtbFhQYXRoRnJlZUNvbnRleHQgKHhwYXRoX2N0eCk7CisrICBpZiAoeHBhdGhf
b2JqKQorKyAgICB4bWxYUGF0aEZyZWVPYmplY3QgKHhwYXRoX29iaik7CisrICBpZiAocHJvdGVj
dGlvbl9kYXRhX3htbCkKKysgICAgeG1sRnJlZURvYyAocHJvdGVjdGlvbl9kYXRhX3htbCk7Cisr
CisrICByZXR1cm47CisrfQorIAorIHN0YXRpYyB2b2lkCisgX2dzdF9tc3NfcGFyc2VfcHJvdGVj
dGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCwKK0BAIC0zMjksNiArNDUxLDcgQEAgX2dz
dF9tc3NfcGFyc2VfcHJvdGVjdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCwKKyAKKyAg
ICAgICBtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQgPSBzeXN0ZW1faWQ7CisgICAgICAg
bWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSA9IChnY2hhciAqKSB4bWxOb2RlR2V0Q29udGVudCAo
bm9kZWl0ZXIpOworKyAgICAgIF9nc3RfbXNzX3BhcnNlX3Byb3RlY3Rpb25fZGF0YSAobWFuaWZl
c3QpOworICAgICAgIHhtbEZyZWUgKHN5c3RlbV9pZF9hdHRyaWJ1dGUpOworICAgICAgIGJyZWFr
OworICAgICB9CitAQCAtMzk0LDYgKzUxNyw5IEBAIGdzdF9tc3NfbWFuaWZlc3RfbmV3IChHc3RC
dWZmZXIgKiBkYXRhKQorICAgICB9CisgICB9CisgCisrICBtYW5pZmVzdC0+a2V5X2lkID0gTlVM
TDsKKysgIG1hbmlmZXN0LT5rZXlfaWRfbGVuID0gMDsKKysKKyAgIGZvciAobm9kZWl0ZXIgPSBy
b290LT5jaGlsZHJlbjsgbm9kZWl0ZXI7IG5vZGVpdGVyID0gbm9kZWl0ZXItPm5leHQpIHsKKyAg
ICAgaWYgKG5vZGVpdGVyLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUKKyAgICAgICAgICYmIChz
dHJjbXAgKChjb25zdCBjaGFyICopIG5vZGVpdGVyLT5uYW1lLCAiU3RyZWFtSW5kZXgiKSA9PSAw
KSkgeworQEAgLTQ0MCw2ICs1NjYsOSBAQCBnc3RfbXNzX21hbmlmZXN0X2ZyZWUgKEdzdE1zc01h
bmlmZXN0ICogbWFuaWZlc3QpCisgCisgICBnX3NsaXN0X2ZyZWVfZnVsbCAobWFuaWZlc3QtPnN0
cmVhbXMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X21zc19zdHJlYW1fZnJlZSk7CisgCisrICBpZiAo
bWFuaWZlc3QtPmtleV9pZCkKKysgICAgZ19mcmVlIChtYW5pZmVzdC0+a2V5X2lkKTsKKysKKyAg
IGlmIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQgIT0gTlVMTCkKKyAgICAgZ19zdHJp
bmdfZnJlZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fc3lzdGVtX2lkLCBUUlVFKTsKKyAgIHhtbEZy
ZWUgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGEpOworQEAgLTQ2Miw2ICs1OTEsMTUgQEAgZ3N0
X21zc19tYW5pZmVzdF9nZXRfcHJvdGVjdGlvbl9kYXRhIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlm
ZXN0KQorICAgcmV0dXJuIG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGE7CisgfQorIAorK0dzdEJ1
ZmZlciAqCisrZ3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0KQorK3sKKysgIEdzdEJ1ZmZlciAqa2V5X2lkX2J1ZmZlciA9CisrICAgICAgZ3N0X2J1
ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIG1hbmlmZXN0LT5rZXlfaWRfbGVuLCBOVUxMKTsKKysg
IGdzdF9idWZmZXJfZmlsbCAoa2V5X2lkX2J1ZmZlciwgMCwgbWFuaWZlc3QtPmtleV9pZCwgbWFu
aWZlc3QtPmtleV9pZF9sZW4pOworKyAgcmV0dXJuIGtleV9pZF9idWZmZXI7CisrfQorKworIEdT
TGlzdCAqCisgZ3N0X21zc19tYW5pZmVzdF9nZXRfc3RyZWFtcyAoR3N0TXNzTWFuaWZlc3QgKiBt
YW5pZmVzdCkKKyB7CitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5p
ZmVzdC5oIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5oCitpbmRleCAwM2Iw
NjZhLi40ZTZhZDczIDEwMDY0NAorLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5p
ZmVzdC5oCisrKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKK0BAIC01
Niw2ICs1Niw3IEBAIEdzdENsb2NrVGltZSBnc3RfbXNzX21hbmlmZXN0X2dldF9taW5fZnJhZ21l
bnRfZHVyYXRpb24gKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlCisgY29uc3QgZ2NoYXIgKiBnc3Rf
bXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX3N5c3RlbV9pZCAoR3N0TXNzTWFuaWZlc3QgKiBt
YW5pZmVzdCk7CisgY29uc3QgZ2NoYXIgKiBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9u
X2RhdGEgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpOworIGdib29sZWFuIGdzdF9tc3NfbWFu
aWZlc3RfZ2V0X2xpdmVfc2Vla19yYW5nZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCwgZ2lu
dDY0ICogc3RhcnQsIGdpbnQ2NCAqIHN0b3ApOworK0dzdEJ1ZmZlciAqIGdzdF9tc3NfbWFuaWZl
c3RfZ2V0X2tleV9pZCAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7CisgCisgR3N0TXNzU3Ry
ZWFtVHlwZSBnc3RfbXNzX3N0cmVhbV9nZXRfdHlwZSAoR3N0TXNzU3RyZWFtICpzdHJlYW0pOwor
IEdzdENhcHMgKiBnc3RfbXNzX3N0cmVhbV9nZXRfY2FwcyAoR3N0TXNzU3RyZWFtICogc3RyZWFt
KTsKKy0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dz
dC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVk
LWEtZGVmYXVsdC1raWQucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lu
cy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRlZC1hLWRlZmF1
bHQta2lkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTVm
NWJiMzQ4YTFmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0
LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQt
YS1kZWZhdWx0LWtpZC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBhODE2ZDhkYWI2YmIz
Mzc3MDE1MDI4OWE0YWVkZTQzZTJmN2FlNDc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJv
bTogQ2hhcmxpZSBUdXJuZXIgPGNodHVybmVAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMCBNYXkg
MjAxOSAyMzozNDo0MyArMDIwMAorU3ViamVjdDogW1BBVENIXSBDaGVjayBpZiBhbiB1cHN0cmVh
bSBkZW11eGVyIHByb3ZpZGVkIGEgZGVmYXVsdCBraWQuCisKK1Ntb290aCBzdHJlYW1pbmcgZGVt
dXhlcnMgZG8gbm90IHNlbmQgYm94ZXMgY29udGFpbmluZyBtZXRhZGF0YSBhYm91dAordGhlIHN0
cmVhbS4gVGhleSBoYXZlIHRvIHNlbmQgbWV0YWRhdGEgIm91dC1vZi1iYW5kIi4KKworRm9yIHBp
ZmYgZW5jb2RlZCBzdHJlYW1zLCBpZiBubyBib3ggaGFzIGJlZW4gZm91bmQgY29udGFpbmluZyBh
IGRlZmF1bHQKK2tpZCBmb3IgdGhlIHNhbXBsZSwgY2hlY2sgaWYgYW4gdXBzdHJlYW0gZGVtdXhl
ciBoYXMgcHJvdmlkZWQgb25lIHZpYSBhCitwcm90ZWN0aW9uIGV2ZW50LCBhbmQgdXNlIHRoaXMg
YXMgYSBmYWxsYmFjay4KKworU2lnbmVkLW9mZi1ieTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
PGNhbHZhcmlzQGlnYWxpYS5jb20+CistLS0KKyBnc3QvaXNvbXA0L3F0ZGVtdXguYyB8IDQzICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdl
ZCwgNDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMg
Yi9nc3QvaXNvbXA0L3F0ZGVtdXguYworaW5kZXggY2YxNWZhZDQ2Li5lNDQ5YjQ4MGMgMTAwNjQ0
CistLS0gYS9nc3QvaXNvbXA0L3F0ZGVtdXguYworKysrIGIvZ3N0L2lzb21wNC9xdGRlbXV4LmMK
K0BAIC00NTEsNiArNDUxLDcgQEAgc3RydWN0IF9RdERlbXV4U3RyZWFtCisgICBndWludDMyIHBy
b3RlY3Rpb25fc2NoZW1lX3ZlcnNpb247CisgICBncG9pbnRlciBwcm90ZWN0aW9uX3NjaGVtZV9p
bmZvOyAgICAgIC8qIHNwZWNpZmljIHRvIHRoZSBwcm90ZWN0aW9uIHNjaGVtZSAqLworICAgR1F1
ZXVlIHByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlOworKyAgR3N0QnVmZmVyICpkZWZhdWx0
X2tpZDsKKyAKKyAgIGdpbnQgcmVmX2NvdW50OyAgICAgICAgICAgICAgIC8qIGF0b21pYyAqLwor
IH07CitAQCAtMjAwOCw2ICsyMDA5LDcgQEAgX2NyZWF0ZV9zdHJlYW0gKEdzdFFURGVtdXggKiBk
ZW11eCwgZ3VpbnQzMiB0cmFja19pZCkKKyAgIHN0cmVhbS0+c3RyZWFtX3RhZ3MgPSBnc3RfdGFn
X2xpc3RfbmV3X2VtcHR5ICgpOworICAgZ3N0X3RhZ19saXN0X3NldF9zY29wZSAoc3RyZWFtLT5z
dHJlYW1fdGFncywgR1NUX1RBR19TQ09QRV9TVFJFQU0pOworICAgZ19xdWV1ZV9pbml0ICgmc3Ry
ZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZSk7CisrICBzdHJlYW0tPmRlZmF1bHRf
a2lkID0gTlVMTDsKKyAgIHN0cmVhbS0+cmVmX2NvdW50ID0gMTsKKyAgIC8qIGNvbnNpc3RlbnQg
ZGVmYXVsdCBmb3IgcHVzaCBiYXNlZCBtb2RlICovCisgICBnc3Rfc2VnbWVudF9pbml0ICgmc3Ry
ZWFtLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworQEAgLTI0NzYsNiArMjQ3OCwzMiBAQCBn
c3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0
ICogcGFyZW50LAorICAgICBjYXNlIEdTVF9FVkVOVF9QUk9URUNUSU9OOgorICAgICB7CisgICAg
ICAgY29uc3QgZ2NoYXIgKnN5c3RlbV9pZCA9IE5VTEw7CisrICAgICAgR3N0QnVmZmVyICpkZWZh
dWx0X2tleV9pZCA9IE5VTEw7CisrICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7
CisrICAgICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKKysgICAgICBHc3RNYXBJbmZv
IG1hcDsKKysKKysgICAgICBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZl
bnQpOworKyAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoc3RydWN0dXJl
LCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVSKSkgeworKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9n
ZXQgKHN0cnVjdHVyZSwgImtleV9pZCIsIEdTVF9UWVBFX0JVRkZFUiwKKysgICAgICAgICAgICAm
ZGVmYXVsdF9rZXlfaWQsIE5VTEwpOworKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgs
CisrICAgICAgICAgICAgInJlY2VpdmVkIGEgZGVmYXVsdCBrZXkgaWQgb2Ygc2l6ZSAlIiBHX0dT
SVpFX0ZPUk1BVCwKKysgICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChkZWZhdWx0X2tl
eV9pZCkpOworKworKyAgICAgICAgaWYgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xk
IChHU1RfQ0FUX0RFRkFVTFQpID49CisrICAgICAgICAgICAgR1NUX0xFVkVMX01FTURVTVApIHsK
KysgICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGRlZmF1bHRfa2V5X2lkLCAmbWFwLCBHU1RfTUFQ
X1JFQUQpOworKyAgICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGRlbXV4LCAiZGVmYXVsdCBr
ZXkgaWQiLCAoZ3VpbnQ4ICopIG1hcC5kYXRhLAorKyAgICAgICAgICAgICAgbWFwLnNpemUpOwor
KyAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChkZWZhdWx0X2tleV9pZCwgJm1hcCk7CisrICAg
ICAgICB9CisrCisrICAgICAgICBpZiAoUVRERU1VWF9OX1NUUkVBTVMgKGRlbXV4KSkgeworKyAg
ICAgICAgICBzdHJlYW0gPSBRVERFTVVYX05USF9TVFJFQU0gKGRlbXV4LCAwKTsKKysgICAgICAg
ICAgc3RyZWFtLT5kZWZhdWx0X2tpZCA9IGRlZmF1bHRfa2V5X2lkOworKyAgICAgICAgfQorKyAg
ICAgIH0KKyAKKyAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbiAoZXZlbnQsICZzeXN0
ZW1faWQsIE5VTEwsIE5VTEwpOworICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiUmVj
ZWl2ZWQgcHJvdGVjdGlvbiBldmVudCBmb3Igc3lzdGVtIElEICVzIiwKK0BAIC0yNjg4LDYgKzI3
MTYsOCBAQCBnc3RfcXRkZW11eF9zdHJlYW1fY2xlYXIgKFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0p
CisgICBnX3F1ZXVlX2ZvcmVhY2ggKCZzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1
ZXVlLAorICAgICAgIChHRnVuYykgZ3N0X2V2ZW50X3VucmVmLCBOVUxMKTsKKyAgIGdfcXVldWVf
Y2xlYXIgKCZzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlKTsKKysgIGlmIChz
dHJlYW0tPmRlZmF1bHRfa2lkKQorKyAgICBnc3RfYnVmZmVyX3VucmVmIChzdHJlYW0tPmRlZmF1
bHRfa2lkKTsKKyAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mbHVzaF9zZWdtZW50c19kYXRhIChzdHJl
YW0pOworICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NhbXBsZXNfZGF0YSAoc3RyZWFtKTsK
KyB9CitAQCAtMjk1NCw2ICsyOTg0LDE5IEBAIHF0ZGVtdXhfcGFyc2VfcGlmZiAoR3N0UVREZW11
eCAqIHF0ZGVtdXgsIGNvbnN0IGd1aW50OCAqIGJ1ZmZlciwgZ2ludCBsZW5ndGgsCisgICAgIHVz
ZXNfc3ViX3NhbXBsZV9lbmNyeXB0aW9uID0gVFJVRTsKKyAgIH0KKyAKKysgIC8vIEluIHRoZSBj
YXNlIG9mIHNtb290aCBzdHJlYW1pbmcsIHdlIG5ldmVyIGdldCBtb292IGJveGVzIGFuZCB0aGVp
cgorKyAgLy8gZGVmYXVsdCBlbmNyeXB0aW9uIG1ldGFkYXRhLiBJbnN0ZWFkLCB0aGUgZGVtdXhl
ciBoYXMgdG8gcGFyc2UgdGhpcworKyAgLy8gaW5mb3JtYXRpb24gb3V0IG9mIHRoZSBwbGF5cmVh
ZHkgc3BlY2lmaWMgcGF5bG9hZHMgYW5kIG1ha2UgaXQgYXZhaWxibGUKKysgIC8vIHNvbWVob3cg
dG8gdXMuCisrICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzc19pbmZvLT5kZWZhdWx0
X3Byb3BlcnRpZXMsICJraWQiKSkgeworKyAgICBpZiAoIXN0cmVhbS0+ZGVmYXVsdF9raWQpIHsK
KysgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJObyBhdmFpbGFibGUga2V5IGlk
IGZvciBzYW1wbGUiKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBnc3Rfc3RydWN0dXJlX3NldCAo
c3NfaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVzLCAia2lkIiwgR1NUX1RZUEVfQlVGRkVSLAorKyAg
ICAgICAgICBzdHJlYW0tPmRlZmF1bHRfa2lkLCBOVUxMKTsKKysgICAgfQorKyAgfQorKworICAg
aWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzc19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMs
ICJpdl9zaXplIiwKKyAgICAgICAgICAgJml2X3NpemUpKSB7CisgICAgIEdTVF9FUlJPUl9PQkpF
Q1QgKHF0ZGVtdXgsICJFcnJvciBnZXR0aW5nIGVuY3J5cHRpb24gSVYgc2l6ZSBmaWVsZCIpOwor
LS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVz
IGIvVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzCmluZGV4IDYxMzY3YjUwMGNhMy4uOWZi
ZTNlNGQ5OGNjIDEwMDc1NQotLS0gYS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysr
IGIvVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzCkBAIC0xOTAsNiArMTkwLDcgQEAgZnVu
Y3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQgewogICAgICAgICBnaXQgXAogICAgICAg
ICBnb2JqZWN0LWludHJvc3BlY3Rpb24gXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hl
bWFzLWRldiBcCisgICAgICAgIGd5cCBcCiAgICAgICAgIGljb24tbmFtaW5nLXV0aWxzIFwKICAg
ICAgICAgbGliY3JvY28zLWRldiBcCiAgICAgICAgIGxpYmN1cHMyLWRldiBcCkBAIC0zNzgsNiAr
Mzc5LDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhQYWNtYW4gewogICAgICAg
ICBnbnV0bHMgXAogICAgICAgICBnb2JqZWN0LWludHJvc3BlY3Rpb24gXAogICAgICAgICBnc2V0
dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1p
bmctdXRpbHMgXAogICAgICAgICBsaWJjcm9jbyBcCiAgICAgICAgIGxpYmN1cHMgXApAQCAtNTYx
LDYgKzU2Myw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoRG5mIHsKICAgICAg
ICAgZ251dGxzLWRldmVsIFwKICAgICAgICAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIFwKICAgICAg
ICAgZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy1kZXZlbCBcCisgICAgICAgIGd5cCBcCiAgICAg
ICAgIGljb24tbmFtaW5nLXV0aWxzIFwKICAgICAgICAgaXRzdG9vbCBcCiAgICAgICAgIGxpYlhm
b250Mi1kZXZlbCBcCmRpZmYgLS1naXQgYS9Ub29scy9qaGJ1aWxkL2poYnVpbGRyY19jb21tb24u
cHkgYi9Ub29scy9qaGJ1aWxkL2poYnVpbGRyY19jb21tb24ucHkKaW5kZXggYmJiZGJmMzYwMzlm
Li4zZTI2MWU3MmQ3YmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1v
bi5weQorKysgYi9Ub29scy9qaGJ1aWxkL2poYnVpbGRyY19jb21tb24ucHkKQEAgLTgzLDMgKzgz
LDggQEAgZGVmIGluaXQoamhidWlsZHJjX2dsb2JhbHMsIGpoYnVpbGRfcGxhdGZvcm0pOgogCiAg
ICAgaWYgJ3g4Nl82NCcgaW4gcGxhdGZvcm0ubWFjaGluZSgpOgogICAgICAgICBqaGJ1aWxkcmNf
Z2xvYmFsc1snY29uZGl0aW9ucyddLmFkZCgneDg2XzY0JykKKworICAgIGlmICdKSEJVSUxEX0VO
QUJMRV9PUEVOQ0RNJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICBqaGJ1aWxkX2VuYWJsZV9vcGVu
Y2RtID0gb3MuZW52aXJvblsnSkhCVUlMRF9FTkFCTEVfT1BFTkNETSddLmxvd2VyKCkKKyAgICAg
ICAgaWYgamhidWlsZF9lbmFibGVfb3BlbmNkbSA9PSAneWVzJyBvciBqaGJ1aWxkX2VuYWJsZV9v
cGVuY2RtID09ICcxJyBvciBqaGJ1aWxkX2VuYWJsZV9vcGVuY2RtID09ICd0cnVlJzoKKyAgICAg
ICAgICAgIGpoYnVpbGRyY19nbG9iYWxzWydjb25kaXRpb25zJ10uYWRkKCdPcGVuQ0RNJykKZGlm
ZiAtLWdpdCBhL1Rvb2xzL3dwZS9pbnN0YWxsLWRlcGVuZGVuY2llcyBiL1Rvb2xzL3dwZS9pbnN0
YWxsLWRlcGVuZGVuY2llcwppbmRleCBhZDgyNjIxMzVlOWQuLjFlMmFlZDM2NDNjNyAxMDA3NTUK
LS0tIGEvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCisrKyBiL1Rvb2xzL3dwZS9pbnN0
YWxsLWRlcGVuZGVuY2llcwpAQCAtMTIwLDYgKzEyMCw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBl
bmRlbmNpZXNXaXRoQXB0IHsKICAgICBwYWNrYWdlcz0iJHBhY2thZ2VzIFwKICAgICAgICAgZ2l0
IFwKICAgICAgICAgZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy1kZXYgXAorICAgICAgICBneXAg
XAogICAgICAgICBsaWJlZ2wxLW1lc2EtZGV2IFwKICAgICAgICAgbGliZXhwYXQxLWRldiBcCiAg
ICAgICAgIGxpYmZkay1hYWMtZGV2IFwKQEAgLTIzOSw2ICsyNDAsNyBAQCBmdW5jdGlvbiBpbnN0
YWxsRGVwZW5kZW5jaWVzV2l0aFBhY21hbiB7CiAgICAgICAgIGV4cGF0IFwKICAgICAgICAgZ2l0
IFwKICAgICAgICAgZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBcCisgICAgICAgIGd5cCBcCiAg
ICAgICAgIGxpYmZkay1hYWMgXAogICAgICAgICBsaWJwcm94eSBcCiAgICAgICAgIGxpYnBzbCBc
CkBAIC0zNTksNiArMzYxLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhEbmYg
ewogICAgICAgICBmZGstYWFjLWRldmVsIFwKICAgICAgICAgZ2l0IFwKICAgICAgICAgZ3NldHRp
bmdzLWRlc2t0b3Atc2NoZW1hcy1kZXZlbCBcCisgICAgICAgIGd5cCBcCiAgICAgICAgIGxpYm1v
dW50LWRldmVsIFwKICAgICAgICAgbGlicHJveHktZGV2ZWwgXAogICAgICAgICBsaWJwc2wtZGV2
ZWwgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403519</attachid>
            <date>2020-07-04 03:13:02 -0700</date>
            <delta_ts>2020-07-07 07:20:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>150087</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZDJhOTUyYWU2ZWEuLjE1
Mzc4NTBjZmY2ZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA3LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIE1hYyBDTWFrZSBidWlsZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1Mzg2Y2Y5MGMzYzUuLmM4OTIxOWUwZGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAy
MC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
NTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm1FbmFibGUuaDogRGlzYWJsZSBPUEVOQ0RNIGJ5IGRlZmF1bHQuCisKIDIwMjAt
MDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAiLVds
aXRlcmFsLWNvbnZlcnNpb24iIHdhcm5pbmcgdG8gWGNvZGUgYmFzZWQgYnVpbGRzIGFuZCBmaXgg
dGhlIGlzc3VlcyBpdCBmaW5kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKaW5kZXggMWIzNDkzMDA0
YzgwLi5lMmNkOTBjNjY1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaApAQCAtNDAxLDYgKzQw
MSwxMCBAQAogI2RlZmluZSBFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAwCiAjZW5kaWYKIAorI2lm
ICFkZWZpbmVkKEVOQUJMRV9PUEVOQ0RNKQorI2RlZmluZSBFTkFCTEVfT1BFTkNETSAwCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMpCiAjZGVmaW5lIEVO
QUJMRV9PUklFTlRBVElPTl9FVkVOVFMgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBmMTk4YTlj
ZWJkLi5mYmI1NzczM2Q1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMjAtMDct
MDMgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dGVkIHRoZSBPcGVuQ0RNIHN1cHBvcnQgaW4gdGhlIENETU9wZW5DRE0gYW5kCisgICAgICAgIENE
TVByb3h5T3BlbkNETSByZWxhdGVkIGNsYXNzZXMuIENETU9wZW5DRE0gY2xhc3NlcyBjaGVjayBm
b3IKKyAgICAgICAgV2lkZXZpbmUgc3VwcG9ydCBpbiBPcGVuQ0RNIGFuZCBnbHVlcyB0aGUgSmF2
YVNjcmlwdCBBUEkgdG8gdGhlCisgICAgICAgIE9wZW5DRE0vVGh1bmRlciBmcmFtZXdvcmsuIEJ1
aWxkaW5nIHRoaXMgaXMgb3B0aW9uYWwgYW5kIC0tb3BlbmNkbQorICAgICAgICBwYXJhbWV0ZXIg
bmVlZHMgdG8gYmUgcGFzc2VkIHRvIGJ1aWxkLXdlYmtpdCB0byBnZXQgaXQuCisKKyAgICAgICAg
Q0RNUHJveHkgcmVsYXRlZCBuZWVkZWQgY2hhbmdlcyBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29u
cy4gRmlyc3QKKyAgICAgICAgaXMgdGhhdCBLZXkgd2FzIGNvbnNpZGVyaW5nIG9ubHkgYSBWZWN0
b3I8dWludDhfdD4gYXMgYSB0eXBlIGFuZAorICAgICAgICBPcGVuQ0RNIGhhcyBzZXNzaW9uIG9i
amVjdHMuIEtleSBpcyBhbHNvIHJlbmFtZWQgdG8gS2V5SGFuZGxlIGFzCisgICAgICAgIHRoaXMg
bmFtZSByZWZsZWN0cyBpbiBhIGJldHRlciB3YXkgdGhlIHB1cnBvc2Ugb2YgdGhlIGNsYXNzLiBU
aGlzCisgICAgICAgIGJsZWVkcyBvdXQgdG8gYWxsIENETVByb3h5IHJlbGF0ZWQgY2xhc3Nlcy4g
Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkKKyAgICAgICAgZ2V0cyBzdXBwb3J0IHRvIHJlbW92ZSBp
dHNlbGYgZnJvbSB0aGUgQ0RNU2Vzc2lvblByb3h5LgorCisgICAgICAgIFJlZ2FyZGluZyBDbGVh
cktleSwgd2UgYWRhcHQgdGhlIGNoYW5nZXMgdG8gdGhlIENETVByb3h5IGNsYXNzZXMKKyAgICAg
ICAgYW5kIGRlLWNhYmxlIHByb3RlY3Rpb24gc3lzdGVtIGZyb20gdGhlIGRlY3J5cHRvcnMgYXMg
dGhlIE9wZW5DRE0KKyAgICAgICAgZGVjcnlwdG9yIGNvdWxkIGhhbmRsZSBtb3JlIHRoYW4gb25l
IHN5c3RlbS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFlvdVR1YmUgVFYgMjAxOSB0ZXN0cyBh
cmUgZ3JlZW4uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3Bl
bkNETVR5cGVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6dGFr
ZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5z
S2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjprZXlIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZv
cktleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxh
YmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWls
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5
SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JL
ZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94
eTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHk6OnJlbW92ZUZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0
YXR1c0N1cnJlbnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlIYW5kbGU6OktleUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFu
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnJl
bGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVV0aWxpdGllcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJl
YW1lci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVDbGVhcktleTo6c3VwcG9ydHNJbml0RGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OnNhbml0aXplUmVzcG9u
c2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpwYXJlbnRJbnN0YW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzT3BlbkNETVJhbmtlZCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplR1N0
cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZVZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0
dGFjaG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
RmFjdG9yeUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5OjpwbGF0
Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKG9wZW5DRE1MaWNlbnNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0RGF0YU1ENSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXNzaW9uTG9hZEZhaWx1cmVGcm9tT3BlbkNETSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVu
Q0RNOjpkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06
OmNyZWF0ZVNoYXJlZE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3Rv
cnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3BlbkNETTo6Y3Jl
YXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5DRE06OnN1cHBv
cnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVzdG5lc3NlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlm
aWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9y
aWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3Bl
bkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5D
RE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVTZXNzaW9uSWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpDRE1JbnN0YW5j
ZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjppbml0aWFs
aXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNQYXlsb2FkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6cGF5bG9hZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnBheWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNUeXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6dHlwZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnR5cGVPciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5l
cmF0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdGF0dXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5VXBkYXRlZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRh
dGVEb25lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETTo6ZXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNOjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpzZXNzaW9uRmFpbHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmxvYWRTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU2Vzc2lvbkRlbGV0ZXI6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5
OjpjZW5jU2V0RGVjcnlwdGlvbktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5T3BlbkNETTo6Z2V0RGVjcnlwdGlvblNlc3Npb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpkZWNyeXB0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3Ry
ZWFtZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdERhdGE6OnBheWxvYWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjppc1dpZGV2aW5lS2V5U3lzdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jbGVhcl9r
ZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHByb3RlY3Rpb25TeXN0ZW1JZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHRyYW5zZm9ybUNhcHMpOgor
ICAgICAgICAodHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RN
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX29wZW5jZG1f
ZGVjcnlwdF9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKHByb3RlY3Rpb25T
eXN0ZW1JZCk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNE
TURlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAyMC0wNy0wMyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQ29yZS9Tb3VyY2VzLnR4dDogUmVtb3Zl
ICNpZiBFTkFCTEVfR0FNRVBBRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWRkOWY4YjNmMTUxLi5m
ZmFkM2Y5YTc0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVJlcXVpcmVtZW50LmgKICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1S
ZXN0cmljdGlvbnMuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25UeXBl
LmgKKyAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaAogCiAgICAgcGxh
dGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2Ft
ZXBhZFByb3ZpZGVyQ2xpZW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGFiYzBmNTUyODEuLmU3MmU2MTliZGU4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDExMiw2ICs0MTEyLDcgQEAKIAkJQ0QzQ0UxMDIyNDAxQUFEQTAwNEJBMDFEIC8qIENETVJl
cXVpcmVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDNDRTEwMzI0MDFBQURB
MDA0QkEwMUQgLyogQ0RNUmVzdHJpY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJp
Y3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQ0QzQ0UxMDQyNDAxQUFEQTAwNEJBMDFEIC8qIENETVNlc3Npb25UeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0QTVENTFGNzFDQjZEMDBG
NTI1QzUgLyogQ0RNU2Vzc2lvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlDRDNDRTEwNTI0MDFBQURBMDA0QkEwMUQgLyogQ0RNVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDk0
QTVENTFGNzFDQjZEMDBGNTI1QzUgLyogQ0RNVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1
IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0QzRTI1MUMxODA0NkIwNjAwRTI3RjU2IC8qIEdyaWRBcmVhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDNFMjUxQjE4MDQ2QjA2MDBF
MjdGNTYgLyogR3JpZEFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlDRDNFMjUyNDE4MDQ2QkNEMDBFMjdGNTYgLyogQ1NTR3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0QzRTI1MjIxODA0NkJDRDAwRTI3RjU2IC8qIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUu
aCAqLzsgfTsKQEAgLTE0MTY4LDYgKzE0MTY5LDggQEAKIAkJQ0Q5NEE1RDYxRjcxQ0I2RDAwRjUy
NUM1IC8qIENETU1lc3NhZ2VUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENETU1lc3NhZ2VUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOTRBNURB
MUY3MUNCQjAwMEY1MjVDNSAvKiBDRE1DbGVhcktleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDRE1DbGVhcktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDk0QTVEQjFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNQ2xlYXJLZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNQ2xlYXJLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDk0QTVEQzFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNVXRpbGl0aWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVERDFGNzFDQkIwMDBGNTI1QzUgLyogQ0RNVXRp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENETVV0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEOUE4N0Y5MjE1RDZDRjMw
MDZGMTdCNSAvKiBRdWlya3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVpcmtzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5QTg3RkIyMTVENkNGMzAwNkYxN0I1IC8qIFF1
aXJrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBRdWlya3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0Q5RDM3NUEyMTUxNjNFNDAwNDk2NTdCIC8qIENETUluc3RhbmNlU2Vzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDRE1JbnN0YW5jZVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI2ODgyLDYgKzI2ODg1LDggQEAKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1
QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUg
LyogQ0RNUmVzdHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8q
IENETVNlc3Npb25UeXBlLmggKi8sCisJCQkJQ0Q5NEE1REMxRjcxQ0JCMDAwRjUyNUM1IC8qIENE
TVV0aWxpdGllcy5oICovLAorCQkJCUNEOTRBNUREMUY3MUNCQjAwMEY1MjVDNSAvKiBDRE1VdGls
aXRpZXMuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBlbmNyeXB0ZWRtZWRpYTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDA1NCw2ICszMDA1OSw3IEBACiAJCQkJQ0QzQ0UxMDMy
NDAxQUFEQTAwNEJBMDFEIC8qIENETVJlc3RyaWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0RFNTk1OTcxQkYyNkUyMTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0NFMTA0MjQwMUFBREEwMDRCQTAxRCAvKiBDRE1TZXNz
aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0QzQ0UxMDUyNDAxQUFEQTAwNEJBMDFEIC8q
IENETVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4
QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1
M0Q2NTAwMEMyQjAwIC8qIENlcnRpZmljYXRlSW5mb0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggNzk1NDdj
YmFmMGQ1Li5mNmRmMDcwYmNlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKIAog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
VXRpbGl0aWVzLmNwcAogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9D
RE1DbGVhcktleS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9D
RE1GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0xODAsNiArMTgxLDIzIEBAIGlmIChFTkFC
TEVfRU5DUllQVEVEX01FRElBKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAg
ICAgICAgICR7TElCR0NSWVBUX0xJQlJBUklFU30gLWxncGctZXJyb3IKICAgICApCisKKyAgICBp
ZiAoRU5BQkxFX09QRU5DRE0pCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lO
Q0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNETV9JTkNMVURFX0RJUlN9Cisg
ICAgICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAg
ICAgICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQorCisgICAgICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisg
ICAgICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBpZiAoVVNFX0NBSVJPKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMjRkMjBiNjQ2OGJhLi5k
ZGY3YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApA
QCAtMTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBjb25z
dAogICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRhdGEoKTsKIH0KIAorY29uc3Qg
dWludDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEoKSk7Cit9CisKIFNoYXJl
ZEJ1ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoc2l6ZV90IHBvc2l0aW9u
KSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9uIDwgbV9zaXplKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4ZmU3MDFiMTliLi41MWVlNmQ0
ZmMxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMDYsNiAr
MTA2LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2lu
KCkgYW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVz
IG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3Nz
aWJsZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgY29uc3QgdWludDhfdCog
ZGF0YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0ZXMgYW4gQXJyYXlCdWZmZXIg
YW5kIGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRzIHRvIHRoYXQKICAgICAvLyBB
cnJheUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1ZmZlcnMgaW50byBhIGZsYXQg
YnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZjZDY2YWQxZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2Uu
aApAQCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENsZWFyS2V5LAogICAgICAgICBG
YWlyUGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lmIEVOQUJMRShPUEVOQ0RNKQor
ICAgICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2aXJ0dWFsIEltcGxlbWVudGF0
aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAppbmRleCAxYzQ2
MmYwYjY1NDMuLmYyYTVmMzE3NjZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MSwz
NSArOTIsNDIgQEAgc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZlYykKIAogfSAvLyBuYW1lc3BhY2Uge30KIAotU3RyaW5nIEtleTo6aWRBc1N0
cmluZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjppZEFzU3RyaW5nKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1faWQpLCAiXSIpOwog
fQogCi1TdHJpbmcgS2V5Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK2Jvb2wgS2V5SGFuZGxlOjp0
YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1fdmFsdWUpLCAiXSIp
OworICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3Zl
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdAorYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5
cGUmIGtleUlEKSBjb25zdAogewotICAgIHJldHVybiBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShj
b25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0
Y2hpbmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAg
cmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7CiAgICAgfSkgIT0gV1RGOjpub3RGb3VuZDsKIH0K
IAogdm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVyKQogeworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVy
Z2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1L
ZXlzKCksIG51bUtleXMoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikgewog
ICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5
IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKICAgICAgICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBo
YXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/
CiAgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5Lgot
ICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBz
dG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3Vu
ZCkKKyAgICAgICAgc2l6ZV90IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmlu
ZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgeyByZXR1
cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KTsKKyAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tl
eUlESW5kZXggPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3
aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgotICAgICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBz
YW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleXMgd2l0aCB0aGUgc2FtZSBJRCEiKTsKKyAg
ICAgICAgICAgIEFTU0VSVChrZXktPnZhbHVlKCkgPT0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tl
eUlESW5kZXhdLT52YWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogI2lmICFMT0dfRElTQUJM
RUQKQEAgLTEyOSwxNSArMTM3LDE1IEBAIHZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0
b3JlJiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9CiAKLUNETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0
CitDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0Fz
KENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykgY29uc3QKIHsKICAgICBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0
VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3Rh
dHVzVmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gc3RhdHVz
OwogICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OmFkZEtl
eXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29sIEtleVN0b3JlOjphZGRLZXlz
KFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQogewogICAgIGJvb2wgZGlkS2V5
U3RvcmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtleSA6IG5ld0tleXMpIHsKQEAg
LTE0NywxNiArMTU1LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxL
ZXk+PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOwogfQogCi1ib29s
IEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29sIEtleVN0b3JlOjphZGQoUmVm
UHRyPEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNl
OwotICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRj
aGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICBzaXplX3Qga2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBS
ZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAgIHJldHVybiAqa2V5ID09ICpz
dG9yZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAh
PSBXVEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0g
bV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhp
cyByZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IGtleVdpdGhNYXRj
aGluZ0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3JlQ2hhbmdlKQorICAgICAgICAg
ICAga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQg
dG8ga2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAog
ICAgICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyArMTc4LDcgQEAgYm9vbCBLZXlT
dG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIG5v
dCBhcyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBhbGwKICAgICAgICAgLy8gcHJh
Y3RpY2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVtIG9mIDIga2V5cy4KICAgICAg
ICAgc3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCi0gICAgICAgICAgICBb
XShjb25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtleT4mIGIpIHsKKyAgICAgICAg
ICAgIFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25zdCBSZWZQdHI8S2V5SGFuZGxl
PiYgYikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpiOwogICAgICAgICAgICAgfSk7
CiAgICAgfQpAQCAtMTgzLDcgKzE5Myw3IEBAIHZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNG
cm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVtb3ZlKGtleSk7CiB9CiAKLWJv
b2wgS2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQorYm9vbCBLZXlTdG9y
ZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkpCiB7CiAgICAgYm9vbCBzdG9y
ZUNoYW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyMTQsMTEgQEAgYm9vbCBLZXlTdG9yZTo6
cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsK
IH0KIAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2NvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBLZXlT
dG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAgaWYgKCprZXkgPT0ga2V5SUQp
Ci0gICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGtl
eTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0IGV4
aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSArMjQ4LDExIEBAIHZvaWQgQ0RN
UHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQogICAgIG1faW5z
dGFuY2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+IENETVByb3h5OjprZXlWYWx1
ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorUmVmUHRyPEtleUhhbmRsZT4g
Q0RNUHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwogICAgIEFTU0VSVChtX2tleVN0
b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4gbV9rZXlTdG9yZS5rZXlWYWx1
ZShrZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFuZGxlKGtleUlEKTsKIH0KIAog
dm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdApAQCAtMjYxLDcgKzI3
MSw3IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKICAgICBt
X2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQogCi1PcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6OnRyeVdhaXRG
b3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsKICAgICBzdGFydGVk
V2FpdGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBz
dG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldApA
QCAtMjgxLDMyICsyOTEsNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKQogCiAgICAgaWYgKHdh
c0tleVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN1Y2Nl
c3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7CisgICAgICAg
IFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShrZXlJRCk7CisgICAgICAgIHJl
dHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KICAgICAK
ICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQgJXMgbm90IGF2YWlsYWJsZSIs
IHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2NrZWQoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWls
YWJsZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAKLWJvb2wgQ0RNUHJveHk6Omtl
eUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorYm9vbCBDRE1Q
cm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAgICAgcmV0dXJuIGtleUF2YWls
YWJsZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Q
cm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0
CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleUhhbmRs
ZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAgIGlmICgha2V5QXZhaWxhYmxl
KGtleUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRv
ZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgICAg
ICByZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGtleVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxlPiBoYW5kbGUgPSBrZXlIYW5k
bGUoa2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxs
KCkpOworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlhbnQ+IENETVByb3h5OjpnZXRP
cldhaXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAoreworICAgIGlm
IChhdXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRsZShrZXlJRCkpCisgICAgICAg
IHJldHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5KCkKQEAgLTM2MCw2ICszNzksMTggQEAgdm9pZCBDRE1JbnN0YW5jZVByb3h5Ojp0cmFj
a1Nlc3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkmIHNlc3Npb24pCiAgICAgbV9z
ZXNzaW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNlU2Vzc2lvblByb3h5OjpDRE1J
bnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBpbnN0YW5jZSkKKyAgICA6IG1f
aW5zdGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQorCit2b2lkIENETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpyZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgpCit7CisgICAgaWYgKCFtX2lu
c3RhbmNlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbnN0YW5jZS0+cmVtb3ZlU2Vzc2lvbigq
dGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaAppbmRleCBhOWU3YmNkOTExYjEuLjRiNzI0YmY5M2FiMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBA
IC0zOCwzMSArMzgsNTEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSA8bWVt
b3J5PgorCitzdHJ1Y3QgT3BlbkNETVNlc3Npb247CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3VzaW5nIEtleUlE
VHlwZSA9IFZlY3Rvcjx1aW50OF90PjsKK3VzaW5nIEtleUhhbmRsZVZhbHVlVmFyaWFudCA9IFZh
cmlhbnQ8CisgICAgVmVjdG9yPHVpbnQ4X3Q+CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgLCBz
dGQ6OnNoYXJlZF9wdHI8T3BlbkNETVNlc3Npb24+CisjZW5kaWYKKz47CisKK2NsYXNzIEtleUhh
bmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxLZXlIYW5kbGU+IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czsKIAot
ICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVp
bnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgIHN0YXRpYyBS
ZWZQdHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgS2V5SURUeXBlJiYga2V5
SUQsIEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIGtleUhhbmRsZVZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1v
dmUoa2V5VmFsdWUpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleUhhbmRsZShz
dGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlKSkpOwogICAgIH0K
ICAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQogCi0gICAg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBj
b25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQot
ICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgYm9v
bCB0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJik7CisKKyAgICBj
b25zdCBLZXlJRFR5cGUmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IEtl
eUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Cisg
ICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBib29s
IGlzU3RhdHVzQ3VycmVudGx5VmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdHVz
ID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUgfHwgbV9zdGF0dXMgPT0g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJlc3RyaWN0ZWQgfHwKKyAgICAg
ICAgICAgIG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXRE
b3duc2NhbGVkOworICAgIH0KIAogICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAg
U3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgIC8vIFR3byBrZXlzIGFyZSBlcXVh
bCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVz
LgotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZr
MikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIHsgcmV0dXJu
IGsubV9pZCA9PSBrZXlJRDsgfQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJldHVybiBrID09IGtleUlEOyB9
Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSYgazEsIGNvbnN0IEtleSYgazIp
CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlIYW5kbGUgJmsxLCBjb25zdCBL
ZXlIYW5kbGUgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1faWQ7IH0KKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmaywgY29uc3QgS2V5SURUeXBlJiBrZXlJ
RCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBLZXlJRFR5cGUmIGtleUlELCBjb25zdCBLZXlIYW5kbGUgJmspIHsgcmV0dXJuIGsg
PT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5SGFuZGxlJiBr
MSwgY29uc3QgS2V5SGFuZGxlJiBrMikKICAgICB7CiAgICAgICAgIC8vIEtleSBJRHMgYXJlIGNv
bXBhcmVkIGFzIGZvbGxvd3M6IEZvciBrZXkgSURzIEEgb2YgbGVuZ3RoIG0gYW5kCiAgICAgICAg
IC8vIEIgb2YgbGVuZ3RoIG4sIGFzc2lnbmVkIHN1Y2ggdGhhdCBtIDw9IG4sIGxldCBBIDwgQiBp
ZiBhbmQgb25seQpAQCAtODQsMTIgKzEwNCwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG51
bVNlc3Npb25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1
cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNlczsgfQogICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsK
IAotICAgIEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVj
dG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUpCi0gICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9p
ZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorICAgIEtl
eUhhbmRsZShLZXlTdGF0dXMgc3RhdHVzLCBLZXlJRFR5cGUmJiBrZXlJRCwgS2V5SGFuZGxlVmFs
dWVWYXJpYW50JiYga2V5SGFuZGxlVmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwg
bV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlIYW5kbGVWYWx1ZSkpIHsg
fQogCiAgICAgS2V5U3RhdHVzIG1fc3RhdHVzOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOwot
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIEtleUlEVHlwZSBtX2lkOworICAgIEtl
eUhhbmRsZVZhbHVlVmFyaWFudCBtX3ZhbHVlOwogICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJl
ZmVyZW5jZXMgeyAwIH07CiB9OwogCkBAIC05NywxOCArMTE3LDIxIEBAIGNsYXNzIEtleVN0b3Jl
IHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3IgPSBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1c1ZlY3RvcjsKIAotICAgIGJvb2wgY29udGFpbnNLZXlJRChjb25zdCBWZWN0
b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICB2b2lkIG1lcmdlKGNvbnN0IEtleVN0b3Jl
JiBvdGhlcik7Ci0gICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3Ro
ZXIpOworICAgIEtleVN0b3JlKCkgPSBkZWZhdWx0OworCisgICAgYm9vbCBjb250YWluc0tleUlE
KGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUm
KTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CiAgICAgdm9p
ZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQotICAgIGJvb2wgYWRkS2V5cyhW
ZWN0b3I8UmVmUHRyPEtleT4+JiYpOwotICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYpOwotICAg
IGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgYm9vbCBhZGRLZXlzKFZlY3Rv
cjxSZWZQdHI8S2V5SGFuZGxlPj4mJik7CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleUhhbmRsZT4m
Jik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mKTsKICAgICBib29s
IGhhc0tleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgpOyB9CiAgICAgdW5zaWduZWQg
bnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0
OwotICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIGNv
bnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7
CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBcyhDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1cykgY29uc3Q7CiAgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVj
dG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmlz
RW1wdHkoKTsgfQogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9
CiAgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CkBAIC0x
MjAsNyArMTQzLDcgQEAgcHVibGljOgogICAgIGF1dG8gcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5cy5yZW5kKCk7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPEtleT4+IG1fa2V5
czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5czsKIH07CiAKIGNsYXNzIENE
TUluc3RhbmNlUHJveHk7CkBAIC0xMjksNyArMTUyLDcgQEAgY2xhc3MgQ0RNSW5zdGFuY2VQcm94
eTsKIC8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgogY2xhc3Mg
Q0RNUHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0g
NV9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMg
PSA3X3M7CiAKICAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKIApAQCAtMTQzLDEz
ICsxNjYsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIFZlY3Rvcjx1aW50
OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBi
b29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAg
ICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0OwotICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gdHJ5V2FpdEZvcktleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBPcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dDsKKyAgICBSZWZQdHI8S2V5SGFuZGxlPiBrZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJikgY29u
c3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAg
Ym9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBP
cHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gdHJ5V2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5
cGUmKSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gZ2V0T3JXYWl0Rm9yS2V5
SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIE9wdGlvbmFsPEtleUhhbmRsZVZh
bHVlVmFyaWFudD4gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoY29uc3QgS2V5SURUeXBlJikgY29uc3Q7
CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OwogICAgIHZvaWQgc3RvcHBl
ZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKyAgICBjb25zdCBDRE1JbnN0YW5jZVByb3h5KiBpbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAogcHJpdmF0ZToKICAgICBtdXRh
YmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OwpAQCAtMTg0LDE0ICsyMDksMjQgQEAgcHJpdmF0ZToK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPENETVByb3h5RmFjdG9yeSo+JiByZWdp
c3RlcmVkRmFjdG9yaWVzKCk7CiB9OwogCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5OworCiBjbGFz
cyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSwgV2Vha1B0ckZhY3Rv
cnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcmVs
ZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURl
Y3J5cHRpb25SZXNvdXJjZXMoKSB7IG1faW5zdGFuY2UuY2xlYXIoKTsgfQorICAgIHZvaWQgcmVt
b3ZlRnJvbUluc3RhbmNlUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIENETUluc3RhbmNlU2Vz
c2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKKyAgICBjb25zdCBXZWFrUHRyPENETUluc3Rh
bmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsg
fQorCitwcml2YXRlOgorICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gbV9pbnN0YW5jZTsK
IH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9uIG1hbmFnZW1lbnQgY29kZSBh
bmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKIC8vIGZyb20gInJlYWwgQ0RNIiBzdGF0ZSBj
aGFuZ2VzIHRvIEpTLgotY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5j
ZSB7CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3RhbmNlLCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gewogcHVibGljOgogICAgIGV4cGxpY2l0
IENETUluc3RhbmNlUHJveHkoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAgewpAQCAtMjA3
LDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJik7CiAKICAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1haW4gdGhy
ZWFkIG9ubHkuCi0gICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAgICBjb25zdCBSZWZQdHI8Q0RN
UHJveHk+JiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1f
Y2RtUHJveHk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yS2V5KCkgY29uc3QgeyBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zvcktl
eSA+IDA7IH0KICAgICB2b2lkIHNldFBsYXllcihNZWRpYVBsYXllciogcGxheWVyKSB7IEFTU0VS
VChpc01haW5UaHJlYWQoKSk7IG1fcGxheWVyID0gcGxheWVyOyB9CiAKQEAgLTIxNSw2ICsyNTAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIHZvaWQg
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKIAorICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihjb25zdCBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikgeyBtX3Nlc3Npb25zLnJlbW92ZShzZXNz
aW9uKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTg4NWFkNmU1ODYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGls
aXRpZXMuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKwor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDRE1VdGlsaXRpZXMgeworCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBi
dWZmZXIpCit7CisgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9lc24n
dCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgorICAgIHNpemVfdCBzaXplID0g
YnVmZmVyLnNpemUoKTsKKyAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBQYXJzZSB0aGUg
YnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBvYmplY3QgKGlmIGFu
eSkuCisgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc2l6ZSkgfTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit9OworCit9OworCisjZW5kaWYgLy8g
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi43NGY1MTViMGJkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaApAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
KworI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworbmFtZXNwYWNl
IENETVV0aWxpdGllcyB7CisKK1JlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChj
b25zdCBTaGFyZWRCdWZmZXImKTsKKworfTsKKworfTsKKworI2VuZGlmIC8vIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKaW5kZXggNjUzMjJlZDk5
ZTk3Li5lNmNjMjJkOTBjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM0
LDM2ICszNCwxOSBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKICNp
bmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgor
I2luY2x1ZGUgIkNETVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkluaXREYXRhUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNv
bnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIC8vIEZhaWwgb24gbGFyZ2UgYnVmZmVy
cyB3aG9zZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4K
LSAgICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7Ci0gICAgaWYgKHNpemUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhl
IHJvb3Qgb2JqZWN0IChpZiBhbnkpLgotICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCFKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3Rh
dGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25z
dCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlI
YW5kbGU+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKIHsK
ICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSByb290IG9iamVjdCwg
cGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVk
ICdsaWNlbnNlJyBmb3JtYXQuCkBAIC03Niw3ICs1OSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0
b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiBy
b290CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7
CisgICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZh
bGlkRm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVu
ZCgpLAogICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsKQEAgLTkxLDExICs3NCwxMiBA
QCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0
KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdAogICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdl
dFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIsIGtleVZh
bHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGlmICghV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCisgICAgICAgICAgICBLZXlJRFR5
cGUga2V5SUREYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUhhbmRsZVZhbHVl
RGF0YTsKKyAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5
SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlIYW5kbGVW
YWx1ZURhdGEgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0YSkp
KTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlIYW5kbGU6OmNyZWF0ZShDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0YSksIFdU
Rk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC00MDEsNyArMzg1LDcgQEAgYm9v
bCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdAogYm9vbCBDRE1Q
cml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERh
dGFUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBjb25zdAogewogICAgIC8vIFZh
bGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBvYmplY3QgaW4ga2V5aWRzIGNh
c2UuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwg
ImtleWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkpCisgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtleWlkcyIpICYmIENETVV0aWxp
dGllczo6cGFyc2VKU09OT2JqZWN0KGluaXREYXRhKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFzIENFTkMgaW5pdERhdGEuCkBA
IC00MTgsNyArNDAyLDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERh
dGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25zdAogUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1
ZmZlciYgcmVzcG9uc2UpIGNvbnN0CiB7CiAgICAgLy8gVmFsaWRhdGUgdGhlIHJlc3BvbnNlIGJ1
ZmZlciBhcyBhbiBKU09OIG9iamVjdC4KLSAgICBpZiAoIXBhcnNlSlNPTk9iamVjdChyZXNwb25z
ZSkpCisgICAgaWYgKCFDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdChyZXNwb25zZSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNvcHkoKTsKQEAg
LTUwNyw3ICs0OTEsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICB9OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNl
SlNPTk9iamVjdChyZXNwb25zZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IENE
TVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsKICAgICBpZiAoIXJvb3QpIHsK
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5
bG9hZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOwpAQCAtNTI0LDcgKzUwOCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAg
ICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChr
ZXlzQ2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vz
c2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAg
ICAgICAgICAgcGFyZW50SW5zdGFuY2UoKS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAg
ICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVj
dG9yKCk7CiAgICAgICAgIH0KIApAQCAtNTM0LDcgKzUxOCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExp
Y2Vuc2VUCiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1h
dCgqcm9vdCkpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAl
cyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9u
SWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5
c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIHBhcmVudEluc3RhbmNlKCkucmVtb3ZlQWxsS2V5
c0Zyb20obV9rZXlTdG9yZSk7CiAgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwog
ICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVl
OjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CkBAIC01OTIsNyArNTc2LDcgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5n
JiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9y
IG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0
aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9y
IGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzUmVsZWFzZWQoKTsKKyAgICBL
ZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXMoQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsKICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBtZXNzYWdlOwogICAgIHsKICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCBy
ZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMn
IGFycmF5CkBAIC02MjEsNiArNjA1LDEzIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQogewogfQogCitDRE1JbnN0
YW5jZUNsZWFyS2V5JiBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cGFyZW50SW5zdGFuY2Uo
KSBjb25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZVByb3h5KCk7CisgICAg
QVNTRVJUKGluc3RhbmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VDbGVh
cktleSY+KCppbnN0YW5jZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRl
eCA4YmYzNjI3MmFkYjYuLjEwNzkwODYwODBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5o
CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXpl
U2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xhc3MgQ0RNSW5z
dGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVh
cktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsKIHB1YmxpYzoKICAgICBDRE1J
bnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwpA
QCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblByb3h5IHsKIHB1YmxpYzoKICAg
ICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQp
Ci0gICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsgfQorICAgICAgICA6IENETUlu
c3RhbmNlU2Vzc2lvblByb3h5KHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShM
aWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVm
ZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRh
dGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYm
LCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihM
aWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxs
YmFjayYmKSBmaW5hbDsKQEAgLTExNiw4ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRh
dGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25z
dCBTdHJpbmcmKSBmaW5hbDsKIHByaXZhdGU6CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgcGFy
ZW50SW5zdGFuY2UoKSBjb25zdDsKKwogICAgIFN0cmluZyBtX3Nlc3Npb25JRDsKLSAgICBDRE1J
bnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOwogICAgIEtleVN0b3JlIG1fa2V5U3Rv
cmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDhhYzlhYjMxOGU2Zi4u
ZmVjM2QyMzkyYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtNTAsNiArNTAs
OSBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJXZWJLaXRDbGVh
cktleURlY3J5cHRvckdTdHJlYW1lci5oIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2luY2x1ZGUg
IldlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNlbmRpZgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoVklERU8pCkBAIC0yNzUsNiArMjc4LDIyIEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJl
YW1lcihPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4mJiBvcHRpb25zKQogICAgIHJldHVybiBpc0dT
dHJlYW1lckluaXRpYWxpemVkOwogfQogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKE9QRU5DRE0pCisvLyBXZWJNIGRvZXMgbm90IHNwZWNpZnkgYSBwcm90ZWN0aW9uIHN5
c3RlbSBJRCBzbyBpdCBjYW4gaGFwcGVuIHRoYXQKKy8vIHRoZSBDbGVhcktleSBkZWNyeXB0b3Ig
aXMgY2hvc2VuIGluc3RlYWQgb2YgdGhlIE9wZW5DRE0gb25lIGZvcgorLy8gV2lkZXZpbmUgKGFu
ZCB2aWNldmVyc2EpIHdoaWNoIGNhbiBjYW4gY3JlYXRlIGNoYW9zLiBUaGlzIGlzIGFuCisvLyBl
bnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgaW4gcnVuIHRpbWUgaWYgd2UgcHJlZmVyIHRvIHJh
bmsgaGlnaGVyCisvLyBPcGVuQ0RNIG9yIENsZWFyS2V5LiBJZiB3ZSB3YW50IHRvIHJ1biB0ZXN0
cyB3aXRoIE9wZW5DRE0sIHdlIG5lZWQKKy8vIHRvIHNldCB0aGlzIGVudmlyb25tZW50IHZhcmlh
YmxlIHRvIE9wZW5DRE0gYW5kIHRoYXQgZGVjcnlwdG9yIHdpbGwKKy8vIGJlIHJhbmtlZCBoaWdo
ZXIgd2hlbiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIHN5c3RlbSBzZXQgKGFzIGluCisvLyBXZWJN
KS4KK2Jvb2wgaXNPcGVuQ0RNUmFua2VkKCkKK3sKKyAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdf
Z2V0ZW52KCJXRUJLSVRfRU1FX1JBTktfUFJJT1JJVFkiKTsKKyAgICByZXR1cm4gdmFsdWUgJiYg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIk9wZW5DRE0iKTsKK30KKyNlbmRpZgorCiBi
b29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKIHsKICAg
ICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKQEAgLTI4Myw3ICszMDIsMTEgQEAgYm9vbCBp
bml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpCiAgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
XSB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZ3N0X2VsZW1lbnRfcmVn
aXN0ZXIobnVsbHB0ciwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwg
V0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lz
dGVyKG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAyMDAsIFdF
QktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgICAg
ICB1bnNpZ25lZCBvcGVuQ0RNUmFuayA9IGlzT3BlbkNETVJhbmtlZCgpID8gMzAwIDogMTAwOwor
ICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0b3BlbmNkbSIsIEdT
VF9SQU5LX1BSSU1BUlkgKyBvcGVuQ0RNUmFuaywgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9E
RUNSWVBUKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAt
MzgyLDYgKzQwNSwxMyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZVNoYXJlZEJ1ZmZlcigpCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCp0aGlzKTsK
IH0KIAorVmVjdG9yPHVpbnQ4X3Q+IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlVmVjdG9yKCkKK3sK
KyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoZGF0YSgpLCBz
aXplKCkpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIGJvb2wgaXNHU3RyZWFtZXJQbHVnaW5B
dmFpbGFibGUoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBHUmVmUHRyPEdzdFBsdWdpbj4gcGx1
Z2luID0gYWRvcHRHUmVmKGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbihnc3RfcmVnaXN0cnlfZ2V0
KCksIG5hbWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCBhMWU1NjI0NGIxN2UuLjAy
YTAyYzA1Nzc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApAQCAtNzMsNiArNzMsOSBAQCBi
b29sIGluaXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiYgPSBXVEY6
Om51bGxvcHQpOwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVt
ZW50cygpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljayk7CiB1aW50
NjRfdCB0b0dzdFVuc2lnbmVkNjRUaW1lKGNvbnN0IE1lZGlhVGltZSYpOworI2lmIEVOQUJMRShP
UEVOQ0RNKQorYm9vbCBpc09wZW5DRE1SYW5rZWQoKTsKKyNlbmRpZgogCiBpbmxpbmUgR3N0Q2xv
Y2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogewpAQCAt
ODEsNiArODQsMTEgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBN
ZWRpYVRpbWUgJm1lZGlhVGltZSkKIAogY2xhc3MgR3N0TWFwcGVkQnVmZmVyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1ZmZlcj4gewogcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RCdWZmZXI+
JiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIuZ2V0KCksIGZsYWdzKTsKKyAgICB9CisKICAgICBzdGF0aWMgUmVmUHRyPEdzdE1h
cHBlZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykK
ICAgICB7CiAgICAgICAgIEdzdE1hcEluZm8gaW5mbzsKQEAgLTEwNiw2ICsxMTQsNyBAQCBwdWJs
aWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1faW5mby5zaXplKTsgfQogICAgIGJvb2wgaXNTaGFyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEo
bV9pbmZvLmZsYWdzICYgR1NUX01BUF9XUklURSk7IH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBj
cmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gY3JlYXRlVmVjdG9yKCk7
CiAKIHByaXZhdGU6CiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RN
YXBJbmZvJiYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKaW5kZXggYTM0YzU1MjJhY2UxLi5jNzkzNjQ3NTJhNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zMDIsNiArMzAyLDEx
IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcigpCiAKICAgICBtX3BsYXllciA9IG51bGxwdHI7CiAgICAgbV9ub3RpZmllci0+aW52YWxp
ZGF0ZSgpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0p
CisgICAgaWYgKG1fY2RtSW5zdGFuY2UpCisgICAgICAgIG1fY2RtSW5zdGFuY2UtPnJlbGVhc2VE
ZWNyeXB0aW9uUmVzb3VyY2VzKCk7CisjZW5kaWYKIH0KIAogYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKQEAgLTM1MTgsNyArMzUyMyw4IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJ
bml0RGF0YSYmIGluaXRECiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGluaXRpYWxpemF0aW9uRGF0YUVu
Y291bnRlcmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkp
OworICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3Vu
dGVyZWQgJXMgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5wYXlsb2FkQ29udGFpbmVyVHlw
ZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUo
KSk7CiAgICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFzIiwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5kYXRhKCkpLCBpbml0RGF0YS5wYXls
b2FkKCktPnNpemUoKSk7CiAgICAgICAgIHdlYWtUaGlzLT5tX3BsYXllci0+aW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENvbnRhaW5lclR5cGUoKSwgaW5pdERh
dGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsKICAgICB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFj
dG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCmluZGV4IDBmOWE2OGQyY2Q2ZC4uMzdl
ODQ3MDZlMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAK
QEAgLTMzLDE3ICszMywyOSBAQAogCiAjaW5jbHVkZSAiQ0RNUHJveHlDbGVhcktleS5oIgogCisj
aWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3BlbkNETS5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDRE1GYWN0b3J5OjpwbGF0Zm9ybVJlZ2lzdGVyRmFj
dG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykKIHsKICAgICBmYWN0b3JpZXMu
YXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKKyNpZiBFTkFCTEUoT1BF
TkNETSkKKyAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9u
KCkpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxDRE1Qcm94eUZhY3RvcnkqPiBDRE1Qcm94eUZhY3Rv
cnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoKQogewogICAgIFZlY3RvcjxDRE1Qcm94eUZh
Y3RvcnkqPiBmYWN0b3JpZXM7CisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgZmFjdG9yaWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgZmFjdG9yaWVzLnVuY2hlY2tlZEFwcGVuZCgm
Q0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNlbHNlCiAgICAgZmFjdG9yaWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisjZW5kaWYKICAgICBmYWN0b3JpZXMudW5jaGVja2Vk
QXBwZW5kKCZDRE1Qcm94eUZhY3RvcnlDbGVhcktleTo6c2luZ2xldG9uKCkpOwogICAgIHJldHVy
biBmYWN0b3JpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUyNTgzNjkzZjBhNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNE
TS5jcHAKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNETU9wZW5DRE0uaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJM
RShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorI2luY2x1ZGUgIkNETVJlc3RyaWN0aW9ucy5oIgor
I2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVkZSAiQ0RNVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIk1lZGlhS2V5TWVzc2FnZVR5cGUuaCIKKyNpbmNsdWRlICJNZWRpYUtleVN0YXR1
cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiAoIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NU
X0RFQlVHKSkKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJO
KHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5CisjZW5kaWYK
KworbmFtZXNwYWNlIHsKKworLy8gV2UgYXJlIGRvaW5nIHRoaXMgdG8gYXZvaWQgY29uZmxpY3Qg
d2l0aCBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cy4KK3VzaW5nIE9wZW5DRE1LZXlTdGF0
dXMgPSBLZXlTdGF0dXM7CisKK30KKworc3RhdGljIExpY2Vuc2VUeXBlIG9wZW5DRE1MaWNlbnNl
VHlwZShXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlIGxpY2Vuc2VUeXBl
KQoreworICAgIHN3aXRjaCAobGljZW5zZVR5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkNETUlu
c3RhbmNlU2Vzc2lvbjo6TGljZW5zZVR5cGU6OlRlbXBvcmFyeToKKyAgICAgICAgcmV0dXJuIFRl
bXBvcmFyeTsKKyAgICBjYXNlIFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TGljZW5zZVR5
cGU6OlBlcnNpc3RlbnRVc2FnZVJlY29yZDoKKyAgICAgICAgcmV0dXJuIFBlcnNpc3RlbnRVc2Fn
ZVJlY29yZDsKKyAgICBjYXNlIFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TGljZW5zZVR5
cGU6OlBlcnNpc3RlbnRMaWNlbnNlOgorICAgICAgICByZXR1cm4gUGVyc2lzdGVudExpY2Vuc2U7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBUZW1wb3Jhcnk7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAo
IWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSkKK1N0cmluZyBpbml0RGF0YU1ENShjb25z
dCBJbml0RGF0YSYgaW5pdERhdGEpCit7CisgICAgV1RGOjpNRDUgbWQ1OworICAgIG1kNS5hZGRC
eXRlcyhpbml0RGF0YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIGluaXREYXRhLnBheWxv
YWQoKS0+c2l6ZSgpKTsKKworICAgIFdURjo6TUQ1OjpEaWdlc3QgZGlnZXN0OworICAgIG1kNS5j
aGVja3N1bShkaWdlc3QpOworCisgICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkaWdl
c3RbMF0sIFdURjo6TUQ1OjpoYXNoU2l6ZSk7Cit9CisjZW5kaWYKKworc3RhdGljIENETUluc3Rh
bmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlIHNlc3Npb25Mb2FkRmFpbHVyZUZyb21PcGVu
Q0RNKGNvbnN0IFN0cmluZ1ZpZXcmIGxvYWRTdGF0dXMpCit7CisgICAgaWYgKGxvYWRTdGF0dXMg
PT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9h
ZEZhaWx1cmU6Ok5vbmU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlNlc3Npb25Ob3RGb3VuZCIp
CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVyZTo6
Tm9TZXNzaW9uRGF0YTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiTWlzbWF0Y2hlZFNlc3Npb25U
eXBlIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWls
dXJlOjpNaXNtYXRjaGVkU2Vzc2lvblR5cGU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlF1b3Rh
RXhjZWVkZWQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9h
ZEZhaWx1cmU6OlF1b3RhRXhjZWVkZWQ7CisgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6
U2Vzc2lvbkxvYWRGYWlsdXJlOjpPdGhlcjsKK30KKworCit2b2lkIE9wZW5DRE06OmRlc3RydWN0
T3BlbkNETVNlc3Npb24oT3BlbkNETVNlc3Npb24qIHNlc3Npb24pCit7CisgICAgaWYgKCFzZXNz
aW9uKQorICAgICAgICByZXR1cm47CisgICAgb3BlbmNkbV9kZXN0cnVjdF9zZXNzaW9uKHNlc3Np
b24pOworfQorCitPcGVuQ0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBPcGVuQ0RNOjpjcmVhdGVT
aGFyZWRPcGVuQ0RNU2Vzc2lvbihPcGVuQ0RNU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICByZXR1
cm4gT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24oc2Vzc2lvbiwgT3BlbkNETTo6ZGVzdHJ1
Y3RPcGVuQ0RNU2Vzc2lvbik7Cit9CisKK0NETUZhY3RvcnlPcGVuQ0RNJiBDRE1GYWN0b3J5T3Bl
bkNETTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RNRmFjdG9y
eU9wZW5DRE0+IHNfZmFjdG9yeTsKKyAgICByZXR1cm4gc19mYWN0b3J5OworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETShjb25zdCBT
dHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5U3lz
dGVtKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q0RNUHJpdmF0ZU9wZW5DRE0+KGtleVN5c3Rl
bSk7Cit9CisKK1JlZlB0cjxDRE1Qcm94eT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETVBy
b3h5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0c0tleVN5
c3RlbShrZXlTeXN0ZW0pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5T3BlbkNE
TShrZXlTeXN0ZW0pKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3RvcnlPcGVu
Q0RNOjpzdXBwb3J0ZWRLZXlTeXN0ZW1zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVN5
c3RlbXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc3RkOjpz
dHJpbmcgZW1wdHlTdHJpbmc7CisgICAgICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwgMCBtZWFu
cyBzdXBwb3J0ZWQsIGhlbmNlIHNvbWV0aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0ZWQuCisg
ICAgICAgIGlmICghb3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVVdGlsaXRp
ZXM6OnNfV2lkZXZpbmVLZXlTeXN0ZW0sIGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAgICAgICAg
ICAgc3VwcG9ydGVkS2V5U3lzdGVtcy5hcHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX1dp
ZGV2aW5lS2V5U3lzdGVtKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBwb3J0ZWRL
ZXlTeXN0ZW1zLmlzRW1wdHkoKSAmJiBpc09wZW5DRE1SYW5rZWQoKSkgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiT3BlbkNETSBpcyB1cC1yYW5rZWQgYXMg
cHJlZmVycmVkIGRlY3J5cHRvciBidXQgT3BlbkNETSBpcyBub3Qgc3VwcG9ydGluZyBhbnkgZW5j
cnlwdGlvbiBzeXN0ZW0uIElzICIKKyAgICAgICAgICAgICAgICAiVGh1bmRlciBydW5uaW5nPyBB
cmUgdGhlIHBsdWdpbnMgYnVpbHQ/Iik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0pOworICAg
IHJldHVybiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworfQorCitib29sIENETUZhY3RvcnlPcGVuQ0RN
OjpzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICByZXR1
cm4gQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3RlbXMoKS5j
b250YWlucyhrZXlTeXN0ZW0pOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0ZU9w
ZW5DRE06OnN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBv
cnRlZEluaXREYXRhVHlwZXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAg
ICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOwor
ICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3RyaW5n
KCJrZXlpZHMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMudW5jaGVja2VkQXBw
ZW5kKEF0b21TdHJpbmcoImNlbmMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMu
dW5jaGVja2VkQXBwZW5kKEF0b21TdHJpbmcoIndlYm0iKSk7CisgICAgfSk7CisgICAgcmV0dXJu
IHN1cHBvcnRlZEluaXREYXRhVHlwZXM7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1
cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiBjb25m
aWd1cmF0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgYXVkaW9DYXBhYmlsaXR5IDogY29u
ZmlndXJhdGlvbi5hdWRpb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9pc190
eXBlX3N1cHBvcnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBhdWRpb0NhcGFiaWxpdHku
Y29udGVudFR5cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgdmlkZW9DYXBhYmlsaXR5IDogY29uZmlndXJhdGlvbi52aWRl
b0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZCht
X2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCB2aWRlb0NhcGFiaWxpdHkuY29udGVudFR5cGUudXRm
OCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBv
cnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgZW1wdHlBdG9tKCkgfTsK
K30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZlSWRlbnRp
ZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgY29uc3Qg
Q0RNUmVzdHJpY3Rpb25zJikgY29uc3QKK3sKKyAgICByZXR1cm4gQ0RNUmVxdWlyZW1lbnQ6Ok9w
dGlvbmFsOworfQorCitDRE1SZXF1aXJlbWVudCBDRE1Qcml2YXRlT3BlbkNETTo6cGVyc2lzdGVu
dFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0
IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0dXJuIENETVJlcXVpcmVtZW50OjpP
cHRpb25hbDsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlm
aWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1Db25m
aWd1cmF0aW9uJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0cjxDRE1J
bnN0YW5jZT4gQ0RNUHJpdmF0ZU9wZW5DRE06OmNyZWF0ZUluc3RhbmNlKCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlT3BlbkNETShtX2tleVN5c3RlbSkpOworfQorCit2
b2lkIENETVByaXZhdGVPcGVuQ0RNOjpsb2FkQW5kSW5pdGlhbGl6ZSgpCit7CisgICAgLy8gTm8t
b3AuCit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2VydmVyQ2VydGlmaWNh
dGVzKCkgY29uc3QKK3sKKyAgICAvLyBTZXJ2ZXIgY2VydGlmaWNhdGVzIGFyZSBub3Qgc3VwcG9y
dGVkLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6c3Vw
cG9ydHNTZXNzaW9ucygpIGNvbnN0Cit7CisgICAgLy8gU2Vzc2lvbnMgYXJlIHN1cHBvcnRlZC4K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJ
bml0RGF0YShjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgaW5pdERhdGEpIGNvbnN0Cit7CisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1ZmZl
ciBhcyBhbiBKU09OIG9iamVjdCBpbiBrZXlpZHMgY2FzZS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAia2V5aWRzIikgJiYgQ0RNVXRpbGl0aWVz
OjpwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgQ0VOQyBpbml0RGF0YS4gRklYTUU6
IFZhbGlkYXRlIGl0IGlzIGFjdHVhbGx5IENFTkMuCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSAmJiAhaW5pdERhdGEuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBi
dWZmZXIgYXMgV2ViTSBpbml0RGF0YS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaW5pdERhdGFUeXBlLCAid2VibSIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8U2hhcmVk
QnVmZmVyPiBDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZShjb25zdCBTaGFyZWRC
dWZmZXImIHJlc3BvbnNlKSBjb25zdAoreworICAgIHJldHVybiByZXNwb25zZS5jb3B5KCk7Cit9
CisKK09wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplU2Vzc2lvbklk
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAoreworICAgIHJldHVybiBzZXNzaW9uSWQ7
Cit9CisKK0NETUluc3RhbmNlT3BlbkNETTo6Q0RNSW5zdGFuY2VPcGVuQ0RNKGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShrZXlTeXN0ZW0pCisgICAgLCBt
X29wZW5DRE1TeXN0ZW0ob3BlbmNkbV9jcmVhdGVfc3lzdGVtKGtleVN5c3RlbS51dGY4KCkuZGF0
YSgpKSkKKyAgICAsIG1fa2V5U3lzdGVtKGtleVN5c3RlbSkKK3sKK30KKwordm9pZCBDRE1JbnN0
YW5jZU9wZW5DRE06OmluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxvd1BlcnNp
c3RlbnRTdGF0ZSwKKyAgICBTdWNjZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBjYWxs
YmFjayhTdWNjZWVkZWQpOworfQorCit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6c2V0U2VydmVy
Q2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBjZXJ0aWZpY2F0ZSwgIFN1Y2Nlc3NDYWxs
YmFjayYmIGNhbGxiYWNrKQoreworICAgIE9wZW5DRE1FcnJvciBlcnJvciA9IG9wZW5jZG1fc3lz
dGVtX3NldF9zZXJ2ZXJfY2VydGlmaWNhdGUobV9vcGVuQ0RNU3lzdGVtLmdldCgpLCBjb25zdF9j
YXN0PHVpbnQ4X3QqPihjZXJ0aWZpY2F0ZS0+ZGF0YUFzVUludDhQdHIoKSksCisgICAgICAgIGNl
cnRpZmljYXRlLT5zaXplKCkpOworICAgIGNhbGxiYWNrKCFlcnJvciA/IFN1Y2NlZWRlZCA6IEZh
aWxlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTdG9yYWdlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ0RNSW5zdGFu
Y2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETShDRE1JbnN0YW5jZU9w
ZW5DRE0mIGluc3RhbmNlKQorICAgIDogQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoaW5zdGFuY2Up
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2Fs
bGJhY2tzLnByb2Nlc3NfY2hhbGxlbmdlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24qLCB2
b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhcltdLCBjb25zdCB1aW50OF90IGNoYWxsZW5nZVtdLAor
ICAgICAgICBjb25zdCB1aW50MTZfdCBjaGFsbGVuZ2VMZW5ndGgpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBub3RpZmljYXRpb24iKTsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBidWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShjaGFsbGVuZ2UsCisgICAgICAgICAgICBjaGFsbGVuZ2VMZW5ndGgpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHNlc3Npb24tPmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFdURk1v
dmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vzc2lvbkNh
bGxiYWNrcy5rZXlfdXBkYXRlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24qLCB2b2lkKiB1
c2VyRGF0YSwgY29uc3QgdWludDhfdCBrZXlJRERhdGFbXSwgY29uc3QgdWludDhfdCBrZXlJRExl
bmd0aCkgeworICAgICAgICBHU1RfREVCVUcoIkdvdCAna2V5IHVwZGF0ZWQnIE9DRE0gbm90aWZp
Y2F0aW9uIik7CisgICAgICAgIEtleUlEVHlwZSBrZXlJRDsKKyAgICAgICAga2V5SUQuYXBwZW5k
KGtleUlERGF0YSwga2V5SURMZW5ndGgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZXNz
aW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSo+
KHVzZXJEYXRhKSksIGtleUlEID0gV1RGTW92ZShrZXlJRCldKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
c2Vzc2lvbi0+a2V5VXBkYXRlZENhbGxiYWNrKFdURk1vdmUoa2V5SUQpKTsKKyAgICAgICAgfSk7
CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLmtleXNfdXBkYXRlZF9jYWxs
YmFjayA9IFtdKGNvbnN0IE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEpIHsKKyAgICAg
ICAgR1NUX0RFQlVHKCJHb3QgJ2FsbCBrZXlzIHVwZGF0ZWQnIE9DRE0gbm90aWZpY2F0aW9uIik7
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzdGF0aWNf
Y2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKV0oKSB7CisgICAgICAg
ICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
c2Vzc2lvbi0+a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9Owor
ICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3MuZXJyb3JfbWVzc2FnZV9jYWxsYmFjayA9IFtd
KE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIgbWVzc2FnZVtdKSB7
CisgICAgICAgIEdTVF9FUlJPUigiR290ICdlcnJvcicgT0NETSBub3RpZmljYXRpb246ICVzIiwg
bWVzc2FnZSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0
cihzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKSwgYnVm
ZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZSwKKyAgICAgICAgICAg
IHN0cmxlbihtZXNzYWdlKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNlc3Npb24p
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+ZXJyb3JDYWxs
YmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworfQorCitSZWZQdHI8
Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24oKQor
eworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNPiBuZXdTZXNzaW9uID0gYWRv
cHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0oKnRoaXMpKTsKKyAgICBBU1NFUlQo
bmV3U2Vzc2lvbik7CisgICAgdHJhY2tTZXNzaW9uKCpuZXdTZXNzaW9uKTsKKyAgICByZXR1cm4g
bmV3U2Vzc2lvbjsKK30KKworY2xhc3MgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHsKKworcHVibGlj
OgorICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZShjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYg
YnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgU3RyaW5nVmlldyBwYXlsb2FkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90IHR5
cGVQb3NpdGlvbiA9IHBheWxvYWQuZmluZCgiOlR5cGU6Iik7CisgICAgICAgIFN0cmluZ1ZpZXcg
cmVxdWVzdFR5cGUocGF5bG9hZC5jaGFyYWN0ZXJzOCgpLCB0eXBlUG9zaXRpb24gIT0gbm90Rm91
bmQgPyB0eXBlUG9zaXRpb24gOiAwKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMHU7Cisg
ICAgICAgIGlmICghcmVxdWVzdFR5cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxlbmd0aCgp
ICE9IHBheWxvYWQubGVuZ3RoKCkpCisgICAgICAgICAgICBvZmZzZXQgPSB0eXBlUG9zaXRpb24g
KyA2OworCisgICAgICAgIGlmIChyZXF1ZXN0VHlwZS5sZW5ndGgoKSA9PSAxKQorICAgICAgICAg
ICAgbV90eXBlID0gbWFrZU9wdGlvbmFsKHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhS2V5TWVz
c2FnZVR5cGU+KHJlcXVlc3RUeXBlLnRvSW50KCkpKTsKKworICAgICAgICBtX3BheWxvYWQgPSBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShwYXlsb2FkLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIHBheWxv
YWQubGVuZ3RoKCkgLSBvZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaGFzUGF5bG9hZCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fcGF5bG9hZCk7IH0KKyAgICBjb25zdCBS
ZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9hZCgpIGNvbnN0JiB7IEFTU0VSVChtX3BheWxvYWQpOyBy
ZXR1cm4gbV9wYXlsb2FkLnZhbHVlKCk7IH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9h
ZCgpICYgeyBBU1NFUlQobV9wYXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgpOyB9Cisg
ICAgYm9vbCBoYXNUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV90eXBl
KTsgfQorICAgIFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZSgpIGNvbnN0IHsgQVNT
RVJUKG1fdHlwZSk7IHJldHVybiBtX3R5cGUudmFsdWUoKTsgfQorICAgIFdlYkNvcmU6Ok1lZGlh
S2V5TWVzc2FnZVR5cGUgdHlwZU9yKFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgYWx0ZXJu
YXRlKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPyBtX3R5cGUudmFsdWUoKSA6IGFsdGVybmF0ZTsg
fQorCitwcml2YXRlOgorICAgIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiBtX3BheWxvYWQ7
CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4gbV90eXBlOworfTsK
Kwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxs
YmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBQYXJzZWRSZXNwb25z
ZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisKKyAgICBpZiAoIW1fY2hh
bGxlbmdlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lc3NhZ2UgPSBXVEZNb3Zl
KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICBtX25lZWRzSW5kaXZp
ZHVhbGl6YXRpb24gPSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZSgpID09IENETUluc3RhbmNl
U2Vzc2lvbjo6TWVzc2FnZVR5cGU6OkluZGl2aWR1YWxpemF0aW9uUmVxdWVzdDsKKworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFsbGVuZ2VDYWxsYmFj
a3MpCisgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgICAgICBtX2NoYWxsZW5n
ZUNhbGxiYWNrcy5jbGVhcigpOworICAgIH0gZWxzZSBpZiAoIW1fc2Vzc2lvbkNoYW5nZWRDYWxs
YmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5nZWRDYWxs
YmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgICAgICBzZXNzaW9uQ2hh
bmdlZENhbGxiYWNrKHRydWUsIHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkuY29weVJl
ZigpKTsKKyAgICAgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFz
VHlwZSgpKSB7CisgICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2Uoc3RhdGljX2Nhc3Q8
Q0RNTWVzc2FnZVR5cGU+KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS50eXBlKCkpLAorICAgICAgICAg
ICAgICAgIFdURk1vdmUocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSkpOworICAgICAg
ICB9CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSB8fCAh
R1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3RhdHVzKSB7
CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOgorICAgICAg
ICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBpcmVkIjsKKyAgICBjYXNlIENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuICJSZWxlYXNl
ZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJp
Y3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0cmljdGVkIjsKKyAgICBjYXNlIENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOgorICAgICAgICByZXR1
cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiAiU3RhdHVzUGVuZGluZyI7Cisg
ICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJvcjoKKyAg
ICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9Cit9Cisj
ZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgQ0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7CisgICAgT3Bl
bkNETUtleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1wdHko
KSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNzaW9uLmdldCgpLCBrZXlJRC5kYXRhKCks
IGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOworCisgICAgc3dpdGNoIChzdGF0dXMpIHsK
KyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVkOgorICAgICAgICByZXR1cm4gQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7CisgICAgY2FzZSBSZWxlYXNlZDoKKyAg
ICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDsKKyAg
ICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsKKyAgICBjYXNlIE91dHB1dERvd25zY2Fs
ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0
RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVzUGVuZGluZzsKKyAgICBjYXNlIEludGVy
bmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6
SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpJbnRlcm5h
bEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlV
cGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQpCit7CisgICAgR1NUX01FTURVTVAoInVw
ZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpOworCisgICAgYXV0byBrZXlT
dGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9ERUJVRygidXBkYXRlZCB3aXRoIHdpdGgg
a2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1cykpOworICAgIG1fZG9lc0tleVN0b3Jl
TmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5SGFuZGxlOjpjcmVhdGUoa2V5U3RhdHVz
LCBXVEZNb3ZlKGtleUlEKSwgT3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Npb24oKSkp
OworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRhdGVEb25lQ2Fs
bGJhY2soKQoreworICAgIEdTVF9ERUJVRygidXBkYXRlIGRvbmUiKTsKKyAgICBpZiAobV9kb2Vz
S2V5U3RvcmVOZWVkTWVyZ2luZykgeworICAgICAgICBtX2RvZXNLZXlTdG9yZU5lZWRNZXJnaW5n
ID0gZmFsc2U7CisgICAgICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZU9wZW5DRE0oKTsK
KyAgICAgICAgaWYgKGluc3RhbmNlKQorICAgICAgICAgICAgaW5zdGFuY2UtPm1lcmdlS2V5c0Zy
b20obV9rZXlTdG9yZSk7CisgICAgfQorCisgICAgaWYgKG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
a3MuaXNFbXB0eSgpICYmIG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT51cGRhdGVLZXlT
dGF0dXNlcyhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENhbGxiYWNr
IDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNoYW5nZWRDYWxs
YmFjayh0cnVlLCBudWxscHRyKTsKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6ZXJyb3JDYWxsYmFjayhS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYmIG1lc3NhZ2UpCit7CisgICAgR1NUX0VSUk9SKCJDRE0gZXJy
b3IiKTsKKyAgICBHU1RfTUVNRFVNUCgiZXJyb3IgZHVtcCIsIG1lc3NhZ2UtPmRhdGFBc1VJbnQ4
UHRyKCksIG1lc3NhZ2UtPnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFsbGVuZ2VD
YWxsYmFjayA6IG1fY2hhbGxlbmdlQ2FsbGJhY2tzKQorICAgICAgICBjaGFsbGVuZ2VDYWxsYmFj
aygpOworICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8m
IHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAg
ICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBtZXNzYWdlLmNvcHlSZWYoKSk7Cisg
ICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbk9wZW5DRE06OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlIGxpY2Vuc2VUeXBl
LCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5p
dERhdGFTaGFyZWRCdWZmZXIsCisgICAgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBVVUlEIG9yIHN5c3Rl
bSBJRD8KKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VPcGVuQ0RNKCk7CisgICAgQVNT
RVJUKGluc3RhbmNlKTsKKyAgICBtX2luaXREYXRhID0gSW5pdERhdGEoaW5zdGFuY2UtPmtleVN5
c3RlbSgpLCBXVEZNb3ZlKGluaXREYXRhU2hhcmVkQnVmZmVyKSk7CisKKyAgICBHU1RfVFJBQ0Uo
IkdvaW5nIHRvIHJlcXVlc3QgYSBuZXcgc2Vzc2lvbiBpZCwgaW5pdCBkYXRhIHNpemUgJWx1IGFu
ZCBNRDUgJXMiLCBtX2luaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpLCBpbml0RGF0YU1ENShtX2lu
aXREYXRhKS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhIiwgbV9p
bml0RGF0YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgp
LT5zaXplKCkpOworCisgICAgT3BlbkNETVNlc3Npb24qIHNlc3Npb24gPSBudWxscHRyOworICAg
IG9wZW5jZG1fY29uc3RydWN0X3Nlc3Npb24oJmluc3RhbmNlLT5vcGVuQ0RNU3lzdGVtKCksIG9w
ZW5DRE1MaWNlbnNlVHlwZShsaWNlbnNlVHlwZSksIGluaXREYXRhVHlwZS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLAorICAgICAgICBtX2luaXREYXRhLnBheWxvYWQoKS0+ZGF0YUFzVUludDhQdHIo
KSwgbV9pbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSwgbnVsbHB0ciwgMCwgJm1fb3BlbkNETVNl
c3Npb25DYWxsYmFja3MsIHRoaXMsICZzZXNzaW9uKTsKKyAgICBpZiAoIXNlc3Npb24pIHsKKyAg
ICAgICAgR1NUX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHNlc3Npb24iKTsKKyAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gaW5pdERhdGEgPSBtX2luaXREYXRhLnBheWxvYWQoKTsKKyAgICAg
ICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBmYWxzZSwgRmFpbGVk
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Nlc3Npb24ucmVzZXQoc2Vzc2lvbik7
CisgICAgbV9zZXNzaW9uSUQgPSBTdHJpbmc6OmZyb21VVEY4KG9wZW5jZG1fc2Vzc2lvbl9pZCht
X3Nlc3Npb24uZ2V0KCkpKTsKKworICAgIGF1dG8gZ2VuZXJhdGVDaGFsbGVuZ2UgPSBbdGhpcywg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW5pdERhdGEg
PSBtX2luaXREYXRhLnBheWxvYWQoKTsKKyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRW1wdHko
KSkgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJjb3VsZCBub3QgY3JlYXRlIHNlc3Npb24gaWQi
KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwg
ZmFsc2UsIEZhaWxlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoImNyZWF0ZWQgaW52
YWxpZCBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBjYWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBtX3Nlc3Npb25JRCwgZmFsc2Us
IEZhaWxlZCk7CisgICAgICAgICAgICByZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1NUX0RFQlVHKCJjcmVhdGVkIHZh
bGlkIHNlc3Npb24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY2Fs
bGJhY2sobV9tZXNzYWdlLmNvcHlSZWYoKS5yZWxlYXNlTm9uTnVsbCgpLCBtX3Nlc3Npb25JRCwg
bV9uZWVkc0luZGl2aWR1YWxpemF0aW9uLCBTdWNjZWVkZWQpOworICAgIH07CisKKyAgICBpZiAo
bV9zZXNzaW9uSUQuaXNFbXB0eSgpIHx8IGlzVmFsaWQoKSkKKyAgICAgICAgZ2VuZXJhdGVDaGFs
bGVuZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmFwcGVuZChX
VEZNb3ZlKGdlbmVyYXRlQ2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6c2Vzc2lvbkZhaWx1cmUoKQoreworICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgIHNlc3Npb25D
aGFuZ2VkQ2FsbGJhY2soZmFsc2UsIG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxs
YmFja3MuY2xlYXIoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjp1cGRh
dGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7
CisgICAgQVNTRVJUX1VOVVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7
CisKKyAgICBHU1RfVFJBQ0UoIlVwZGF0aW5nIHNlc3Npb24gJXMiLCBzZXNzaW9uSUQudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiYmIHJlc3BvbnNlTWVzc2FnZSkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJl
c3BvbnNlTWVzc2FnZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9rZXlTdG9yZS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBtX2tleVN0b3JlLmNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNj
ZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBVc2luZyBKU09OIHJlcG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBjbGVhbmVy
IHRoYW4gdXNpbmcgc3RyaW5nIHByZWZpeGVzLCBJIGJlbGlldmUgdGhlcmUKKyAgICAgICAgICAg
ICAgICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIgcGFydHMgb2YgdGhlIHNwZWMgd2hlcmUgbm90IGhh
dmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBiZSBiYWQuCisgICAgICAgICAgICAgICAgUGFyc2Vk
UmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFzUGF5bG9hZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2UgPSBXVEZNb3Zl
KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICAgICAgICAgICAgICBH
U1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlLT5kYXRhQXNV
SW50OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhmYWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1ha2VfcGFpcihwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZU9yKE1lZGlhS2V5
TWVzc2FnZVR5cGU6OkxpY2Vuc2VSZXF1ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXVEZNb3ZlKG1lc3NhZ2UpKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9FUlJPUigibWVzc2FnZSBv
ZiBzaXplICVsdSBpbmNvcnJlY3RseSBmb3JtYXR0ZWQiLCByZXNwb25zZU1lc3NhZ2UgPyByZXNw
b25zZU1lc3NhZ2UtPnNpemUoKSA6IDApOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhm
YWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1Zh
bHVlOjpGYWlsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigidXBkYXRlIGxpY2Vuc2UgcmVwb3J0ZWQg
ZXJyb3Igc3RhdGUiKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAg
ICAgIH0KKyAgICB9KTsKKyAgICBpZiAoIW1fc2Vzc2lvbiB8fCBtX3Nlc3Npb25JRC5pc0VtcHR5
KCkgfHwgb3BlbmNkbV9zZXNzaW9uX3VwZGF0ZShtX3Nlc3Npb24uZ2V0KCksIHJlc3BvbnNlLT5k
YXRhQXNVSW50OFB0cigpLCByZXNwb25zZS0+c2l6ZSgpKSkKKyAgICAgICAgc2Vzc2lvbkZhaWx1
cmUoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbihM
aWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYsIExvYWRT
ZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25J
RCwgc2Vzc2lvbklEID09IG1fc2Vzc2lvbklEKTsKKworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxs
YmFja3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1
Y2Nlc3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VNZXNzYWdlKSBtdXRhYmxlIHsK
KyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgIGlmICghcmVzcG9uc2VNZXNzYWdlKQorICAgICAgICAgICAgICAgIGNhbGxi
YWNrKG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1
cmU6Ok5vbmUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFVzaW5nIEpTT04gcmVwb25zZSBtZXNzYWdlcyBpcyBtdWNoIGNsZWFuZXIgdGhhbiB1c2luZyBz
dHJpbmcgcHJlZml4ZXMsIEkgYmVsaWV2ZSB0aGVyZQorICAgICAgICAgICAgICAgIC8vIHdpbGwg
ZXZlbiBiZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3BlYyB3aGVyZSBub3QgaGF2aW5nIHN0cnVjdHVy
ZWQgZGF0YSB3aWxsIGJlIGJhZC4KKyAgICAgICAgICAgICAgICBQYXJzZWRSZXNwb25zZU1lc3Nh
Z2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5oYXNQYXlsb2FkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZSA9IFdURk1vdmUocGFyc2VkUmVzcG9u
c2VNZXNzYWdlLnBheWxvYWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiZ290
IG1lc3NhZ2Ugb2Ygc2l6ZSAlbHUiLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICBHU1RfTUVNRFVNUCgibWVzc2FnZSIsIG1lc3NhZ2UtPmRhdGFBc1VJbnQ4UHRyKCksIG1l
c3NhZ2UtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0LCBzdGQ6Om1ha2VfcGFpcihwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlw
ZU9yKE1lZGlhS2V5TWVzc2FnZVR5cGU6OkxpY2Vuc2VSZXF1ZXN0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFdURk1vdmUobWVzc2FnZSkpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCwgU2Vz
c2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBHU1RfRVJST1IoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkg
Zm9ybWF0dGVkIiwgcmVzcG9uc2VNZXNzYWdlID8gcmVzcG9uc2VNZXNzYWdlLT5zaXplKCkgOiAw
KTsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQsIFNlc3Npb25Mb2FkRmFpbHVy
ZTo6T3RoZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VNZXNzYWdlRGF0YSA9IHJlc3BvbnNlTWVz
c2FnZSA/IHJlc3BvbnNlTWVzc2FnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGF1
dG8gcmVzcG9uc2VNZXNzYWdlU2l6ZSA9IHJlc3BvbnNlTWVzc2FnZSA/IHJlc3BvbnNlTWVzc2Fn
ZS0+c2l6ZSgpIDogMDsKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgcmVzcG9uc2UocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KHJlc3BvbnNlTWVzc2FnZURhdGEpLCByZXNwb25zZU1lc3Nh
Z2VTaXplKTsKKyAgICAgICAgICAgIEdTVF9FUlJPUigic2Vzc2lvbiAlcyBub3QgbG9hZGVkLCBy
ZWFzb24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpLCByZXNwb25zZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkLCBzZXNzaW9uTG9hZEZhaWx1cmVGcm9t
T3BlbkNETShyZXNwb25zZSkpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Np
b24gfHwgbV9zZXNzaW9uSUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl9sb2FkKG1fc2Vz
c2lvbi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWlsdXJlKCk7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklE
LCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQo
c2Vzc2lvbklELCBtX3Nlc3Npb25JRCA9PSBzZXNzaW9uSUQpOworCisgICAgaWYgKG1fc2Vzc2lv
biAmJiAhbV9zZXNzaW9uSUQuaXNFbXB0eSgpKQorICAgICAgICBvcGVuY2RtX3Nlc3Npb25fY2xv
c2UobV9zZXNzaW9uLmdldCgpKTsKKworICAgIHJlbW92ZUZyb21JbnN0YW5jZVByb3h5KCk7CisK
KyAgICBjYWxsYmFjaygpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnJl
bW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwgUmVt
b3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQo
c2Vzc2lvbklELCBtX3Nlc3Npb25JRCA9PSBzZXNzaW9uSUQpOworCisgICAgbV9zZXNzaW9uQ2hh
bmdlZENhbGxiYWNrcy5hcHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
KGJvb2wgc3VjY2VzcywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpIG11dGFibGUgewor
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2Vzcykgewor
ICAgICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlT
dG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OlJlbGVhc2VkKSwgV1RGOjpudWxsb3B0LCBT
dWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBQYXJzZWRSZXNwb25zZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5oYXNQYXlsb2FkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZSA9IFdURk1v
dmUocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSk7CisgICAgICAgICAgICAgICAgICAg
IEdTVF9ERUJVRygic2Vzc2lvbiAlcyByZW1vdmVkLCBtZXNzYWdlIGxlbmd0aCAlbHUiLCBtX3Nl
c3Npb25JRC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtleVN0YXR1czo6UmVsZWFz
ZWQpLCBXVEZNb3ZlKG1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIm1lc3Nh
Z2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGFzIHNlc3Npb24gJXMgcmVtb3Zh
bCBhbnN3ZXIiLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJy
b3IpLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfV0FS
TklORygiY291bGQgbm90IHJlbW92ZSBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtl
eVN0YXR1czo6SW50ZXJuYWxFcnJvciksIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwgbV9zZXNzaW9u
SUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl9yZW1vdmUobV9zZXNzaW9uLmdldCgpKSkK
KyAgICAgICAgc2Vzc2lvbkZhaWx1cmUoKTsKKworICAgIHJlbW92ZUZyb21JbnN0YW5jZVByb3h5
KCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktl
eVVzYWdlKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworT3B0
aW9uYWw8Q0RNSW5zdGFuY2VPcGVuQ0RNJj4gQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2Rt
SW5zdGFuY2VPcGVuQ0RNKCkgY29uc3QKK3sKKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFu
Y2VQcm94eSgpOworICAgIGlmICghaW5zdGFuY2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENETUluc3RhbmNlT3BlbkNETSY+KCppbnN0YW5j
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFlZWI3NTlhYTE1MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvQ0RNT3BlbkNETS5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICog
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRl
ICJDRE1GYWN0b3J5LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVk
ZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8
b3Blbl9jZG0uaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBPcGVuQ0RNIHsKKworc3RydWN0IE9wZW5DRE1TeXN0ZW1EZWxldGVy
IHsKKyAgICBPcGVuQ0RNRXJyb3Igb3BlcmF0b3IoKShPcGVuQ0RNU3lzdGVtKiBwdHIpIGNvbnN0
IHsgcmV0dXJuIG9wZW5jZG1fZGVzdHJ1Y3Rfc3lzdGVtKHB0cik7IH0KK307Cit1c2luZyBVbmlx
dWVPcGVuQ0RNU3lzdGVtID0gc3RkOjp1bmlxdWVfcHRyPE9wZW5DRE1TeXN0ZW0sIE9wZW5DRE1T
eXN0ZW1EZWxldGVyPjsKKwordm9pZCBkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKE9wZW5DRE1TZXNz
aW9uKik7CitzdHJ1Y3QgT3BlbkNETVNlc3Npb25EZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9y
KCkoT3BlbkNETVNlc3Npb24qIHB0cikgY29uc3QgeyBkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKHB0
cik7IH0KK307Cit1c2luZyBVbmlxdWVPcGVuQ0RNU2Vzc2lvbiA9IHN0ZDo6dW5pcXVlX3B0cjxP
cGVuQ0RNU2Vzc2lvbiwgT3BlbkNETVNlc3Npb25EZWxldGVyPjsKK3VzaW5nIFNoYXJlZE9wZW5D
RE1TZXNzaW9uID0gc3RkOjpzaGFyZWRfcHRyPE9wZW5DRE1TZXNzaW9uPjsKK1NoYXJlZE9wZW5D
RE1TZXNzaW9uIGNyZWF0ZVNoYXJlZE9wZW5DRE1TZXNzaW9uKE9wZW5DRE1TZXNzaW9uKiA9IG51
bGxwdHIpOworCit9IC8vIG5hbWVzcGFjZSBPcGVuQ0RNCisKK2NsYXNzIENETUZhY3RvcnlPcGVu
Q0RNIGZpbmFsIDogcHVibGljIENETUZhY3RvcnksIHB1YmxpYyBDRE1Qcm94eUZhY3Rvcnkgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBDRE1GYWN0
b3J5T3BlbkNETSYgc2luZ2xldG9uKCk7CisKKyAgICB2aXJ0dWFsIH5DRE1GYWN0b3J5T3BlbkNE
TSgpID0gZGVmYXVsdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1Qcml2YXRlPiBjcmVhdGVD
RE0oY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUmVmUHRyPENETVByb3h5PiBjcmVhdGVDRE1Q
cm94eShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdXBwb3J0ZWRL
ZXlTeXN0ZW1zKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPENETUZhY3RvcnlPcGVuQ0RNPjsKKyAgICBDRE1GYWN0b3J5T3BlbkNETSgpID0gZGVm
YXVsdDsKK307CisKK2NsYXNzIENETVByaXZhdGVPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETVBy
aXZhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENETVBy
aXZhdGVPcGVuQ0RNKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKSA6IG1fa2V5U3lzdGVtKGtleVN5
c3RlbSkgeyB9OworICAgIHZpcnR1YWwgfkNETVByaXZhdGVPcGVuQ0RNKCkgPSBkZWZhdWx0Owor
CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1D
b25maWd1cmF0aW9uJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRp
b25XaXRoUmVzdHJpY3Rpb25zKGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24sIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZpbmFsCisgICAgeworICAg
ICAgICByZXR1cm4gc3VwcG9ydHNDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIH0K
KyAgICBib29sIHN1cHBvcnRzU2Vzc2lvblR5cGVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1T
ZXNzaW9uVHlwZSYsIGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHNDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9y
dGVkUm9idXN0bmVzc2VzKCkgY29uc3QgZmluYWw7CisgICAgQ0RNUmVxdWlyZW1lbnQgZGlzdGlu
Y3RpdmVJZGVudGlmaWVyc1JlcXVpcmVtZW50KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRp
b24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdCBmaW5hbDsKKyAgICBDRE1SZXF1aXJl
bWVudCBwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBk
aXN0aW5jdGl2ZUlkZW50aWZpZXJzQXJlVW5pcXVlUGVyT3JpZ2luQW5kQ2xlYXJhYmxlKGNvbnN0
IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8Q0RN
SW5zdGFuY2U+IGNyZWF0ZUluc3RhbmNlKCkgZmluYWw7CisgICAgdm9pZCBsb2FkQW5kSW5pdGlh
bGl6ZSgpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNTZXJ2ZXJDZXJ0aWZpY2F0ZXMoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIHN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IFNoYXJlZEJ1ZmZl
ciYpIGNvbnN0IGZpbmFsOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplUmVzcG9u
c2UoY29uc3QgU2hhcmVkQnVmZmVyJikgY29uc3QgZmluYWw7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworcHJpdmF0
ZToKKyAgICBTdHJpbmcgbV9rZXlTeXN0ZW07Cit9OworCitjbGFzcyBDRE1JbnN0YW5jZU9wZW5D
RE0gZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSB7CitwdWJsaWM6CisgICAgQ0RNSW5z
dGFuY2VPcGVuQ0RNKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKTsKKyAgICB2aXJ0dWFsIH5DRE1J
bnN0YW5jZU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBDRE1JbnN0YW5jZQorICAgIElt
cGxlbWVudGF0aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBJbXBsZW1lbnRhdGlvblR5cGU6Ok9wZW5DRE07IH0KKyAgICB2b2lkIGluaXRpYWxpemVXaXRo
Q29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0
aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxvd1BlcnNpc3RlbnRTdGF0ZSwgU3VjY2Vzc0NhbGxiYWNr
JiYpIGZpbmFsOworICAgIHZvaWQgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZl
cj4mJiwgU3VjY2Vzc0NhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgc2V0U3RvcmFnZURpcmVj
dG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fa2V5U3lzdGVtOyB9CisgICAgUmVmUHRyPENETUluc3Rh
bmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOworCisgICAgT3BlbkNETVN5c3RlbSYg
b3BlbkNETVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuICptX29wZW5DRE1TeXN0ZW0uZ2V0KCk7IH07
CisKKyAgICB2b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgZmluYWwKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIENETUluc3RhbmNlUHJveHk6
OnJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCk7CisgICAgICAgIG1fb3BlbkNETVN5c3RlbS5y
ZXNldChudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3BlbkNETTo6VW5pcXVlT3Bl
bkNETVN5c3RlbSBtX29wZW5DRE1TeXN0ZW07CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsK
KworY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0
YW5jZVNlc3Npb25Qcm94eSB7CitwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNE
TShDRE1JbnN0YW5jZU9wZW5DRE0mKTsKKworICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5z
ZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgdXBkYXRlTGlj
ZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgTGlj
ZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5z
ZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2sm
JikgZmluYWw7CisgICAgdm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNz
aW9uQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBT
dHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbiAmJiBtX21lc3NhZ2Ug
JiYgIW1fbWVzc2FnZS0+aXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIHNldENsaWVudChXZWFrUHRy
PENETUluc3RhbmNlU2Vzc2lvbkNsaWVudD4mJiBjbGllbnQpIGZpbmFsIHsgbV9jbGllbnQgPSBX
VEZNb3ZlKGNsaWVudCk7IH0KKyAgICB2b2lkIGNsZWFyQ2xpZW50KCkgZmluYWwgeyBtX2NsaWVu
dC5jbGVhcigpOyB9CisKKyAgICB2b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgZmlu
YWwKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIG1fa2V5
U3RvcmUucmVtb3ZlQWxsS2V5cygpOworICAgICAgICBtX3Nlc3Npb24ucmVzZXQobnVsbHB0cik7
CisgICAgICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpyZWxlYXNlRGVjcnlwdGlvblJlc291
cmNlcygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBPcHRpb25hbDxDRE1JbnN0YW5jZU9wZW5D
RE0mPiBjZG1JbnN0YW5jZU9wZW5DRE0oKSBjb25zdDsKKworICAgIHVzaW5nIE5vdGlmaWNhdGlv
biA9IHZvaWQgKENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OiopKFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+JiYpOworICAgIHVzaW5nIENoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrID0g
RnVuY3Rpb248dm9pZCgpPjsKKyAgICB1c2luZyBTZXNzaW9uQ2hhbmdlZENhbGxiYWNrID0gRnVu
Y3Rpb248dm9pZChib29sLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmKT47CisKKyAgICB2b2lkIGNo
YWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIHZv
aWQga2V5VXBkYXRlZENhbGxiYWNrKEtleUlEVHlwZSYmKTsKKyAgICB2b2lkIGtleXNVcGRhdGVE
b25lQ2FsbGJhY2soKTsKKyAgICB2b2lkIGVycm9yQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4mJik7CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKGNvbnN0IEtl
eUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgc2Vzc2lvbkZhaWx1cmUoKTsKKworICAgIC8vIEZJ
WE1FOiBDaGVjayBhbGwgb3JpZ2luYWwgdXNlcyBvZiB0aGVzZSBhdHRyaWJ1dGVzLgorICAgIFN0
cmluZyBtX3Nlc3Npb25JRDsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworICAgIGJvb2wgbV9k
b2VzS2V5U3RvcmVOZWVkTWVyZ2luZyB7IGZhbHNlIH07CisgICAgSW5pdERhdGEgbV9pbml0RGF0
YTsKKyAgICBPcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcyBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tz
IHsgfTsKKyAgICBPcGVuQ0RNOjpVbmlxdWVPcGVuQ0RNU2Vzc2lvbiBtX3Nlc3Npb247CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9tZXNzYWdlOworICAgIGJvb2wgbV9uZWVkc0luZGl2aWR1
YWxpemF0aW9uIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8Q2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJh
Y2s+IG1fY2hhbGxlbmdlQ2FsbGJhY2tzOworICAgIFZlY3RvcjxTZXNzaW9uQ2hhbmdlZENhbGxi
YWNrPiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzOworICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VT
ZXNzaW9uQ2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DRE1fSU5TVEFOQ0UoV2ViQ29yZTo6Q0RNSW5zdGFuY2VP
cGVuQ0RNLCBXZWJDb3JlOjpDRE1JbnN0YW5jZTo6SW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RN
KTsKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKaW5kZXggZTc3MzJhYjk0ZTdh
Li5jZmU0YzdhYTUxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcApA
QCAtMTIxLDExICsxMjEsMTQgQEAgYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlw
dGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQogICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlJRFZlYzsKICAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQsIGluLmtleUlEU2l6ZUlu
Qnl0ZXMpOwogCi0gICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5KGtleUlEVmVjKTsK
KyAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXlWYWx1ZShrZXlJRFZlYyk7CiAgICAg
aWYgKCFrZXlEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2NyeV9lcnJv
cl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRsZSgpLCBrZXlE
YXRhLT5kYXRhKCksIGtleURhdGEtPnNpemUoKSkpIHsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxWZWN0b3I8dWludDhfdD4+KGtleURhdGEudmFsdWUoKSkpOworICAgIGF1dG8m
IGtleURhdGFWYWx1ZSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5RGF0YS52YWx1ZSgp
KTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRr
ZXkoZ0NyeXB0SGFuZGxlKCksIGtleURhdGFWYWx1ZS5kYXRhKCksIGtleURhdGFWYWx1ZS5zaXpl
KCkpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJv
eHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9y
KGNpcGhlckVycm9yKSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGMxMGE5ZjU4ZmExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorCisjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisKKyNpbmNsdWRlICJDRE1PcGVu
Q0RNLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPG9wZW5fY2RtX2FkYXB0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvQnl0ZU9yZGVyLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRF
Uk4od2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBHU1Rf
Q0FUX0RFRkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBOT1RFOiBZb3VUdWJlIDIwMTkgRU1FIGNvbmZvcm1hbmNl
IHRlc3RzIGV4cGVjdCB0aGlzIHRvIGJlID49NXMuCitjb25zdCBXVEY6OlNlY29uZHMgc19saWNl
bnNlS2V5UmVzcG9uc2VUaW1lb3V0ID0gV1RGOjpTZWNvbmRzKDYpOworCitPcGVuQ0RNOjpTaGFy
ZWRPcGVuQ0RNU2Vzc2lvbiBDRE1Qcm94eU9wZW5DRE06OmdldERlY3J5cHRpb25TZXNzaW9uKGNv
bnN0IERlY3J5cHRpb25Db250ZXh0JiBpbikgY29uc3QKK3sKKyAgICBhdXRvIG1hcHBlZEtleUlE
ID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW4ua2V5SURCdWZmZXIsIEdTVF9NQVBfUkVBRCk7
CisgICAgaWYgKCFtYXBwZWRLZXlJRCkgeworICAgICAgICBHU1RfRVJST1IoIkZhaWxlZCB0byBt
YXAga2V5IElEIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBhdXRvIGtleUlEID0gbWFwcGVkS2V5SUQtPmNyZWF0ZVZlY3RvcigpOworCisgICAgYXV0byBr
ZXlIYW5kbGUgPSBnZXRPcldhaXRGb3JLZXlIYW5kbGUoa2V5SUQpOworICAgIGlmICgha2V5SGFu
ZGxlLmhhc1ZhbHVlKCkgfHwgIWtleUhhbmRsZS52YWx1ZSgpLT5pc1N0YXR1c0N1cnJlbnRseVZh
bGlkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgS2V5SGFuZGxlVmFsdWVWYXJp
YW50JiBrZXlEYXRhID0ga2V5SGFuZGxlLnZhbHVlKCktPnZhbHVlKCk7CisgICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8T3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24+KGtleURh
dGEpKTsKKworICAgIGF1dG8mIGtleVZhbHVlID0gV1RGOjpnZXQ8T3BlbkNETTo6U2hhcmVkT3Bl
bkNETVNlc3Npb24+KGtleURhdGEpOworCisgICAgaWYgKCFrZXlWYWx1ZSkgeworICAgICAgICBh
dXRvIG5ld0tleVZhbHVlID0gT3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Npb24ob3Bl
bmNkbV9nZXRfc3lzdGVtX3Nlc3Npb24oJnN0YXRpY19jYXN0PGNvbnN0IENETUluc3RhbmNlT3Bl
bkNETSo+KGluc3RhbmNlKCkpLT5vcGVuQ0RNU3lzdGVtKCksCisgICAgICAgICAgICBrZXlJRC5k
YXRhKCksIGtleUlELnNpemUoKSwgc19saWNlbnNlS2V5UmVzcG9uc2VUaW1lb3V0Lm1pbGxpc2Vj
b25kc0FzPHVpbnQzMl90PigpKSk7CisgICAgICAgIEFTU0VSVChuZXdLZXlWYWx1ZSk7CisgICAg
ICAgIGtleUhhbmRsZS52YWx1ZSgpLT50YWtlVmFsdWVJZkRpZmZlcmVudChXVEZNb3ZlKG5ld0tl
eVZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGtleVZhbHVlOworfQorCitib29sIENETVBy
b3h5T3BlbkNETTo6ZGVjcnlwdChDRE1Qcm94eU9wZW5DRE06OkRlY3J5cHRpb25Db250ZXh0JiBp
bnB1dCkKK3sKKyAgICBPcGVuQ0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBzZXNzaW9uID0gZ2V0
RGVjcnlwdGlvblNlc3Npb24oaW5wdXQpOworICAgIGlmICghc2Vzc2lvbikgeworICAgICAgICBH
U1RfRVJST1IoInRoZXJlIGlzIG5vIHZhbGlkIHNlc3Npb24gdG8gZGVjcnlwdCBmb3IgdGhlIHBy
b3ZpZGVkIGtleSBJRCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NU
X1RSQUNFKCJkZWNyeXB0aW5nIik7CisgICAgLy8gRGVjcnlwdCBjaXBoZXIuCisgICAgT3BlbkNE
TUVycm9yIGVycm9yQ29kZSA9IG9wZW5jZG1fZ3N0cmVhbWVyX3Nlc3Npb25fZGVjcnlwdChzZXNz
aW9uLmdldCgpLCBpbnB1dC5kYXRhQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1
dC5udW1TdWJzYW1wbGVzLAorICAgICAgICBpbnB1dC5pdkJ1ZmZlciwgaW5wdXQua2V5SURCdWZm
ZXIsIDApOworICAgIGlmIChlcnJvckNvZGUpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJkZWNyeXB0
aW9uIGZhaWxlZCwgZXJyb3IgY29kZSAlWCIsIGVycm9yQ29kZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5D
RE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL0NETVByb3h5T3BlbkNETS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjJiZmIwOGJkZGU4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RN
LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VT
ZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0RNT3BlbkNETS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckVN
RVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9ySGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgdGhl
IHRocmVhZC1zYWZlIEFQSSB0aGF0IGRlY29kZSB0aHJlYWRzIHNob3VsZCB1c2UgdG8gbWFrZSB1
c2Ugb2YgYSBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlPcGVuQ0RNIGZpbmFs
IDogcHVibGljIENETVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlPcGVuQ0RN
LCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworcHVibGljOgorICAgIENE
TVByb3h5T3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKKyAgICAgICAgOiBtX2tleVN5
c3RlbShrZXlTeXN0ZW0pIHsgfQorICAgIHZpcnR1YWwgfkNETVByb3h5T3BlbkNETSgpID0gZGVm
YXVsdDsKKworICAgIHN0cnVjdCBEZWNyeXB0aW9uQ29udGV4dCB7CisgICAgICAgIEdzdEJ1ZmZl
cioga2V5SURCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciogaXZCdWZmZXI7CisgICAgICAgIEdz
dEJ1ZmZlciogZGF0YUJ1ZmZlcjsKKyAgICAgICAgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVy
OworICAgICAgICBzaXplX3QgbnVtU3Vic2FtcGxlczsKKyAgICB9OworCisgICAgYm9vbCBkZWNy
eXB0KERlY3J5cHRpb25Db250ZXh0Jik7CisgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSB7
IHJldHVybiBtX2tleVN5c3RlbTsgfQorCitwcml2YXRlOgorICAgIE9wZW5DRE06OlNoYXJlZE9w
ZW5DRE1TZXNzaW9uIGdldERlY3J5cHRpb25TZXNzaW9uKGNvbnN0IERlY3J5cHRpb25Db250ZXh0
JikgY29uc3Q7CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9Q
RU5DRE0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAppbmRleCA4
YTkyY2EzYjFlYTguLjIxZTJkNTVlZGZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1l
ckVNRVV0aWxpdGllcy5oCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKICNkZWZpbmUgV0VCQ09SRV9HU1RSRUFNRVJfRU1FX1VUSUxJVElFU19DTEVB
UktFWV9VVUlEICIxMDc3ZWZlYy1jMGIyLTRkMDItYWNlMy0zYzFlNTJlMmZiNGIiCisjaWYgRU5B
QkxFKE9QRU5DRE0pCisjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfV0lE
RVZJTkVfVVVJRCAiZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIgorI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEluaXREYXRhIHsKQEAgLTQ4LDYgKzUxLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgbV9wYXlsb2FkID0gbWFwcGVkSW5pdERhdGEtPmNyZWF0ZVNo
YXJlZEJ1ZmZlcigpOwogICAgIH0KIAorICAgIEluaXREYXRhKGNvbnN0IFN0cmluZyYgc3lzdGVt
SWQsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgcGF5bG9hZCkKKyAgICAgICAgOiBtX3N5c3RlbUlk
KHN5c3RlbUlkKQorICAgICAgICAsIG1fcGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQorICAgIHsK
KyAgICB9CisKICAgICB2b2lkIGFwcGVuZChJbml0RGF0YSYmIGluaXREYXRhKQogICAgIHsKICAg
ICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUgY29uZnVzaW9uIGhlcmUgYWJvdXQgaG93IHRv
IGRldGVjdCB0aGUKQEAgLTY0LDcgKzczLDcgQEAgcHVibGljOgogICAgICAgICBtX3BheWxvYWQt
PmFwcGVuZCgqaW5pdERhdGEucGF5bG9hZCgpKTsKICAgICB9CiAKLSAgICBjb25zdCBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2FkOyB9CisgICAg
Y29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHBheWxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Bh
eWxvYWQ7IH0KICAgICBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKCkgY29uc3QgeyByZXR1cm4gbV9z
eXN0ZW1JZDsgfQogICAgIFN0cmluZyBwYXlsb2FkQ29udGFpbmVyVHlwZSgpIGNvbnN0CiAgICAg
ewpAQCAtMTE1LDE3ICsxMjQsMzMgQEAgY2xhc3MgR1N0cmVhbWVyRU1FVXRpbGl0aWVzIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlVVUlEID0g
V0VCQ09SRV9HU1RSRUFNRVJfRU1FX1VUSUxJVElFU19DTEVBUktFWV9VVUlEOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgY2hhciBjb25zdCogc19DbGVhcktleUtleVN5c3RlbSA9ICJvcmcudzMuY2xl
YXJrZXkiOworI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBj
b25zdCogc19XaWRldmluZVVVSUQgPSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVfVVRJTElUSUVTX1dJ
REVWSU5FX1VVSUQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX1dpZGV2aW5l
S2V5U3lzdGVtID0gImNvbS53aWRldmluZS5hbHBoYSI7CisjZW5kaWYKIAogICAgIHN0YXRpYyBi
b29sIGlzQ2xlYXJLZXlLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAgewog
ICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShrZXlTeXN0ZW0sIHNfQ2xlYXJL
ZXlLZXlTeXN0ZW0pOwogICAgIH0KIAorI2lmIEVOQUJMRShPUEVOQ0RNKQorICAgIHN0YXRpYyBi
b29sIGlzV2lkZXZpbmVLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisgICAgewor
ICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShrZXlTeXN0ZW0sIHNfV2lkZXZp
bmVLZXlTeXN0ZW0pOworICAgIH0KKyNlbmRpZgorCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtl
eVN5c3RlbVRvVXVpZChjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKICAgICB7CiAgICAgICAgIGlm
IChpc0NsZWFyS2V5S2V5U3lzdGVtKGtleVN5c3RlbSkpCiAgICAgICAgICAgICByZXR1cm4gc19D
bGVhcktleVVVSUQ7CiAKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICAgICAgaWYgKGlzV2lkZXZp
bmVLZXlTeXN0ZW0oa2V5U3lzdGVtKSkKKyAgICAgICAgICAgIHJldHVybiBzX1dpZGV2aW5lVVVJ
RDsKKyNlbmRpZgorCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVh
cktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggODZiN2M2NmZhZDRmLi41MTAzZDRjYjky
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlIHsKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmpl
Y3QqKTsKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogc3RhdGljIGJvb2wgY2RtUHJveHlBdHRhY2hlZChX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RN
UHJveHk+Jik7CiBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNh
bXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwog
CkBAIC04Myw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVj
cnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAgICAgICAgICJ3ZWJr
aXRjbGVhcmtleSIsIDAsICJDbGVhcktleSBkZWNyeXB0b3IiKTsKIAogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9DTEFTUyhrbGFzcyk7Ci0gICAgY2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVt
SWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OnNfQ2xlYXJLZXlVVUlEOworICAgIGNlbmNDbGFz
cy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1NUX0RFQlVHX0ZVTkNQVFIocHJvdGVjdGlvblN5c3Rl
bUlkKTsKICAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BU
UihjZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdf
RlVOQ1BUUihkZWNyeXB0KTsKIApAQCAtMTA2LDYgKzEwNywxMSBAQCBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNT
LCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlv
blN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKQoreworICAgIHJl
dHVybiBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OnNfQ2xlYXJLZXlVVUlEOworfQorCiBzdGF0aWMg
Ym9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYsIGNvbnN0IFJlZlB0cjxDRE1Qcm94eT4mIGNkbVByb3h5KQogewogICAgIFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBU
X0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCmluZGV4IDQ3YjU2MGY3MzkyMC4uMTVlMTNhYmZiYWQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTEzNCwxNCArMTM0LDE0IEBAIHN0YXRpYyBHc3RD
YXBzKiB0cmFuc2Zvcm1DYXBzKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdFBhZERpcmVjdGlv
biBkaXJlY3Rpb24sCiAgICAgICAgICAgICAvLyBjYW4gY2F1c2UgY2FwcyBuZWdvdGlhdGlvbiBm
YWlsdXJlcyB3aXRoIGFkYXB0aXZlIGJpdHJhdGUgc3RyZWFtcy4KICAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyhvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwgImJhc2UtcHJv
ZmlsZSIsICJjb2RlY19kYXRhIiwgImhlaWdodCIsICJmcmFtZXJhdGUiLCAibGV2ZWwiLCAicGl4
ZWwtYXNwZWN0LXJhdGlvIiwgInByb2ZpbGUiLCAicmF0ZSIsICJ3aWR0aCIsIG51bGxwdHIpOwog
Ci0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwg
InByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZCwKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KG91dGdvaW5nU3RydWN0dXJlLmdl
dCgpLCAicHJvdGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBrbGFzcy0+cHJvdGVjdGlv
blN5c3RlbUlkKHNlbGYpLAogICAgICAgICAgICAgICAgICJvcmlnaW5hbC1tZWRpYS10eXBlIiwg
R19UWVBFX1NUUklORywgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShpbmNvbWluZ1N0cnVjdHVyZSks
IG51bGxwdHIpOwogCiAgICAgICAgICAgICAvLyBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklFRF9T
WVNURU1fSUQgd2FzIGFkZGVkIGluIHRoZSBHU3RyZWFtZXIKICAgICAgICAgICAgIC8vIGRldmVs
b3BlbWVudCBnaXQgbWFzdGVyIHdoaWNoIHdpbGwgc2hpcCBhcyB2ZXJzaW9uIDEuMTYuMC4KICAg
ICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCks
CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTUsIDApCi0gICAgICAgICAgICAgICAgIWdfc3Ry
Y21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkLCBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklF
RF9TWVNURU1fSUQpID8gImFwcGxpY2F0aW9uL3gtd2VibS1lbmMiIDoKKyAgICAgICAgICAgICAg
ICAhZ19zdHJjbXAwKGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQoc2VsZiksIEdTVF9QUk9URUNU
SU9OX1VOU1BFQ0lGSUVEX1NZU1RFTV9JRCkgPyAiYXBwbGljYXRpb24veC13ZWJtLWVuYyIgOgog
I2VuZGlmCiAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtY2VuYyIpOwogICAgICAgICB9
CkBAIC0xNzcsNiArMTc3LDEyIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwog
CisgICAgR3N0UHJvdGVjdGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxHc3RQcm90ZWN0aW9uTWV0YSo+KGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZm
ZXIpKTsKKyAgICBpZiAoIXByb3RlY3Rpb25NZXRhKSB7CisgICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1Qoc2VsZiwgIkJ1ZmZlciAlcCBkb2VzIG5vdCBjb250YWluIHByb3RlY3Rpb24gbWV0YSwgbm90
IGRlY3J5cHRpbmciLCBidWZmZXIpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAg
fQorCiAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKIAog
ICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8gYmUgbmVnb3RpYXRlZCBiZWZvcmUgd2Ug
Y2FuIGJlZ2luIGRlY3J5cHRpb24uCkBAIC0xOTEsMTIgKzE5Nyw2IEBAIHN0YXRpYyBHc3RGbG93
UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVy
KiBidWZmZXIpCiAgICAgICAgIH0KICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RN
IG5vdyBhdmFpbGFibGUgd2l0aCBhZGRyZXNzICVwIiwgcHJpdi0+Y2RtUHJveHkuZ2V0KCkpOwog
ICAgIH0KLQotICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21l
dGEoYnVmZmVyKSk7Ci0gICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24gbWV0YWRhdGEgZnJv
bSBidWZmZXIgJXAiLCBidWZmZXIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBP
UlRFRDsKLSAgICB9CiAgICAgYXV0byByZW1vdmVQcm90ZWN0aW9uTWV0YU9uUmV0dXJuID0gbWFr
ZVNjb3BlRXhpdChbYnVmZmVyLCBwcm90ZWN0aW9uTWV0YV0gewogICAgICAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKaW5kZXggYmIxMTY2ZDM4
MDMzLi5hMDQ2NWZmNTNkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJl
YW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC01NCw3ICs1
NCw3IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCB7CiBzdHJ1
Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFz
ZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCi0gICAgY29uc3QgY2hhciogcHJvdGVjdGlv
blN5c3RlbUlkOworICAgIGNvbnN0IGNoYXIqICgqcHJvdGVjdGlvblN5c3RlbUlkKShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CiAgICAgYm9vbCAoKmNkbVByb3h5QXR0YWNo
ZWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBjb25zdCBSZWZQdHI8V2Vi
Q29yZTo6Q0RNUHJveHk+Jik7CiAgICAgYm9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlE
QnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlc0NvdW50LCBHc3RC
dWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDBjZDdjMTI2YjdlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVu
Q0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyogR1N0cmVhbWVy
IE9wZW5DRE0gY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMzNSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUg
IkNETU9wZW5DRE0uaCIKKyNpbmNsdWRlICJDRE1Qcm94eU9wZW5DRE0uaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNk
ZWZpbmUgV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1f
REVDUllQVCwgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUpKQorc3RydWN0IF9XZWJL
aXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSB7CisgICAgUmVmUHRyPENETVByb3h5T3BlbkNE
TT4gY2RtUHJveHk7Cit9OworCitzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0
aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqKTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCosIGNvbnN0IFJlZlB0cjxDRE1Qcm94eT4mKTsKK3N0YXRp
YyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1
ZmZlciogaXYsIEdzdEJ1ZmZlcioga2V5aWQsIEdzdEJ1ZmZlciogc2FtcGxlLCB1bnNpZ25lZCBz
dWJTYW1wbGVzQ291bnQsCisgICAgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKKworR1NUX0RFQlVH
X0NBVEVHT1JZKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjZW5jRW5jcnlwdGlvbk1lZGlhVHlwZXNbXSA9IHsgInZp
ZGVvL21wNCIsICJhdWRpby9tcDQiLCAidmlkZW8veC1oMjY0IiwgImF1ZGlvL21wZWciLCBudWxs
cHRyIH07CitzdGF0aWMgY29uc3QgY2hhciogd2VibUVuY3J5cHRpb25NZWRpYVR5cGVzW10gPSB7
ICJ2aWRlby93ZWJtIiwgImF1ZGlvL3dlYm0iLCAidmlkZW8veC12cDkiLCBudWxscHRyIH07CisK
K3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFE
X1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAor
ICAgIEdTVF9TVEFUSUNfQ0FQUygKKyAgICAgICAgInZpZGVvL3dlYm07ICIKKyAgICAgICAgImF1
ZGlvL3dlYm07ICIKKyAgICAgICAgInZpZGVvL21wNDsgIgorICAgICAgICAiYXVkaW8vbXA0OyAi
CisgICAgICAgICJhdWRpby9tcGVnOyAiCisgICAgICAgICJ2aWRlby94LWgyNjQ7ICIKKyAgICAg
ICAgInZpZGVvL3gtdnA5OyAiKSk7CisKKyNkZWZpbmUgd2Via2l0X21lZGlhX29wZW5jZG1fZGVj
cnlwdF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFKFdlYktpdE1lZGlh
T3BlbkNETURlY3J5cHQsIHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHQsIFdFQktJVF9UWVBF
X01FRElBX0NFTkNfREVDUllQVCk7CisKK3N0YXRpYyBHUmVmUHRyPEdzdENhcHM+IGNyZWF0ZVNp
bmtQYWRUZW1wbGF0ZUNhcHMoKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVN5
c3RlbSA6IENETUZhY3RvcnlPcGVuQ0RNOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRLZXlTeXN0ZW1z
KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGNlbmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tp
XTsgKytpKSB7CisgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlKGNhcHMuZ2V0
KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LWNlbmMiLCAib3JpZ2luYWwtbWVk
aWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgY2VuY0VuY3J5cHRpb25N
ZWRpYVR5cGVzW2ldLCAicHJvdGVjdGlvbi1zeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBHU3RyZWFt
ZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChrZXlTeXN0ZW0pLCBudWxscHRyKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKEdTdHJlYW1lckVNRVV0aWxpdGllczo6aXNXaWRldmluZUtl
eVN5c3RlbShrZXlTeXN0ZW0pKSB7CisgICAgICAgICAgICAvLyBObyBrZXkgc3lzdGVtIFVVSUQg
Zm9yIHdlYm0uIEl0J3Mgbm90IHNldCBpbiBjYXBzIGZvciBpdCBhbmQgaXQncyBqdXN0IFdpZGV2
aW5lLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBl
c1tpXTsgKytpKSB7CisgICAgICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShj
YXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC13ZWJtLWVuYyIsICJv
cmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAg
d2VibUVuY3J5cHRpb25NZWRpYVR5cGVzW2ldLCBudWxscHRyKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUcoInNpbmsgcGFkIHRlbXBsYXRlIGNhcHMg
JSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworCisgICAgcmV0dXJuIGNhcHM7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJL
aXRNZWRpYU9wZW5DRE1EZWNyeXB0Q2xhc3MqIGtsYXNzKQoreworICAgIEdTVF9ERUJVR19DQVRF
R09SWV9JTklUKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5LCAid2Via2l0
b3BlbmNkbSIsIDAsICJPcGVuQ0RNIGRlY3J5cHQiKTsKKworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSBmaW5hbGl6ZTsKKworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0g
R1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gZ3N0U2lua1Bh
ZFRlbXBsYXRlQ2FwcyA9IGNyZWF0ZVNpbmtQYWRUZW1wbGF0ZUNhcHMoKTsKKyAgICBnc3RfZWxl
bWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3BhZF90ZW1wbGF0
ZV9uZXcoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBnc3RTaW5rUGFkVGVt
cGxhdGVDYXBzLmdldCgpKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0
ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUp
KTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoZWxlbWVudENs
YXNzLCAiRGVjcnlwdCBlbmNyeXB0ZWQgY29udGVudCB1c2luZyBPcGVuQ0RNIiwgR1NUX0VMRU1F
TlRfRkFDVE9SWV9LTEFTU19ERUNSWVBUT1IsCisgICAgICAgICJEZWNyeXB0cyBlbmNyeXB0ZWQg
bWVkaWEgdXNpbmcgT3BlbkNETS4iLCAiWGFiaWVyIFJvZHLDrWd1ZXogQ2FsdmFyIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPiIpOworCisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dENsYXNzKiBjb21tb25DbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xh
c3MpOworICAgIGNvbW1vbkNsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBHU1RfREVCVUdfRlVO
Q1BUUihwcm90ZWN0aW9uU3lzdGVtSWQpOworICAgIGNvbW1vbkNsYXNzLT5jZG1Qcm94eUF0dGFj
aGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CisgICAgY29tbW9uQ2xh
c3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUihkZWNyeXB0KTsKKworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQ
cml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRf
aW5pdChXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlh
T3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQ
VF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBzZWxmLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0KiBzZWxmID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChvYmplY3QpOworICAgIFdl
YktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKKyAgICBw
cml2LT5+V2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUoKTsKKworICAgIEdTVF9DQUxM
X1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKK30KKworc3RhdGlj
IGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRf
TUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsKKyAgICBBU1NFUlQocHJpdi0+Y2RtUHJveHkp
OworICAgIHJldHVybiBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChwcml2
LT5jZG1Qcm94eS0+a2V5U3lzdGVtKCkpOworfQorCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFj
aGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIGNvbnN0IFJlZlB0
cjxDRE1Qcm94eT4mIGNkbVByb3h5KQoreworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9HRVRfUFJJVkFURShX
RUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsKKyAgICBwcml2LT5jZG1Qcm94eSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlPcGVuQ0RNKj4oY2RtUHJveHkuZ2V0KCkpOworICAg
IHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KKworc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBH
c3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2Ft
cGxlQ291bnQsCisgICAgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKQoreworICAgIFdlYktp
dE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX09QRU5DRE1f
REVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfT1BFTkNETV9ERUNSWVBUKHNlbGYpKTsK
KworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHN1YnNhbXBsZUNvdW50ICYmICFzdWJzYW1wbGVzQnVmZmVyKSB7Cisg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgpIHN1YnNhbXBs
ZXMgcGFyYW1ldGVyIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0aW9uQ29u
dGV4dCBjb250ZXh0OworICAgIGNvbnRleHQua2V5SURCdWZmZXIgPSBrZXlJREJ1ZmZlcjsKKyAg
ICBjb250ZXh0Lml2QnVmZmVyID0gaXZCdWZmZXI7CisgICAgY29udGV4dC5kYXRhQnVmZmVyID0g
YnVmZmVyOworICAgIGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAg
IGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IHN1YnNhbXBsZUNvdW50ID8gc3Vic2FtcGxlc0J1
ZmZlciA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmRlY3J5cHQoY29u
dGV4dCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUo
T1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5lODMwYTcxN2NlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNy
eXB0b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU0IEBACisvKiBHU3RyZWFtZXIgT3BlbkNETSBj
b21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkg
JiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJXZWJLaXRD
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQgICAgICAgICAgKHdlYmtp
dF9tZWRpYV9vcGVuY2RtX2RlY3J5cHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElB
X09QRU5DRE1fREVDUllQVChvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVF9DTEFT
UyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVD
UllQVCkpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfQ0xBU1Mob2Jq
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfT1BF
TkNETV9ERUNSWVBUKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5
cHQgICAgICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlIFdl
YktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlOworCitHVHlwZSB3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2dldF90eXBlKHZvaWQpOworCitzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNE
TURlY3J5cHQgeworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgcGFyZW50
OworCisgICAgV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUqIHByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyB7CisgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHBhcmVudENsYXNzOworfTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RN
KSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RN
LmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVlZDM4M2NjOTlmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL2NtYWtlL0ZpbmRPcGVuQ0RNLmNtYWtlCkBAIC0wLDAgKzEsNjkgQEAKKyMucnN0Cisj
IEZpbmRPcGVuQ0RNCisjIC0tLS0tLS0tLS0tLS0KKyMKKyMgRmluZHMgdGhlIE9wZW5DRE0gbGli
cmFyeS4KKyMKKyMgVGhpcyB3aWxsIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMK
KyMgYGBPUEVOQ0RNX0ZPVU5EYGAKKyMgICAgIFRydWUgaWYgdGhlIHJlcXVlc3RlZCB2ZXJzaW9u
IG9mIGdjcnlwdCB3YXMgZm91bmQKKyMgYGBPUEVOQ0RNX1ZFUlNJT05gYAorIyAgICAgVGhlIHZl
cnNpb24gb2YgZ2NyeXB0IHRoYXQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9JTkNMVURFX0RJUlNg
YAorIyAgICAgVGhlIGdjcnlwdCBpbmNsdWRlIGRpcmVjdG9yaWVzCisjIGBgT1BFTkNETV9MSUJS
QVJJRVNgYAorIyAgICAgVGhlIGxpbmtlciBsaWJyYXJpZXMgbmVlZGVkIHRvIHVzZSB0aGUgZ2Ny
eXB0IGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbAorIyBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyMgICAgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5E
IEFOWSBFWFBSRVNTIE9SCisjIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyMg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULAorIyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyMgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZmlu
ZF9saWJyYXJ5KE9QRU5DRE1fTElCUkFSWQorICBOQU1FUyBsaWJvY2RtLnNvCispCitmaW5kX3Bh
dGgoT1BFTkNETV9JTkNMVURFX0RJUgorICBOQU1FUyBvcGVuX2NkbS5oCisgIFBBVEhfU1VGRklY
RVMgIldQRUZyYW1ld29yay9vY2RtLyIKKykKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0
YW5kYXJkQXJncykKKworZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKE9wZW5jZG0K
KyAgICBGT1VORF9WQVIgT1BFTkNETV9GT1VORAorICAgIFJFUVVJUkVEX1ZBUlMgT1BFTkNETV9M
SUJSQVJZIE9QRU5DRE1fSU5DTFVERV9ESVIKKykKK2lmIChPUEVOQ0RNX0ZPVU5EKQorICAgIHNl
dChPUEVOQ0RNX0xJQlJBUklFUyAke09QRU5DRE1fTElCUkFSWX0pCisgICAgc2V0KE9QRU5DRE1f
SU5DTFVERV9ESVJTICR7T1BFTkNETV9JTkNMVURFX0RJUn0pCitlbmRpZiAoKQorCittYXJrX2Fz
X2FkdmFuY2VkKE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElSKQorCitpbmNsdWRl
KEZlYXR1cmVTdW1tYXJ5KQorc2V0X3BhY2thZ2VfcHJvcGVydGllcyhPcGVuY2RtIFBST1BFUlRJ
RVMKKyAgICBERVNDUklQVElPTiAiT3BlbkNETSBEUk0gZnJhbWV3b3JrIgorICAgIFVSTCAiaHR0
cHM6Ly9naXRodWIuY29tL3Jka2NlbnRyYWwvVGh1bmRlciIKKykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UK
aW5kZXggY2Q4OTM0YjIwMDNlLi5jYTliMGM3NjIyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBA
IC0xODcsNiArMTg3LDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X01PVVNFX0NVUlNPUl9TQ0FMRSBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIFBS
SVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09S
S19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyBQUklWQVRFICR7RU5B
QkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFU30pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfT1BFTkNETSBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQUklWQVRFIE9OKQogV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BPSU5URVJfTE9DSyBQUklWQVRF
IE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09VUkNFX0xP
QURfU1RBVElTVElDUyBQUklWQVRFIE9OKQpAQCAtNDI4LDYgKzQyOSwxMCBAQCBpZiAoVVNFX1NZ
U1RFTUQpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfRU5DUllQVEVEX01F
RElBIEFORCBFTkFCTEVfT1BFTkNETSkKKyAgZmluZF9wYWNrYWdlKE9wZW5DRE0gUkVRVUlSRUQp
CitlbmRpZiAoKQorCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODIyNDcKIGlmIChFTkFCTEVEX0NPTVBJTEVSX1NBTklUSVpFUlMpCiAgICAgc2V0KEVOQUJMRV9J
TlRST1NQRUNUSU9OIE9GRikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNt
YWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggYjhhZGI4NzQ1NGM4Li43
NGNmODdkZjNjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC00NSw2ICs0NSw3IEBAIGluY2x1
ZGUoR1N0cmVhbWVyRGVmaW5pdGlvbnMpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRVNTSUJJTElUWSBQVUJMSUMgT04pCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRU5DUllQVEVEX01FRElBIFBVQkxJ
QyAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCRFJJVkVSIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9XRUJfQ1JZUFRPIFBVQkxJQyBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9YU0xUIFBVQkxJQyBPTikKQEAgLTE5
OCw2ICsxOTksMTAgQEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQog
CitpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5DRE0pCisgIGZpbmRf
cGFja2FnZShPcGVuQ0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogYWRkX2RlZmluaXRpb25zKC1E
QlVJTERJTkdfV1BFX189MSkKIGFkZF9kZWZpbml0aW9ucygtREdFVFRFWFRfUEFDS0FHRT0iV1BF
IikKIGFkZF9kZWZpbml0aW9ucygtREpTQ19HTElCX0FQSV9FTkFCTEVEKQpkaWZmIC0tZ2l0IGEv
U291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZl
YXR1cmVzLmNtYWtlCmluZGV4IDUzZWFhNzZhYTYyNi4uNGI2YjQ1ODI1ZTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xODMsNiArMTgzLDcgQEAgbWFjcm8oV0VCS0lUX09QVElP
Tl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTkVUV09SS19DQUNIRV9T
VEFMRV9XSElMRV9SRVZBTElEQVRFICJUb29nbGUgbmV0d29yayBjYWNoZSBzdGFsZS13aGlsZS1y
ZXZhbGlkYXRlIGNhY2hpbmcgc3RyYXRlZ3kiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9OT1RJRklDQVRJT05TICJUb2dnbGUgTm90aWZpY2F0aW9ucyBzdXBw
b3J0IiBQUklWQVRFIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9PRkZTQ1JF
RU5fQ0FOVkFTICJUb2dnbGUgT2Zmc2NyZWVuQ2FudmFzIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQor
ICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9PUEVOQ0RNICJUb2dnbGUgRU1FIFYzIE9w
ZW5DRE0gc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX09SSUVOVEFUSU9OX0VWRU5UUyAiVG9nZ2xlIE9yaWVudGF0aW9uIEV2ZW50cyBzdXBwb3J0
IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfT1ZFUkZMT1df
U0NST0xMSU5HX1RPVUNIICJUb2dnbGUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nIHN1cHBvcnQiIFBS
SVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9QQVlNRU5UX1JFUVVF
U1QgIlRvZ2dsZSBQYXltZW50IFJlcXVlc3Qgc3VwcG9ydCIgUFJJVkFURSBPRkYpCkBAIC0yNTUs
NiArMjU2LDcgQEAgbWFjcm8oV0VCS0lUX09QVElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9O
X0RFUEVORChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUIEVOQUJMRV9WSURFTykKICAgICBX
RUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU09VUkNFIEVOQUJMRV9WSURFTykKICAg
ICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTUVESUFfU1RSRUFNIEVOQUJMRV9WSURFTykK
KyAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfT1BFTkNETSBFTkFCTEVfRU5DUllQVEVE
X01FRElBKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJ
T05fTU9ERSBFTkFCTEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1ZJ
REVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOIEVOQUJMRV9WSURFTykKICAgICBXRUJLSVRfT1BU
SU9OX0RFUEVORChFTkFCTEVfVE9VQ0hfU0xJREVSIEVOQUJMRV9UT1VDSF9FVkVOVFMpCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjY2MjQ0NWNh
OWZhLi5lNTQwY2I0ZGE1MmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3Vl
eiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdW0VN
RV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCB0byBidWlsZCBPcGVu
Q0RNIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGVyZSBpcyBhbgorICAgICAgICBvcHQgaW4gZW52
IHZhciB0byBnZXQgSkhCdWlsZCBidWlsZGluZyBUaHVuZGVyIGl0cyBXaWRldmluZQorICAgICAg
ICBkZXBlbmRlbmNpZXMuIFdlIGFsc28gaW5jbHVkZSBhIGNvdXBsZSBvZiBHU3RyZWFtZXIgcGF0
Y2hlcyBuZWVkZWQKKyAgICAgICAgdG8gZ2V0IGtleSBJRHMgaW4gdGhlIGRlY3J5cHRvcnMuCisK
KyAgICAgICAgV2lkZXZpbmUgaXMgb2J2aW91c2x5IHByb3ByaWV0YXJ5IGFuZCBhcyB5b3UgbmVl
ZCB0byBiZSBsaWNlbnNlZAorICAgICAgICB0byBhY2Nlc3MgaXQsIHlvdSBuZWVkIGNyZWRlbnRp
YWxzIHRvIGJ1aWxkIGl0LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtOgorICAgICAgICAqIGdzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXM6CisgICAgICAgICog
Z3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtYmFkLTAwMDYtbXNzZGVtdXgtcGFyc2UtcHJv
dGVjdGlvbi1kYXRhLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBnc3RyZWFtZXIvcGF0Y2hlcy9n
c3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRl
ZC1hLWRlZmF1bHQta2lkLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBndGsvaW5zdGFsbC1kZXBl
bmRlbmNpZXM6CisgICAgICAgICogamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5OgorICAgICAg
ICAoaW5pdCk6CisgICAgICAgICogd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzOgorCiAyMDIwLTA3
LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGxpdCBjb2xv
ciBjb252ZXJzaW9uIGZ1bmN0aW9ucyBvdXQgb2YgQ29sb3JVdGlsaXRpZXMuaC9jcHAgaW50byB0
aGVpciBvd24gZmlsZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRl
eCA0MDQ3YmZiZDRhZWUuLmQ0ZWRiOGQxM2M3YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbQpAQCAtMTM1LDYgKzEzNSw3IEBAIG15ICgKICAgICAkbmV0d29ya0NhY2hl
U3RhbGVXaGlsZVJldmFsaWRhdGVTdXBwb3J0LAogICAgICRub3RpZmljYXRpb25zU3VwcG9ydCwK
ICAgICAkb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydCwKKyAgICAkb3BlbkNETVN1cHBvcnQsCiAgICAg
JG9yaWVudGF0aW9uRXZlbnRzU3VwcG9ydCwKICAgICAkb3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFN1
cHBvcnQsCiAgICAgJHBheW1lbnRSZXF1ZXN0U3VwcG9ydCwKQEAgLTQ0OCw2ICs0NDksOSBAQCBt
eSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gIm9mZnNjcmVlbi1jYW52YXMiLCBkZXNj
ID0+ICJUb2dnbGUgT2Zmc2NyZWVuQ2FudmFzIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyIsIHZhbHVlID0+IFwkb2Zmc2NyZWVuQ2FudmFzU3VwcG9y
dCB9LAogCisgICAgeyBvcHRpb24gPT4gIm9wZW5jZG0iLCBkZXNjID0+ICJUb2dnbGUgT3BlbkNE
TSBzdXBwb3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX09QRU5DRE0iLCB2YWx1ZSA9PiBc
JG9wZW5DRE1TdXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9PiAib3JpZW50YXRpb24tZXZlbnRz
IiwgZGVzYyA9PiAiVG9nZ2xlIE9yaWVudGF0aW9uIEV2ZW50cyBzdXBwb3J0IiwKICAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyIsIHZhbHVlID0+IFwkb3JpZW50YXRp
b25FdmVudHNTdXBwb3J0IH0sCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxk
Lm1vZHVsZXMgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCmluZGV4IDk1NmYxMjZk
NWI3NS4uMGMxYTg5NGI1YzgyIDEwMDY0NAotLS0gYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5t
b2R1bGVzCisrKyBiL1Rvb2xzL2dzdHJlYW1lci9qaGJ1aWxkLm1vZHVsZXMKQEAgLTExLDYgKzEx
LDEyIEBACiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdC1wbHVnaW5zLWJhZCIvPgogICAgICAgPGRl
cCBwYWNrYWdlPSJnc3QtbGliYXYiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0cmVhbWVyLXZh
YXBpIi8+CisgICAgICA8aWYgY29uZGl0aW9uLXNldD0iT3BlbkNETSI+CisgICAgICAgIDxkZXAg
cGFja2FnZT0idGh1bmRlciIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+Cisg
ICAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRlci1jZG1pLXdpZGV2aW5lIi8+CisgICAgICAgIDxk
ZXAgcGFja2FnZT0idGh1bmRlci1uYW5vc2VydmljZXMiLz4KKyAgICAgIDwvaWY+CiAgICAgPC9k
ZXBlbmRlbmNpZXM+CiAgIDwvbWV0YW1vZHVsZT4KIApAQCAtMTksNiArMjUsOCBAQAogICAgICAg
aHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyIvPgogICA8cmVwb3Np
dG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJnaXRodWItdGFyYmFsbCIKICAgICAgIGhyZWY9Imh0
dHBzOi8vZ2l0aHViLmNvbS8iLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJnaXRo
dWItc3NoIgorICAgICAgaHJlZj0iZ2l0QGdpdGh1Yi5jb206Ii8+CiAgIDxyZXBvc2l0b3J5IHR5
cGU9ImdpdCIgbmFtZT0iY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbSIKICAgICAgIGhyZWY9Imh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS93ZWJtLyIvPgogICA8cmVwb3NpdG9yeSB0
eXBlPSJnaXQiIG5hbWU9ImFvbWVkaWEuZ29vZ2xlc291cmNlLmNvbSIKQEAgLTc5LDYgKzg3LDcg
QEAKIAogICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2OjQwYmIzYmFmZGEyNWMwYjczOWM4ZmMzNmU0
ODM4MGZjY2Y2MWM0ZDNmODM3NDdlOTdhYzNmOWIwMTcxYjEzMTkiIG1vZHVsZT0iZ3N0LXBsdWdp
bnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLSR7dmVyc2lvbn0udGFyLnh6IiByZXBvPSJnc3RyZWFt
ZXIiIHZlcnNpb249IjEuMTYuMiI+CiAgICAgICA8cGF0Y2ggZmlsZT0iZ29vZC0wMDAxLXF0ZGVt
dXgtU3BlY2lmeS1SRURJUkVDVC1pbmZvcm1hdGlvbi1pbi1lcnJvci1tZXNzYWcucGF0Y2giIHN0
cmlwPSIxIi8+IDwhLS0gTWVyZ2VkIHVwc3RyZWFtLCBzaG91bGQgYmUgc2hpcHBlZCBpbiAxLjE2
LjMgLS0+CisgICAgICA8cGF0Y2ggZmlsZT0iZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlm
LWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaCIgc3RyaXA9
IjEiIC8+CiAgICAgPC9icmFuY2g+CiAgIDwvbWVzb24+CiAKQEAgLTkyLDYgKzEwMSw3IEBACiAg
ICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGJyYW5jaCBoYXNoPSJzaGEyNTY6ZjFjYjdhYTIzODk1
NjlhNTM0MzY2MWFhZTQ3M2YwYTk0MGE5MGI4NzIwMDE4MjRiYzQ3ZmE4MDcyYTA0MWU3NCIgbW9k
dWxlPSJnc3QtcGx1Z2lucy1iYWQvZ3N0LXBsdWdpbnMtYmFkLSR7dmVyc2lvbn0udGFyLnh6IiBy
ZXBvPSJnc3RyZWFtZXIiIHZlcnNpb249IjEuMTYuMiI+CiAgICAgICA8cGF0Y2ggZmlsZT0iZ3N0
LXBsdWdpbnMtYmFkLTAwMDEtaDI2NHBhcnNlLVBvc3QtYS1XQVJOSU5HLXdoZW4tZGF0YS1pcy1i
cm9rZW4ucGF0Y2giIHN0cmlwPSIxIi8+IDwhLS0gTWVyZ2VkLCBkaXNjdXNzaW5nIGJhY2twb3J0
aW5nIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMt
YmFkL21lcmdlX3JlcXVlc3RzLzM4Ni0tPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5z
LWJhZC0wMDA2LW1zc2RlbXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5wYXRjaCIgc3RyaXA9IjEi
IC8+CiAgICAgPC9icmFuY2g+CiAgIDwvbWVzb24+CiAKQEAgLTEyNSw0ICsxMzUsODkgQEAKICAg
ICAgICAgICAgY2hlY2tvdXRkaXI9ImxpYnZhLSR7dmVyc2lvbn0iIHJlcG89ImdpdGh1Yi10YXJi
YWxsIi8+CiAgIDwvbWVzb24+CiAKKyAgPGNtYWtlIGlkPSJ0aHVuZGVyIgorICAgICAgICAgY21h
a2VhcmdzPSItREJVSUxEX1JFRkVSRU5DRT0ke3ZlcnNpb259IC1EUE9SVD04MDgxCisgICAgICAg
ICAgICAgICAgICAgIC1EQklORElORz0wLjAuMC4wIC1ESURMRV9USU1FPTE4MAorICAgICAgICAg
ICAgICAgICAgICAtRFBFUlNJU1RFTlRfUEFUSD0vdG1wL3RodW5kZXIvcGVyc2lzdGVudAorICAg
ICAgICAgICAgICAgICAgICAtRFZPTEFUSUxFX1BBVEg9L3RtcC90aHVuZGVyL3ZvbGF0aWxlCisg
ICAgICAgICAgICAgICAgICAgIC1EREFUQV9QQVRIPSR7cHJlZml4fS9zaGFyZS9XUEVGcmFtZXdv
cmsKKyAgICAgICAgICAgICAgICAgICAgLURTWVNURU1fUEFUSD0ke3ByZWZpeH0vbGliL3dwZWZy
YW1ld29yay9wbHVnaW5zCisgICAgICAgICAgICAgICAgICAgIC1EUFJPWFlTVFVCX1BBVEg9JHtw
cmVmaXh9L2xpYi93cGVmcmFtZXdvcmsvcHJveHlzdHVicworICAgICAgICAgICAgICAgICAgICAt
RE9PTUFESlVTVD0gLURCVUlMRF9UWVBFPVJlbGVhc2VTeW1ib2xzCisgICAgICAgICAgICAgICAg
ICAgIC1EQkxVRVRPT1RIX1NVUFBPUlQ9T0ZGIC1EVklSVFVBTElOUFVUPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRENPTVBPU0lUT1JDTElFTlQ9T0ZGIC1EQ09NUE9TSVRPUkNMSUVOVD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURCUk9BRENBU1Q9T0ZGIC1EQ0RNST1PTiAtRENETUlfQkNN
X05FWFVTX1NWUD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURDRE1JX0FEQVBURVJfSU1QTEVN
RU5UQVRJT049Z3N0cmVhbWVyCisgICAgICAgICAgICAgICAgICAgIC1ER1NUUkVBTUVSQ0xJRU5U
PU9GRiAtRFBST1ZJU0lPTlBST1hZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFNFQ1VSSVRZ
QUdFTlQ9T0ZGIC1EQ09NUE9TSVRPUlNFUlZFUlBMVUdJTj1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURQTFVHSU5fV0VCS0lUQlJPV1NFUj1PRkYgLURQTFVHSU5fV0VCU0VSVkVSPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9FU1BJQUw9T0ZGIC1ETkVUV09SS0NPTlRST0w9T0ZG
Ij4KKyAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi10YXJiYWxsIiBtb2R1bGU9InJka2NlbnRyYWwv
VGh1bmRlci90YXJiYWxsLyR7dmVyc2lvbn0iIHZlcnNpb249IjZhZGVlZTAwNmZlY2RkMWIyYmM0
OWJkMzYwZDQ5ZmM1NzE4ZGViNjEiIGNoZWNrb3V0ZGlyPSJ0aHVuZGVyIi8+CisgIDwvY21ha2U+
CisKKyAgPGF1dG90b29scyBpZD0id2lkZXZpbmUiIHN1cHBvcnRzLW5vbi1zcmNkaXItYnVpbGRz
PSJubyIKKyAgICAgICAgICAgICBhdXRvZ2VuLXNoPSJidWlsZC5weSIgYXV0b2dlbmFyZ3M9Ing4
Ni02NCAtciAtRE9FTUNSWVBUT19LRVlCT1hfUEFUSF9QUkVGSVg9JHtwcmVmaXh9IgorICAgICAg
ICAgICAgIG1ha2VhcmdzPSJCVUlMRFRZUEU9UmVsZWFzZSAtajEiCisgICAgICAgICAgICAgbWFr
ZWluc3RhbGxhcmdzPSJCVUlMRFRZUEU9UmVsZWFzZSAtajEgLWYgTWFrZWZpbGUuaW5zdGFsbCIg
PgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4KKyAg
ICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi1zc2giIG1vZHVsZT0i
TWV0cm9sb2dpY2FsL3dpZGV2aW5lLmdpdCIgY2hlY2tvdXRkaXI9IndpZGV2aW5lIiB0YWc9IjI2
NGMxMzc1MDFiMjg5ZTM1NmIxMWRhY2MzMjliMDU2MzZlYTkzOTYiLz4KKyAgPC9hdXRvdG9vbHM+
CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiIGNtYWtlYXJncz0iLURDTUFL
RV9CVUlMRF9UWVBFPVJlbFdpdGhEZWJJbmZvIj4KKyAgICA8YnJhbmNoIHJlcG89ImdpdGh1Yi10
YXJiYWxsIgorICAgICAgICAgICAgbW9kdWxlPSJXZWJQbGF0Zm9ybUZvckVtYmVkZGVkL09DRE0t
V2lkZXZpbmUvdGFyYmFsbC8ke3ZlcnNpb259IgorICAgICAgICAgICAgdmVyc2lvbj0iOWRjMzk2
NGIwMzM5YWJiNzBkNjZlNGY5MzE2MzIzMjRhMDc1ZDZkNCIgY2hlY2tvdXRkaXI9InRodW5kZXIt
Y2RtaS13aWRldmluZSIvPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9
InRodW5kZXIiLz4KKyAgICAgIDxkZXAgcGFja2FnZT0id2lkZXZpbmUiLz4KKyAgICA8L2RlcGVu
ZGVuY2llcz4KKyAgPC9jbWFrZT4KKworICA8Y21ha2UgaWQ9InRodW5kZXItbmFub3NlcnZpY2Vz
IgorICAgICAgICAgY21ha2VhcmdzPSItREJVSUxEX1JFRkVSRU5DRT0ke3ZlcnNpb259IC1EQlVJ
TERfVFlQRT1SZWxlYXNlU3ltYm9scworICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9DT0JB
TFQ9T0ZGIC1EUExVR0lOX0NPTU1BTkRFUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fREVWSUNFSU5GTz1PRkYgLURQTFVHSU5fRElTUExBWUlORk89T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX0RFVklDRUlERU5USUZJQ0FUSU9OPU9GRgorICAgICAgICAgICAgICAg
ICAgICAtRFBMVUdJTl9EU1JFU09MVVRJT049T0ZGIC1EUExVR0lOX0RIQ1BTRVJWRVI9T0ZGCisg
ICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0RJQUxTRVJWRVI9T0ZGIC1EUExVR0lOX0RJQ1RJ
T05BUlk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0lPQ09OTkVDVE9SPU9GRiAt
RFBMVUdJTl9FR0xURVNUPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9GUk9OVFBB
TkVMPU9GRiAtRFBMVUdJTl9MT0NBVElPTlNZTkM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1E
UExVR0lOX01PTklUT1I9T0ZGIC1EUExVR0lOX05FVFdPUktDT05UUk9MPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RNST1PTgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9PUEVOQ0RNSV9BVVRPU1RBUlQ9dHJ1ZQorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9PUEVOQ0RNSV9PT1A9dHJ1ZQorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RN
SV9XSURFVklORT1PTgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RNSV9DTEVB
UktFWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfUExBWVJFQURZ
PU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9PUEVOQ0RNSV9OQUdSQT1PRkYKKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfTkNBUz1PRkYgLURQTFVHSU5fQkxV
RVRPT1RIPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9CTFVFVE9PVEhSRU1PVEVD
T05UUk9MPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9SRU1PVEVDT05UUk9MPU9G
RiAtRFBMVUdJTl9TTkFQU0hPVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fU1lT
VEVNQ09NTUFORFM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0ZJTEVUUkFOU0ZF
Uj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fVEVTVENPTlRST0xMRVI9T0ZGIC1E
UExVR0lOX0pTT05SUEM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RFU1RVVElM
SVRZPU9GRiAtRFBMVUdJTl9USU1FU1lOQz1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fVFJBQ0VDT05UUk9MPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9WT0xVTUVD
T05UUk9MPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XRUJLSVRCUk9XU0VSPU9G
RiAtRFBMVUdJTl9SVFNQQ0xJRU5UPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9X
RUJQQT1PRkYgLURQTFVHSU5fV0VCUFJPWFk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX1dFQlNFUlZFUj1PRkYgLURQTFVHSU5fV0VCU0hFTEw9T0ZGCisgICAgICAgICAgICAgICAg
ICAgIC1EUExVR0lOX1dJRklDT05UUk9MPU9GRiAtRFBMVUdJTl9QQUNLQUdFUj1PRkYKKyAgICAg
ICAgICAgICAgICAgICAgLURQTFVHSU5fUExBWUVSSU5GTz1PRkYgLURQTFVHSU5fUE9XRVI9T0ZG
CisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1BST0NFU1NNT05JVE9SPU9GRiAtRFBMVUdJ
Tl9TVFJFQU1FUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fU1BBUks9T0ZGIC1E
UExBVEZPUk1fTElOVVg9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fTUVTU0VOR0VS
PU9GRiAtRFBMVUdJTl9TRUNVUklUWUFHRU5UPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9SUENMSU5LPU9GRiAtRFBMVUdJTl9DT01QT1NJVE9SPU9GRiI+CisgICAgPGJyYW5jaCBy
ZXBvPSJnaXRodWItdGFyYmFsbCIKKyAgICAgICAgICAgIG1vZHVsZT0icmRrY2VudHJhbC9UaHVu
ZGVyTmFub1NlcnZpY2VzL3RhcmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAgICAgICAgIHZlcnNpb249
ImRlOWYzZDQwZDg0MDhlZTgxMWM0OGY0ODZjOWIxNGY3NTJjOTczNDUiCisgICAgICAgICAgICBj
aGVja291dGRpcj0idGh1bmRlci1uYW5vc2VydmljZXMiLz4KKyAgICA8ZGVwZW5kZW5jaWVzPgor
ICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9InRodW5k
ZXItY2RtaS13aWRldmluZSIvPgorICAgIDwvZGVwZW5kZW5jaWVzPgorICA8L2NtYWtlPgorCiA8
L21vZHVsZXNldD4KZGlmZiAtLWdpdCBhL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVn
aW5zLWJhZC0wMDA2LW1zc2RlbXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5wYXRjaCBiL1Rvb2xz
L2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhZC0wMDA2LW1zc2RlbXV4LXBhcnNlLXBy
b3RlY3Rpb24tZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjhmOTk0NmYwZTliMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2dzdHJlYW1lci9wYXRj
aGVzL2dzdC1wbHVnaW5zLWJhZC0wMDA2LW1zc2RlbXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5w
YXRjaApAQCAtMCwwICsxLDI0NyBAQAorRnJvbSAwMDUyZjNkODMxNWU4Y2VmYjA0YTYyYTY0Y2Fj
MTdjYmZiYzZiOGI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hhcmxpZSBUdXJu
ZXIgPGNodHVybmVAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNSBNYXkgMjAxOCAwOTo0MzozMCAr
MDEwMAorU3ViamVjdDogW1BBVENIXSBQYXJzZSBwbGF5cmVhZHkgcGF5bG9hZC4KKworTG9vayBh
dCB0aGUgcGxheXJlYWR5IHNwZWNpZmljIGRhdGEgcGF5bG9hZCB0byBleHRyYWN0IGRlZmF1bHQg
a2V5IGlkcworZm9yIGRlY3J5cHRpbmcgc2FtcGxlcy4gVGhlIGZvcm1hdCBvZiB0aGlzIHBheWxv
YWQgc2VlbXMgdG8gYmUKK3Byb3ByaWV0YXJ5LgorCitTaWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKy0tLQorIGV4dC9zbW9vdGhzdHJl
YW1pbmcvZ3N0bXNzZGVtdXguYyAgICB8ICAxNCArKy0KKyBleHQvc21vb3Roc3RyZWFtaW5nL2dz
dG1zc21hbmlmZXN0LmMgfCAxMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZXh0L3Nt
b290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5oIHwgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQs
IDE1MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvc21v
b3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2Rl
bXV4LmMKK2luZGV4IGJjZWE4Y2EuLjRmYTk1YjkgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3Ry
ZWFtaW5nL2dzdG1zc2RlbXV4LmMKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzZGVt
dXguYworQEAgLTQ5NSw3ICs0OTUsMTkgQEAgZ3N0X21zc19kZW11eF9zZXR1cF9zdHJlYW1zIChH
c3RBZGFwdGl2ZURlbXV4ICogZGVtdXgpCisgICAgICAgICAgIGdzdF9ldmVudF9uZXdfcHJvdGVj
dGlvbiAocHJvdGVjdGlvbl9zeXN0ZW1faWQsIHByb3RlY3Rpb25fYnVmZmVyLAorICAgICAgICAg
ICAic21vb3RoLXN0cmVhbWluZyIpOworIAorLSAgICAgIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0s
ICJRdWV1ZWluZyBQcm90ZWN0aW9uIGV2ZW50IG9uIHNvdXJjZSBwYWQiKTsKKysgICAgICBHc3RC
dWZmZXIgKmtleV9pZCA9IGdzdF9tc3NfbWFuaWZlc3RfZ2V0X2tleV9pZCAobXNzZGVtdXgtPm1h
bmlmZXN0KTsKKysgICAgICBpZiAoIWdzdF9idWZmZXJfZ2V0X3NpemUgKGtleV9pZCkpIHsKKysg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3RyZWFtLAorKyAgICAgICAgICAgICJwcm90ZWN0
ZWQgbWFuaWZlc3QsIGJ1dCBubyBrZXkgaWRzIGF2YWlsYWJsZSIpOworKyAgICAgIH0gZWxzZSB7
CisrICAgICAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLAorKyAgICAgICAgICAgICJBZGRpbmcg
a2V5IGlkIHRvIHRoZSBwcm90ZWN0aW9uIGV2ZW50IG9mIHNpemUgJWx1IiwKKysgICAgICAgICAg
ICBnc3RfYnVmZmVyX2dldF9zaXplIChrZXlfaWQpKTsKKysgICAgICAgIEdzdFN0cnVjdHVyZSAq
c3RydWN0dXJlID0gZ3N0X2V2ZW50X3dyaXRhYmxlX3N0cnVjdHVyZSAoZXZlbnQpOworKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImtleV9pZCIsIEdTVF9UWVBFX0JVRkZF
Uiwga2V5X2lkLCBOVUxMKTsKKysgICAgICB9CisrCisrICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0
cmVhbSwgIlF1ZXVpbmcgUHJvdGVjdGlvbiBldmVudCBvbiBzb3VyY2UgcGFkIik7CisgICAgICAg
Z3N0X2FkYXB0aXZlX2RlbXV4X3N0cmVhbV9xdWV1ZV9ldmVudCAoKEdzdEFkYXB0aXZlRGVtdXhT
dHJlYW0gKikgc3RyZWFtLAorICAgICAgICAgICBldmVudCk7CisgICAgICAgZ3N0X2J1ZmZlcl91
bnJlZiAocHJvdGVjdGlvbl9idWZmZXIpOworZGlmZiAtLWdpdCBhL2V4dC9zbW9vdGhzdHJlYW1p
bmcvZ3N0bXNzbWFuaWZlc3QuYyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3Qu
YworaW5kZXggYzg1NWNiMy4uZGYzMTMzMCAxMDA2NDQKKy0tLSBhL2V4dC9zbW9vdGhzdHJlYW1p
bmcvZ3N0bXNzbWFuaWZlc3QuYworKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5p
ZmVzdC5jCitAQCAtMjgsNiArMjgsOCBAQAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRl
IDxsaWJ4bWwvcGFyc2VyLmg+CisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisrI2luY2x1ZGUg
PGxpYnhtbC94cGF0aC5oPgorKyNpbmNsdWRlIDxsaWJ4bWwveHBhdGhJbnRlcm5hbHMuaD4KKyAK
KyAvKiBmb3IgcGFyc2luZyBoMjY0IGNvZGVjIGRhdGEgKi8KKyAjaW5jbHVkZSA8Z3N0L2NvZGVj
cGFyc2Vycy9nc3RoMjY0cGFyc2VyLmg+CitAQCAtMTA5LDYgKzExMSwxMCBAQCBzdHJ1Y3QgX0dz
dE1zc01hbmlmZXN0CisgICBHU3RyaW5nICpwcm90ZWN0aW9uX3N5c3RlbV9pZDsKKyAgIGdjaGFy
ICpwcm90ZWN0aW9uX2RhdGE7CisgCisrICAvLyBGSVhNRTogVGhlcmUgY2FuIGJlIG11bHRpcGxl
IGtleSBpZHMgcHJlc2VudCBpbiBwcm90ZWN0ZWQgbWFuaWZlc3RzLgorKyAgZ2NoYXIgKmtleV9p
ZDsKKysgIGdzaXplIGtleV9pZF9sZW47CisrCisgICBHU0xpc3QgKnN0cmVhbXM7CisgfTsKKyAK
K0BAIC0zMDAsNiArMzA2LDEyMiBAQCBfZ3N0X21zc19zdHJlYW1faW5pdCAoR3N0TXNzTWFuaWZl
c3QgKiBtYW5pZmVzdCwgR3N0TXNzU3RyZWFtICogc3RyZWFtLAorICAgZ3N0X21zc19mcmFnbWVu
dF9wYXJzZXJfaW5pdCAoJnN0cmVhbS0+ZnJhZ21lbnRfcGFyc2VyKTsKKyB9CisgCisrc3RhdGlj
IHZvaWQKKytfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01hbmlmZXN0ICog
bWFuaWZlc3QpCisreworKyAgZ3VjaGFyICpkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YSA9IE5VTEw7
CisrICBnc2l6ZSBkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YV9sZW4gPSAwOworKyAgeG1sQ2hhciAq
cHJvdGVjdGlvbl9kYXRhX3RleHQgPSBOVUxMOworKyAgaW50IHByb3RlY3Rpb25fZGF0YV90ZXh0
X2xlbiA9IDA7CisrICB4bWxEb2NQdHIgcHJvdGVjdGlvbl9kYXRhX3htbCA9IE5VTEw7CisrICAv
LyBOb3RlLCB0aGlzIGRvZXMgbm90IG5lZWQgdG8gZnJlZSdkLCBmcmVlaW5nIHRoZSBkb2MgcHRy
IHdpbGwgZnJlZSB0aGlzLgorKyAgeG1sTm9kZSAqcHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVu
dCA9IE5VTEw7CisrICBjb25zdCB4bWxDaGFyICpwcm90ZWN0aW9uX2RhdGFfbmFtZXNwYWNlID0g
TlVMTDsKKysgIHhtbFhQYXRoQ29udGV4dFB0ciB4cGF0aF9jdHggPSBOVUxMOworKyAgeG1sWFBh
dGhPYmplY3RQdHIgeHBhdGhfb2JqID0gTlVMTDsKKysgIHhtbE5vZGVTZXRQdHIga2V5X2lkX25v
ZGUgPSBOVUxMOworKyAgZ3NpemUgcHJvdGVjdGlvbl9kYXRhX3htbF9sZW4gPSAwOworKyAgZ3Vj
aGFyICpzdGFydF90YWcgPSBOVUxMOworKworKyAgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEgPQor
KyAgICAgIGdfYmFzZTY0X2RlY29kZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSwgJmRlY29k
ZWRfcHJvdGVjdGlvbl9kYXRhX2xlbik7CisrCisrICBzdGFydF90YWcgPSBkZWNvZGVkX3Byb3Rl
Y3Rpb25fZGF0YTsKKysKKysgIC8vIFRoZSBwcm90ZWN0aW9uIGRhdGEgc3RhcnRzIHdpdGggYSAx
MC1ieXRlIFBsYXlSZWFkeSB2ZXJzaW9uCisrICAvLyBoZWFkZXIgdGhhdCBuZWVkcyB0byBiZSBz
a2lwcGVkIG92ZXIgdG8gYXZvaWQgWE1MIHBhcnNpbmcKKysgIC8vIGVycm9ycy4KKysgIHdoaWxl
IChzdGFydF90YWcgJiYgKnN0YXJ0X3RhZyAhPSAnPCcpCisrICAgIHN0YXJ0X3RhZysrOworKwor
KyAgaWYgKCFzdGFydF90YWcpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGZpbmQgYSBz
dGFydCB0YWcgaW4gcHJvdGVjdGlvbiBkYXRhIHBheWxvYWQiKTsKKysgICAgZ290byBiZWFjaDsK
KysgIH0KKysKKysgIHByb3RlY3Rpb25fZGF0YV94bWxfbGVuID0KKysgICAgICBkZWNvZGVkX3By
b3RlY3Rpb25fZGF0YV9sZW4gLSAoc3RhcnRfdGFnIC0gZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEp
OworKyAgcHJvdGVjdGlvbl9kYXRhX3htbCA9CisrICAgICAgeG1sUmVhZE1lbW9yeSAoKGNvbnN0
IGdjaGFyICopIHN0YXJ0X3RhZywgcHJvdGVjdGlvbl9kYXRhX3htbF9sZW4sCisrICAgICAgInBy
b3RlY3Rpb25fZGF0YSIsICJ1dGYtMTYiLCAwKTsKKysKKysgIGlmICghcHJvdGVjdGlvbl9kYXRh
X3htbCkgeworKyAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gcGFyc2UgcHJvdGVjdGlvbiBkYXRh
IFhNTCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgaWYgKGdzdF9kZWJ1Z19jYXRl
Z29yeV9nZXRfdGhyZXNob2xkIChHU1RfQ0FUX0RFRkFVTFQpID49IEdTVF9MRVZFTF9NRU1EVU1Q
KSB7CisrICAgIHhtbERvY0R1bXBNZW1vcnlFbmMgKHByb3RlY3Rpb25fZGF0YV94bWwsICZwcm90
ZWN0aW9uX2RhdGFfdGV4dCwKKysgICAgICAgICZwcm90ZWN0aW9uX2RhdGFfdGV4dF9sZW4sICJ1
dGY4Iik7CisrICAgIEdTVF9NRU1EVU1QICgicHJvdGVjdGlvbiBkYXRhIFhNTCIsIHByb3RlY3Rp
b25fZGF0YV90ZXh0LAorKyAgICAgICAgcHJvdGVjdGlvbl9kYXRhX3RleHRfbGVuKTsKKysgICAg
eG1sRnJlZSAocHJvdGVjdGlvbl9kYXRhX3RleHQpOworKyAgfQorKworKyAgcHJvdGVjdGlvbl9k
YXRhX3Jvb3RfZWxlbWVudCA9IHhtbERvY0dldFJvb3RFbGVtZW50IChwcm90ZWN0aW9uX2RhdGFf
eG1sKTsKKysgIGlmIChwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT50eXBlICE9IFhNTF9F
TEVNRU5UX05PREUgfHwKKysgICAgICB4bWxTdHJjbXAgKHByb3RlY3Rpb25fZGF0YV9yb290X2Vs
ZW1lbnQtPm5hbWUsCisrICAgICAgICAgIChjb25zdCB4bWxDaGFyICopICJXUk1IRUFERVIiKSB8
fCAhcHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+bnMpIHsKKysgICAgR1NUX0VSUk9SICgi
aW52YWxpZCBwcm90ZWN0aW9uIGRhdGEgWE1MIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9Cisr
CisrICB4cGF0aF9jdHggPSB4bWxYUGF0aE5ld0NvbnRleHQgKHByb3RlY3Rpb25fZGF0YV94bWwp
OworKyAgaWYgKCF4cGF0aF9jdHgpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGNyZWF0
ZSB4cGF0aCBjb250ZXh0Iik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrICBwcm90ZWN0
aW9uX2RhdGFfbmFtZXNwYWNlID0gcHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+bnMtPmhy
ZWY7CisrICBpZiAoeG1sWFBhdGhSZWdpc3Rlck5zICh4cGF0aF9jdHgsIChjb25zdCB4bWxDaGFy
ICopICJwcmhkciIsCisrICAgICAgICAgIHByb3RlY3Rpb25fZGF0YV9uYW1lc3BhY2UpIDwgMCkg
eworKyAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gcmVnaXN0ZXIgWE1MIG5hbWVzcGFjZSIpOwor
KyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgeHBhdGhfb2JqID0KKysgICAgICB4bWxYUGF0
aEV2YWxFeHByZXNzaW9uICgoY29uc3QgeG1sQ2hhciAqKSAiLy9wcmhkcjpLSUQiLCB4cGF0aF9j
dHgpOworKyAgaWYgKCF4cGF0aF9vYmopIHsKKysgICAgR1NUX0RFQlVHICgiZmFpbGVkIHRvIGV2
YWwgWFBhdGggZXhwcmVzc2lvbiIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAga2V5
X2lkX25vZGUgPSB4cGF0aF9vYmotPm5vZGVzZXR2YWw7CisrICBpbnQgbnVtX2tleV9pZHMgPSBr
ZXlfaWRfbm9kZSA/IGtleV9pZF9ub2RlLT5ub2RlTnIgOiAwOworKworKyAgR1NUX0RFQlVHICgi
Zm91bmQgJWQga2V5IGlkcyIsIG51bV9rZXlfaWRzKTsKKysKKysgIGlmIChudW1fa2V5X2lkcyAh
PSAwICYmIChrZXlfaWRfbm9kZS0+bm9kZVRhYlswXS0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RF
KSkgeworKyAgICB4bWxDaGFyICplbmNvZGVkX2tleV9pZCA9IHhtbE5vZGVHZXRDb250ZW50IChr
ZXlfaWRfbm9kZS0+bm9kZVRhYlswXSk7CisrICAgIGdzaXplIGRlY29kZWRfa2V5X2lkX2xlbjsK
KysgICAgZ3VjaGFyICpkZWNvZGVkX2tleV9pZCA9CisrICAgICAgICBnX2Jhc2U2NF9kZWNvZGUg
KChjb25zdCBnY2hhciAqKSBlbmNvZGVkX2tleV9pZCwgJmRlY29kZWRfa2V5X2lkX2xlbik7Cisr
CisrICAgIEdTVF9NRU1EVU1QICgia2V5IHJldHJpZXZlZCIsIGRlY29kZWRfa2V5X2lkLCBkZWNv
ZGVkX2tleV9pZF9sZW4pOworKworKyAgICBtYW5pZmVzdC0+a2V5X2lkID0gZ19yZWFsbG9jICht
YW5pZmVzdC0+a2V5X2lkLCBkZWNvZGVkX2tleV9pZF9sZW4pOworKyAgICBtZW1jcHkgKG1hbmlm
ZXN0LT5rZXlfaWQsIGRlY29kZWRfa2V5X2lkLCBkZWNvZGVkX2tleV9pZF9sZW4pOworKyAgICBt
YW5pZmVzdC0+a2V5X2lkX2xlbiA9IGRlY29kZWRfa2V5X2lkX2xlbjsKKysKKysgICAgeG1sRnJl
ZSAoZW5jb2RlZF9rZXlfaWQpOworKyAgICBnX2ZyZWUgKGRlY29kZWRfa2V5X2lkKTsKKysgIH0g
ZWxzZSB7CisrICAgIEdTVF9FUlJPUiAoImludmFsaWQgWE1MIHBheWxvYWQiKTsKKysgICAgZ290
byBiZWFjaDsKKysgIH0KKysKKytiZWFjaDoKKysgIGlmIChkZWNvZGVkX3Byb3RlY3Rpb25fZGF0
YSkKKysgICAgZ19mcmVlIChkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YSk7CisrICBpZiAoeHBhdGhf
Y3R4KQorKyAgICB4bWxYUGF0aEZyZWVDb250ZXh0ICh4cGF0aF9jdHgpOworKyAgaWYgKHhwYXRo
X29iaikKKysgICAgeG1sWFBhdGhGcmVlT2JqZWN0ICh4cGF0aF9vYmopOworKyAgaWYgKHByb3Rl
Y3Rpb25fZGF0YV94bWwpCisrICAgIHhtbEZyZWVEb2MgKHByb3RlY3Rpb25fZGF0YV94bWwpOwor
KworKyAgcmV0dXJuOworK30KKyAKKyBzdGF0aWMgdm9pZAorIF9nc3RfbXNzX3BhcnNlX3Byb3Rl
Y3Rpb24gKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsCitAQCAtMzI5LDYgKzQ1MSw3IEBAIF9n
c3RfbXNzX3BhcnNlX3Byb3RlY3Rpb24gKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsCisgCisg
ICAgICAgbWFuaWZlc3QtPnByb3RlY3Rpb25fc3lzdGVtX2lkID0gc3lzdGVtX2lkOworICAgICAg
IG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGEgPSAoZ2NoYXIgKikgeG1sTm9kZUdldENvbnRlbnQg
KG5vZGVpdGVyKTsKKysgICAgICBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uX2RhdGEgKG1hbmlm
ZXN0KTsKKyAgICAgICB4bWxGcmVlIChzeXN0ZW1faWRfYXR0cmlidXRlKTsKKyAgICAgICBicmVh
azsKKyAgICAgfQorQEAgLTM5NCw2ICs1MTcsOSBAQCBnc3RfbXNzX21hbmlmZXN0X25ldyAoR3N0
QnVmZmVyICogZGF0YSkKKyAgICAgfQorICAgfQorIAorKyAgbWFuaWZlc3QtPmtleV9pZCA9IE5V
TEw7CisrICBtYW5pZmVzdC0+a2V5X2lkX2xlbiA9IDA7CisrCisgICBmb3IgKG5vZGVpdGVyID0g
cm9vdC0+Y2hpbGRyZW47IG5vZGVpdGVyOyBub2RlaXRlciA9IG5vZGVpdGVyLT5uZXh0KSB7Cisg
ICAgIGlmIChub2RlaXRlci0+dHlwZSA9PSBYTUxfRUxFTUVOVF9OT0RFCisgICAgICAgICAmJiAo
c3RyY21wICgoY29uc3QgY2hhciAqKSBub2RlaXRlci0+bmFtZSwgIlN0cmVhbUluZGV4IikgPT0g
MCkpIHsKK0BAIC00NDAsNiArNTY2LDkgQEAgZ3N0X21zc19tYW5pZmVzdF9mcmVlIChHc3RNc3NN
YW5pZmVzdCAqIG1hbmlmZXN0KQorIAorICAgZ19zbGlzdF9mcmVlX2Z1bGwgKG1hbmlmZXN0LT5z
dHJlYW1zLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9tc3Nfc3RyZWFtX2ZyZWUpOworIAorKyAgaWYg
KG1hbmlmZXN0LT5rZXlfaWQpCisrICAgIGdfZnJlZSAobWFuaWZlc3QtPmtleV9pZCk7CisrCisg
ICBpZiAobWFuaWZlc3QtPnByb3RlY3Rpb25fc3lzdGVtX2lkICE9IE5VTEwpCisgICAgIGdfc3Ry
aW5nX2ZyZWUgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCwgVFJVRSk7CisgICB4bWxG
cmVlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhKTsKK0BAIC00NjIsNiArNTkxLDE1IEBAIGdz
dF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5p
ZmVzdCkKKyAgIHJldHVybiBtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhOworIH0KKyAKKytHc3RC
dWZmZXIgKgorK2dzdF9tc3NfbWFuaWZlc3RfZ2V0X2tleV9pZCAoR3N0TXNzTWFuaWZlc3QgKiBt
YW5pZmVzdCkKKyt7CisrICBHc3RCdWZmZXIgKmtleV9pZF9idWZmZXIgPQorKyAgICAgIGdzdF9i
dWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBtYW5pZmVzdC0+a2V5X2lkX2xlbiwgTlVMTCk7Cisr
ICBnc3RfYnVmZmVyX2ZpbGwgKGtleV9pZF9idWZmZXIsIDAsIG1hbmlmZXN0LT5rZXlfaWQsIG1h
bmlmZXN0LT5rZXlfaWRfbGVuKTsKKysgIHJldHVybiBrZXlfaWRfYnVmZmVyOworK30KKysKKyBH
U0xpc3QgKgorIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3N0cmVhbXMgKEdzdE1zc01hbmlmZXN0ICog
bWFuaWZlc3QpCisgeworZGlmZiAtLWdpdCBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFu
aWZlc3QuaCBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAoraW5kZXggMDNi
MDY2YS4uNGU2YWQ3MyAxMDA2NDQKKy0tLSBhL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFu
aWZlc3QuaAorKysrIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5oCitAQCAt
NTYsNiArNTYsNyBAQCBHc3RDbG9ja1RpbWUgZ3N0X21zc19tYW5pZmVzdF9nZXRfbWluX2ZyYWdt
ZW50X2R1cmF0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZQorIGNvbnN0IGdjaGFyICogZ3N0
X21zc19tYW5pZmVzdF9nZXRfcHJvdGVjdGlvbl9zeXN0ZW1faWQgKEdzdE1zc01hbmlmZXN0ICog
bWFuaWZlc3QpOworIGNvbnN0IGdjaGFyICogZ3N0X21zc19tYW5pZmVzdF9nZXRfcHJvdGVjdGlv
bl9kYXRhIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyBnYm9vbGVhbiBnc3RfbXNzX21h
bmlmZXN0X2dldF9saXZlX3NlZWtfcmFuZ2UgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIGdp
bnQ2NCAqIHN0YXJ0LCBnaW50NjQgKiBzdG9wKTsKKytHc3RCdWZmZXIgKiBnc3RfbXNzX21hbmlm
ZXN0X2dldF9rZXlfaWQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpOworIAorIEdzdE1zc1N0
cmVhbVR5cGUgZ3N0X21zc19zdHJlYW1fZ2V0X3R5cGUgKEdzdE1zc1N0cmVhbSAqc3RyZWFtKTsK
KyBHc3RDYXBzICogZ3N0X21zc19zdHJlYW1fZ2V0X2NhcHMgKEdzdE1zc1N0cmVhbSAqIHN0cmVh
bSk7CistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9n
c3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRl
ZC1hLWRlZmF1bHQta2lkLnBhdGNoIGIvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdp
bnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZh
dWx0LWtpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE1
ZjViYjM0OGExZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dz
dC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVk
LWEtZGVmYXVsdC1raWQucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gYTgxNmQ4ZGFiNmJi
MzM3NzAxNTAyODlhNGFlZGU0M2UyZjdhZTQ3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zy
b206IENoYXJsaWUgVHVybmVyIDxjaHR1cm5lQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTAgTWF5
IDIwMTkgMjM6MzQ6NDMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgaWYgYW4gdXBzdHJl
YW0gZGVtdXhlciBwcm92aWRlZCBhIGRlZmF1bHQga2lkLgorCitTbW9vdGggc3RyZWFtaW5nIGRl
bXV4ZXJzIGRvIG5vdCBzZW5kIGJveGVzIGNvbnRhaW5pbmcgbWV0YWRhdGEgYWJvdXQKK3RoZSBz
dHJlYW0uIFRoZXkgaGF2ZSB0byBzZW5kIG1ldGFkYXRhICJvdXQtb2YtYmFuZCIuCisKK0ZvciBw
aWZmIGVuY29kZWQgc3RyZWFtcywgaWYgbm8gYm94IGhhcyBiZWVuIGZvdW5kIGNvbnRhaW5pbmcg
YSBkZWZhdWx0CitraWQgZm9yIHRoZSBzYW1wbGUsIGNoZWNrIGlmIGFuIHVwc3RyZWFtIGRlbXV4
ZXIgaGFzIHByb3ZpZGVkIG9uZSB2aWEgYQorcHJvdGVjdGlvbiBldmVudCwgYW5kIHVzZSB0aGlz
IGFzIGEgZmFsbGJhY2suCisKK1NpZ25lZC1vZmYtYnk6IFhhYmllciBSb2RyaWd1ZXogQ2FsdmFy
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPgorLS0tCisgZ3N0L2lzb21wNC9xdGRlbXV4LmMgfCA0MyAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5n
ZWQsIDQzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvcXRkZW11eC5j
IGIvZ3N0L2lzb21wNC9xdGRlbXV4LmMKK2luZGV4IGNmMTVmYWQ0Ni4uZTQ0OWI0ODBjIDEwMDY0
NAorLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMKKysrKyBiL2dzdC9pc29tcDQvcXRkZW11eC5j
CitAQCAtNDUxLDYgKzQ1MSw3IEBAIHN0cnVjdCBfUXREZW11eFN0cmVhbQorICAgZ3VpbnQzMiBw
cm90ZWN0aW9uX3NjaGVtZV92ZXJzaW9uOworICAgZ3BvaW50ZXIgcHJvdGVjdGlvbl9zY2hlbWVf
aW5mbzsgICAgICAvKiBzcGVjaWZpYyB0byB0aGUgcHJvdGVjdGlvbiBzY2hlbWUgKi8KKyAgIEdR
dWV1ZSBwcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZTsKKysgIEdzdEJ1ZmZlciAqZGVmYXVs
dF9raWQ7CisgCisgICBnaW50IHJlZl9jb3VudDsgICAgICAgICAgICAgICAvKiBhdG9taWMgKi8K
KyB9OworQEAgLTIwMDgsNiArMjAwOSw3IEBAIF9jcmVhdGVfc3RyZWFtIChHc3RRVERlbXV4ICog
ZGVtdXgsIGd1aW50MzIgdHJhY2tfaWQpCisgICBzdHJlYW0tPnN0cmVhbV90YWdzID0gZ3N0X3Rh
Z19saXN0X25ld19lbXB0eSAoKTsKKyAgIGdzdF90YWdfbGlzdF9zZXRfc2NvcGUgKHN0cmVhbS0+
c3RyZWFtX3RhZ3MsIEdTVF9UQUdfU0NPUEVfU1RSRUFNKTsKKyAgIGdfcXVldWVfaW5pdCAoJnN0
cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUpOworKyAgc3RyZWFtLT5kZWZhdWx0
X2tpZCA9IE5VTEw7CisgICBzdHJlYW0tPnJlZl9jb3VudCA9IDE7CisgICAvKiBjb25zaXN0ZW50
IGRlZmF1bHQgZm9yIHB1c2ggYmFzZWQgbW9kZSAqLworICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnN0
cmVhbS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKK0BAIC0yNDc2LDYgKzI0NzgsMzIgQEAg
Z3N0X3F0ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVj
dCAqIHBhcmVudCwKKyAgICAgY2FzZSBHU1RfRVZFTlRfUFJPVEVDVElPTjoKKyAgICAgeworICAg
ICAgIGNvbnN0IGdjaGFyICpzeXN0ZW1faWQgPSBOVUxMOworKyAgICAgIEdzdEJ1ZmZlciAqZGVm
YXVsdF9rZXlfaWQgPSBOVUxMOworKyAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJl
OworKyAgICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisrICAgICAgR3N0TWFwSW5m
byBtYXA7CisrCisrICAgICAgc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2
ZW50KTsKKysgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHN0cnVjdHVy
ZSwgImtleV9pZCIsIEdTVF9UWVBFX0JVRkZFUikpIHsKKysgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
Z2V0IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIsCisrICAgICAgICAgICAg
JmRlZmF1bHRfa2V5X2lkLCBOVUxMKTsKKysgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4
LAorKyAgICAgICAgICAgICJyZWNlaXZlZCBhIGRlZmF1bHQga2V5IGlkIG9mIHNpemUgJSIgR19H
U0laRV9GT1JNQVQsCisrICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZGVmYXVsdF9r
ZXlfaWQpKTsKKysKKysgICAgICAgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9s
ZCAoR1NUX0NBVF9ERUZBVUxUKSA+PQorKyAgICAgICAgICAgIEdTVF9MRVZFTF9NRU1EVU1QKSB7
CisrICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChkZWZhdWx0X2tleV9pZCwgJm1hcCwgR1NUX01B
UF9SRUFEKTsKKysgICAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChkZW11eCwgImRlZmF1bHQg
a2V5IGlkIiwgKGd1aW50OCAqKSBtYXAuZGF0YSwKKysgICAgICAgICAgICAgIG1hcC5zaXplKTsK
KysgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoZGVmYXVsdF9rZXlfaWQsICZtYXApOworKyAg
ICAgICAgfQorKworKyAgICAgICAgaWYgKFFUREVNVVhfTl9TVFJFQU1TIChkZW11eCkpIHsKKysg
ICAgICAgICAgc3RyZWFtID0gUVRERU1VWF9OVEhfU1RSRUFNIChkZW11eCwgMCk7CisrICAgICAg
ICAgIHN0cmVhbS0+ZGVmYXVsdF9raWQgPSBkZWZhdWx0X2tleV9pZDsKKysgICAgICAgIH0KKysg
ICAgICB9CisgCisgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24gKGV2ZW50LCAmc3lz
dGVtX2lkLCBOVUxMLCBOVUxMKTsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlJl
Y2VpdmVkIHByb3RlY3Rpb24gZXZlbnQgZm9yIHN5c3RlbSBJRCAlcyIsCitAQCAtMjY4OCw2ICsy
NzE2LDggQEAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2NsZWFyIChRdERlbXV4U3RyZWFtICogc3RyZWFt
KQorICAgZ19xdWV1ZV9mb3JlYWNoICgmc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9x
dWV1ZSwKKyAgICAgICAoR0Z1bmMpIGdzdF9ldmVudF91bnJlZiwgTlVMTCk7CisgICBnX3F1ZXVl
X2NsZWFyICgmc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZSk7CisrICBpZiAo
c3RyZWFtLT5kZWZhdWx0X2tpZCkKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3RyZWFtLT5kZWZh
dWx0X2tpZCk7CisgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2VnbWVudHNfZGF0YSAoc3Ry
ZWFtKTsKKyAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mbHVzaF9zYW1wbGVzX2RhdGEgKHN0cmVhbSk7
CisgfQorQEAgLTI5NTQsNiArMjk4NCwxOSBAQCBxdGRlbXV4X3BhcnNlX3BpZmYgKEdzdFFURGVt
dXggKiBxdGRlbXV4LCBjb25zdCBndWludDggKiBidWZmZXIsIGdpbnQgbGVuZ3RoLAorICAgICB1
c2VzX3N1Yl9zYW1wbGVfZW5jcnlwdGlvbiA9IFRSVUU7CisgICB9CisgCisrICAvLyBJbiB0aGUg
Y2FzZSBvZiBzbW9vdGggc3RyZWFtaW5nLCB3ZSBuZXZlciBnZXQgbW9vdiBib3hlcyBhbmQgdGhl
aXIKKysgIC8vIGRlZmF1bHQgZW5jcnlwdGlvbiBtZXRhZGF0YS4gSW5zdGVhZCwgdGhlIGRlbXV4
ZXIgaGFzIHRvIHBhcnNlIHRoaXMKKysgIC8vIGluZm9ybWF0aW9uIG91dCBvZiB0aGUgcGxheXJl
YWR5IHNwZWNpZmljIHBheWxvYWRzIGFuZCBtYWtlIGl0IGF2YWlsYmxlCisrICAvLyBzb21laG93
IHRvIHVzLgorKyAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3NfaW5mby0+ZGVmYXVs
dF9wcm9wZXJ0aWVzLCAia2lkIikpIHsKKysgICAgaWYgKCFzdHJlYW0tPmRlZmF1bHRfa2lkKSB7
CisrICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiTm8gYXZhaWxhYmxlIGtleSBp
ZCBmb3Igc2FtcGxlIik7CisrICAgIH0gZWxzZSB7CisrICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQg
KHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgImtpZCIsIEdTVF9UWVBFX0JVRkZFUiwKKysg
ICAgICAgICAgc3RyZWFtLT5kZWZhdWx0X2tpZCwgTlVMTCk7CisrICAgIH0KKysgIH0KKysKKyAg
IGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoc3NfaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVz
LCAiaXZfc2l6ZSIsCisgICAgICAgICAgICZpdl9zaXplKSkgeworICAgICBHU1RfRVJST1JfT0JK
RUNUIChxdGRlbXV4LCAiRXJyb3IgZ2V0dGluZyBlbmNyeXB0aW9uIElWIHNpemUgZmllbGQiKTsK
Ky0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2ll
cyBiL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcwppbmRleCA2MTM2N2I1MDBjYTMuLjlm
YmUzZTRkOThjYyAxMDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2luc3RhbGwtZGVwZW5kZW5jaWVzCisr
KyBiL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcwpAQCAtMTkwLDYgKzE5MCw3IEBAIGZ1
bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoQXB0IHsKICAgICAgICAgZ2l0IFwKICAgICAg
ICAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIFwKICAgICAgICAgZ3NldHRpbmdzLWRlc2t0b3Atc2No
ZW1hcy1kZXYgXAorICAgICAgICBneXAgXAogICAgICAgICBpY29uLW5hbWluZy11dGlscyBcCiAg
ICAgICAgIGxpYmNyb2NvMy1kZXYgXAogICAgICAgICBsaWJjdXBzMi1kZXYgXApAQCAtMzc4LDYg
KzM3OSw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFuIHsKICAgICAg
ICAgZ251dGxzIFwKICAgICAgICAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIFwKICAgICAgICAgZ3Nl
dHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBcCisgICAgICAgIGd5cCBcCiAgICAgICAgIGljb24tbmFt
aW5nLXV0aWxzIFwKICAgICAgICAgbGliY3JvY28gXAogICAgICAgICBsaWJjdXBzIFwKQEAgLTU2
MSw2ICs1NjMsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aERuZiB7CiAgICAg
ICAgIGdudXRscy1kZXZlbCBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAg
ICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2ZWwgXAorICAgICAgICBneXAgXAogICAg
ICAgICBpY29uLW5hbWluZy11dGlscyBcCiAgICAgICAgIGl0c3Rvb2wgXAogICAgICAgICBsaWJY
Zm9udDItZGV2ZWwgXApkaWZmIC0tZ2l0IGEvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9u
LnB5IGIvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5CmluZGV4IGJiYmRiZjM2MDM5
Zi4uM2UyNjFlNzJkN2JhIDEwMDY0NAotLS0gYS9Ub29scy9qaGJ1aWxkL2poYnVpbGRyY19jb21t
b24ucHkKKysrIGIvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5CkBAIC04MywzICs4
Myw4IEBAIGRlZiBpbml0KGpoYnVpbGRyY19nbG9iYWxzLCBqaGJ1aWxkX3BsYXRmb3JtKToKIAog
ICAgIGlmICd4ODZfNjQnIGluIHBsYXRmb3JtLm1hY2hpbmUoKToKICAgICAgICAgamhidWlsZHJj
X2dsb2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQoJ3g4Nl82NCcpCisKKyAgICBpZiAnSkhCVUlMRF9F
TkFCTEVfT1BFTkNETScgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgamhidWlsZF9lbmFibGVfb3Bl
bmNkbSA9IG9zLmVudmlyb25bJ0pIQlVJTERfRU5BQkxFX09QRU5DRE0nXS5sb3dlcigpCisgICAg
ICAgIGlmIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJ3llcycgb3IgamhidWlsZF9lbmFibGVf
b3BlbmNkbSA9PSAnMScgb3IgamhidWlsZF9lbmFibGVfb3BlbmNkbSA9PSAndHJ1ZSc6CisgICAg
ICAgICAgICBqaGJ1aWxkcmNfZ2xvYmFsc1snY29uZGl0aW9ucyddLmFkZCgnT3BlbkNETScpCmRp
ZmYgLS1naXQgYS9Ub29scy93cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXMgYi9Ub29scy93cGUvaW5z
dGFsbC1kZXBlbmRlbmNpZXMKaW5kZXggYWQ4MjYyMTM1ZTlkLi4xZTJhZWQzNjQzYzcgMTAwNzU1
Ci0tLSBhL1Rvb2xzL3dwZS9pbnN0YWxsLWRlcGVuZGVuY2llcworKysgYi9Ub29scy93cGUvaW5z
dGFsbC1kZXBlbmRlbmNpZXMKQEAgLTEyMCw2ICsxMjAsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVw
ZW5kZW5jaWVzV2l0aEFwdCB7CiAgICAgcGFja2FnZXM9IiRwYWNrYWdlcyBcCiAgICAgICAgIGdp
dCBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwKKyAgICAgICAgZ3lw
IFwKICAgICAgICAgbGliZWdsMS1tZXNhLWRldiBcCiAgICAgICAgIGxpYmV4cGF0MS1kZXYgXAog
ICAgICAgICBsaWJmZGstYWFjLWRldiBcCkBAIC0yMzksNiArMjQwLDcgQEAgZnVuY3Rpb24gaW5z
dGFsbERlcGVuZGVuY2llc1dpdGhQYWNtYW4gewogICAgICAgICBleHBhdCBcCiAgICAgICAgIGdp
dCBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgICAgICBneXAgXAog
ICAgICAgICBsaWJmZGstYWFjIFwKICAgICAgICAgbGlicHJveHkgXAogICAgICAgICBsaWJwc2wg
XApAQCAtMzU5LDYgKzM2MSw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoRG5m
IHsKICAgICAgICAgZmRrLWFhYy1kZXZlbCBcCiAgICAgICAgIGdpdCBcCiAgICAgICAgIGdzZXR0
aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2ZWwgXAorICAgICAgICBneXAgXAogICAgICAgICBsaWJt
b3VudC1kZXZlbCBcCiAgICAgICAgIGxpYnByb3h5LWRldmVsIFwKICAgICAgICAgbGlicHNsLWRl
dmVsIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403685</attachid>
            <date>2020-07-07 07:20:56 -0700</date>
            <delta_ts>2020-07-07 08:05:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>150841</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZDJhOTUyYWU2ZWEuLjE1
Mzc4NTBjZmY2ZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA3LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIE1hYyBDTWFrZSBidWlsZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1Mzg2Y2Y5MGMzYzUuLmM4OTIxOWUwZGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAy
MC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
NTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm1FbmFibGUuaDogRGlzYWJsZSBPUEVOQ0RNIGJ5IGRlZmF1bHQuCisKIDIwMjAt
MDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAiLVds
aXRlcmFsLWNvbnZlcnNpb24iIHdhcm5pbmcgdG8gWGNvZGUgYmFzZWQgYnVpbGRzIGFuZCBmaXgg
dGhlIGlzc3VlcyBpdCBmaW5kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKaW5kZXggMWIzNDkzMDA0
YzgwLi5lMmNkOTBjNjY1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaApAQCAtNDAxLDYgKzQw
MSwxMCBAQAogI2RlZmluZSBFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAwCiAjZW5kaWYKIAorI2lm
ICFkZWZpbmVkKEVOQUJMRV9PUEVOQ0RNKQorI2RlZmluZSBFTkFCTEVfT1BFTkNETSAwCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMpCiAjZGVmaW5lIEVO
QUJMRV9PUklFTlRBVElPTl9FVkVOVFMgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBmMTk4YTlj
ZWJkLi5mYmI1NzczM2Q1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMjAtMDct
MDMgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dGVkIHRoZSBPcGVuQ0RNIHN1cHBvcnQgaW4gdGhlIENETU9wZW5DRE0gYW5kCisgICAgICAgIENE
TVByb3h5T3BlbkNETSByZWxhdGVkIGNsYXNzZXMuIENETU9wZW5DRE0gY2xhc3NlcyBjaGVjayBm
b3IKKyAgICAgICAgV2lkZXZpbmUgc3VwcG9ydCBpbiBPcGVuQ0RNIGFuZCBnbHVlcyB0aGUgSmF2
YVNjcmlwdCBBUEkgdG8gdGhlCisgICAgICAgIE9wZW5DRE0vVGh1bmRlciBmcmFtZXdvcmsuIEJ1
aWxkaW5nIHRoaXMgaXMgb3B0aW9uYWwgYW5kIC0tb3BlbmNkbQorICAgICAgICBwYXJhbWV0ZXIg
bmVlZHMgdG8gYmUgcGFzc2VkIHRvIGJ1aWxkLXdlYmtpdCB0byBnZXQgaXQuCisKKyAgICAgICAg
Q0RNUHJveHkgcmVsYXRlZCBuZWVkZWQgY2hhbmdlcyBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29u
cy4gRmlyc3QKKyAgICAgICAgaXMgdGhhdCBLZXkgd2FzIGNvbnNpZGVyaW5nIG9ubHkgYSBWZWN0
b3I8dWludDhfdD4gYXMgYSB0eXBlIGFuZAorICAgICAgICBPcGVuQ0RNIGhhcyBzZXNzaW9uIG9i
amVjdHMuIEtleSBpcyBhbHNvIHJlbmFtZWQgdG8gS2V5SGFuZGxlIGFzCisgICAgICAgIHRoaXMg
bmFtZSByZWZsZWN0cyBpbiBhIGJldHRlciB3YXkgdGhlIHB1cnBvc2Ugb2YgdGhlIGNsYXNzLiBU
aGlzCisgICAgICAgIGJsZWVkcyBvdXQgdG8gYWxsIENETVByb3h5IHJlbGF0ZWQgY2xhc3Nlcy4g
Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkKKyAgICAgICAgZ2V0cyBzdXBwb3J0IHRvIHJlbW92ZSBp
dHNlbGYgZnJvbSB0aGUgQ0RNU2Vzc2lvblByb3h5LgorCisgICAgICAgIFJlZ2FyZGluZyBDbGVh
cktleSwgd2UgYWRhcHQgdGhlIGNoYW5nZXMgdG8gdGhlIENETVByb3h5IGNsYXNzZXMKKyAgICAg
ICAgYW5kIGRlLWNhYmxlIHByb3RlY3Rpb24gc3lzdGVtIGZyb20gdGhlIGRlY3J5cHRvcnMgYXMg
dGhlIE9wZW5DRE0KKyAgICAgICAgZGVjcnlwdG9yIGNvdWxkIGhhbmRsZSBtb3JlIHRoYW4gb25l
IHN5c3RlbS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFlvdVR1YmUgVFYgMjAxOSB0ZXN0cyBh
cmUgZ3JlZW4uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3Bl
bkNETVR5cGVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6dGFr
ZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5z
S2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjprZXlIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZv
cktleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxh
YmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWls
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5
SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JL
ZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94
eTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHk6OnJlbW92ZUZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0
YXR1c0N1cnJlbnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlIYW5kbGU6OktleUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFu
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnJl
bGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVV0aWxpdGllcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJl
YW1lci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVDbGVhcktleTo6c3VwcG9ydHNJbml0RGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OnNhbml0aXplUmVzcG9u
c2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpwYXJlbnRJbnN0YW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzT3BlbkNETVJhbmtlZCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplR1N0
cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZVZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0
dGFjaG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
RmFjdG9yeUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5OjpwbGF0
Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKG9wZW5DRE1MaWNlbnNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0RGF0YU1ENSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXNzaW9uTG9hZEZhaWx1cmVGcm9tT3BlbkNETSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVu
Q0RNOjpkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06
OmNyZWF0ZVNoYXJlZE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3Rv
cnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3BlbkNETTo6Y3Jl
YXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5DRE06OnN1cHBv
cnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVzdG5lc3NlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlm
aWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9y
aWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3Bl
bkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5D
RE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVTZXNzaW9uSWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpDRE1JbnN0YW5j
ZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjppbml0aWFs
aXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNQYXlsb2FkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6cGF5bG9hZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnBheWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNUeXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6dHlwZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnR5cGVPciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5l
cmF0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdGF0dXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5VXBkYXRlZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRh
dGVEb25lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETTo6ZXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNOjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpzZXNzaW9uRmFpbHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmxvYWRTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU2Vzc2lvbkRlbGV0ZXI6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5
OjpjZW5jU2V0RGVjcnlwdGlvbktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5T3BlbkNETTo6Z2V0RGVjcnlwdGlvblNlc3Npb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpkZWNyeXB0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3Ry
ZWFtZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdERhdGE6OnBheWxvYWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjppc1dpZGV2aW5lS2V5U3lzdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jbGVhcl9r
ZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHByb3RlY3Rpb25TeXN0ZW1JZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHRyYW5zZm9ybUNhcHMpOgor
ICAgICAgICAodHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RN
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX29wZW5jZG1f
ZGVjcnlwdF9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKHByb3RlY3Rpb25T
eXN0ZW1JZCk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNE
TURlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAyMC0wNy0wMyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQ29yZS9Tb3VyY2VzLnR4dDogUmVtb3Zl
ICNpZiBFTkFCTEVfR0FNRVBBRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWRkOWY4YjNmMTUxLi5m
ZmFkM2Y5YTc0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVJlcXVpcmVtZW50LmgKICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1S
ZXN0cmljdGlvbnMuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25UeXBl
LmgKKyAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaAogCiAgICAgcGxh
dGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2Ft
ZXBhZFByb3ZpZGVyQ2xpZW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGFiYzBmNTUyODEuLjVhZDhlNjYwODM5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDIxOSw2ICs0MjE5LDggQEAKIAkJQ0RFM0E4NTQxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlv
VHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREUzQTg1MjE3RjVGQ0U2MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYu
aCAqLzsgfTsKIAkJQ0RFM0E4NTcxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERTNBODU1MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0g
Ki87IH07CiAJCUNERTNBODU4MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
RTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLzsg
fTsKKwkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFM0FFMTAyNEI0OTE2OTAw
MTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovOyB9OworCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhF
N0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3Bw
ICovOyB9OwogCQlDREU1NTUyNDI0MDVDQ0YyMDA4QTNEREIgLyogTGVnYWN5Q0RNLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE5OEUwQTE2MDNDRDU5
MDBGRUEzQjEgLyogTGVnYWN5Q0RNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQ0RFNTU1MjUyNDA1Q0NGMjAwOEEzRERCIC8qIExlZ2FjeUNETVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTk4RTBDMTYwM0NGM0MwMEZFQTNCMSAvKiBMZWdhY3lDRE1Qcml2YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RFNTk1OTUxQkYxNkRGMzAw
QTFDQkU4IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTk1OTMxQkYxNjZBRDAwQTFDQkU4
IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tICovOyB9OwpAQCAtMTQzMDUsNiAr
MTQzMDcsOCBAQAogCQlDREUzQTg1MjE3RjVGQ0U2MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZh
dGVBVkYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9UcmFja1ByaXZh
dGVBVkYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFM0E4NTUxN0Y2MDIwNDAw
QzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFM0E4NTYxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlv
VHJhY2tQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RFM0FFMTAyNEI0OTE2OTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDRE1VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RFM0FFMTMyNEI0OTM2RjAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1VdGlsaXRpZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREU1OTU5MzFCRjE2NkFEMDBBMUNCRTggLyogQ0RN
U2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNTk1OTQxQkYxNjZEMTAwQTFDQkU4IC8qIENETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNERTU5NTk2MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODYzLDYg
KzI2ODY3LDcgQEAKIAkJQ0Q5NEE1Q0IxRjcxQ0I0NjAwRjUyNUM1IC8qIGVuY3J5cHRlZG1lZGlh
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDREUzQUUx
MzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlDRDk0QTVEOTFG
NzFDQjlGMDBGNTI1QzUgLyogY2xlYXJrZXkgKi8sCiAJCQkJQ0RGNzU2OUIyMTVDMjNBNDAwRUZD
QjUwIC8qIENETUVuY3J5cHRpb25TY2hlbWUuaCAqLywKIAkJCQlDRDk0QTVEMTFGNzFDQjZCMDBG
NTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8sCkBAIC0yNjg3Nyw2ICsyNjg4Miw3IEBACiAJCQkJ
Q0Q5NEE1RDYxRjcxQ0I2RDAwRjUyNUM1IC8qIENETU1lc3NhZ2VUeXBlLmggKi8sCiAJCQkJQ0Qz
Q0UxMUMyNDA0NTFBRjAwNEJBMDFEIC8qIENETVByaXZhdGUuY3BwICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0RFM0FFMTAyNEI0OTE2
OTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1
MjVENSAvKiBDRE1Qcm94eS5jcHAgKi8sCiAJCQkJQ0Q5NEE1Q0YxRjcxQ0I2MTAwRjUyNUM1IC8q
IENETVByb3h5LmggKi8sCiAJCQkJQ0Q5NEE1Q0MxRjcxQ0I2OTAwRjUyNUM1IC8qIENETVJlcXVp
cmVtZW50LmggKi8sCkBAIC0zMTE4OCw2ICszMTE5NCw3IEBACiAJCQkJRjM0NEM3NTMxMTI5NEQ5
RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBMEU3NzBGMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdBNTQ4NTgwMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0
b3JIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5MTZBMDAxMjhFN0Ug
LyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUI4MUNBRTFGQUE0NDYyMDAz
N0QxRTYgLyogSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTIw
RDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODYwRTZEMjMwREUzMDMwMDQ2MUFBRSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25QdWJsaWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3NjgsNiArMzQ3NzUsNyBA
QAogCQkJCURFQ0E3REI3MUY5RTY3QjYwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTY3LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURFQ0E3REI4MUY5RTY3QjYwMEUzQjY2MSAvKiBVbmlmaWVkU291
cmNlMTY4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQ0E3REI5MUY5RTY3QjYwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTY5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNERTNBRTE0MjRCNDkz
NzAwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QkExRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNzAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREVDQTdERkIxRjlFQjM2NDAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNzEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJREVDQTdERkMxRjlFQjM2NDAwRTNCNjYxIC8qIFVuaWZpZWRTb3Vy
Y2UxNzIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKaW5kZXggNzk1NDdjYmFmMGQ1Li5mNmRmMDcwYmNlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBpZiAoRU5BQkxFX0VO
Q1JZUFRFRF9NRURJQSkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAg
ICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKyAgICAgICAgcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0xODAsNiAr
MTgxLDIzIEBAIGlmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQogICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7TElCR0NSWVBUX0xJQlJBUklFU30gLWxncGctZXJy
b3IKICAgICApCisKKyAgICBpZiAoRU5BQkxFX09QRU5DRE0pCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNE
TV9JTkNMVURFX0RJUlN9CisgICAgICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQor
CisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCisgICAgICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBp
ZiAoVVNFX0NBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5k
ZXggMjRkMjBiNjQ2OGJhLi5kZGY3YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcApAQCAtMTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRC
dWZmZXI6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRh
dGEoKTsKIH0KIAorY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEoKSk7Cit9CisKIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURh
dGEoc2l6ZV90IHBvc2l0aW9uKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9u
IDwgbV9zaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4
ZmU3MDFiMTliLi41MWVlNmQ0ZmMxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCkBAIC0xMDYsNiArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNl
Z21lbnRzIHVzaW5nIGJlZ2luKCkgYW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1
ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7Cisg
ICAgY29uc3QgdWludDhfdCogZGF0YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0
ZXMgYW4gQXJyYXlCdWZmZXIgYW5kIGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRz
IHRvIHRoYXQKICAgICAvLyBBcnJheUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1
ZmZlcnMgaW50byBhIGZsYXQgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZj
ZDY2YWQxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENs
ZWFyS2V5LAogICAgICAgICBGYWlyUGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lm
IEVOQUJMRShPUEVOQ0RNKQorICAgICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2
aXJ0dWFsIEltcGxlbWVudGF0aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVBy
b3h5LmNwcAppbmRleCAxYzQ2MmYwYjY1NDMuLmYyYTVmMzE3NjZhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC05MSwzNSArOTIsNDIgQEAgc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0
cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKIAogfSAvLyBuYW1lc3BhY2Uge30KIAot
U3RyaW5nIEtleTo6aWRBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjppZEFzU3Ry
aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3Ry
aW5nKG1faWQpLCAiXSIpOwogfQogCi1TdHJpbmcgS2V5Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QK
K2Jvb2wgS2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQmJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3Ry
aW5nKG1fdmFsdWUpLCAiXSIpOworICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAg
IG1fdmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNL
ZXlJRChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewotICAgIHJldHVybiBtX2tleXMu
ZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgcmV0
dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9y
ZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7CiAgICAgfSkgIT0g
V1RGOjpub3RGb3VuZDsKIH0KIAogdm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUm
IG90aGVyKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1
IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBrZXkgOiBvdGhlcikgewogICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2ls
bCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKICAgICAgICAgLy8gaW4g
dGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/
IFdoaWNoIGlzICJuZXdlciI/CiAgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBl
eHRyYSBjb21wbGV4aXR5LgotICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNv
bnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsg
fSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgc2l6ZV90IGtleVdpdGhNYXRjaGluZ0tleUlE
SW5kZXggPSBtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4m
IHN0b3JlZEtleSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KTsKKyAgICAgICAgaWYg
KGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAg
IG1fa2V5cy5hcHBlbmQoa2V5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gTk9URTog
VGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8g
aWdub3JlIGl0LgotICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3Jl
ZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleXMgd2l0aCB0
aGUgc2FtZSBJRCEiKTsKKyAgICAgICAgICAgIEFTU0VSVChrZXktPnZhbHVlKCkgPT0gbV9rZXlz
W2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdLT52YWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
IAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTEyOSwxNSArMTM3LDE1IEBAIHZvaWQgS2V5U3RvcmU6
Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9
CiAKLUNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlz
QXNSZWxlYXNlZCgpIGNvbnN0CitDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBL
ZXlTdG9yZTo6YWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykg
Y29uc3QKIHsKICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0
dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYg
a2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0
dXMuc2Vjb25kID0gc3RhdHVzOwogICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJv
b2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29s
IEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQog
ewogICAgIGJvb2wgZGlkS2V5U3RvcmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtl
eSA6IG5ld0tleXMpIHsKQEAgLTE0NywxNiArMTU1LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtl
eXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3Jl
Q2hhbmdlOwogfQogCi1ib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29s
IEtleVN0b3JlOjphZGQoUmVmUHRyPEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRT
dG9yZUNoYW5nZSA9IGZhbHNlOwotICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4
ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkp
IHsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0
Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAg
IHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1h
dGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdp
dGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXkt
PnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNo
YW5nZSA9IGtleVdpdGhNYXRjaGluZ0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3Jl
Q2hhbmdlKQorICAgICAgICAgICAga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElE
ICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOyAgICAgIAogICAgICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyAr
MTc4LDcgQEAgYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAv
LyBOT1RFOiBUaGlzIGlzIG5vdCBhcyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBh
bGwKICAgICAgICAgLy8gcHJhY3RpY2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVt
IG9mIDIga2V5cy4KICAgICAgICAgc3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5k
KCksCi0gICAgICAgICAgICBbXShjb25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtl
eT4mIGIpIHsKKyAgICAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25z
dCBSZWZQdHI8S2V5SGFuZGxlPiYgYikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpi
OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTgzLDcgKzE5Myw3IEBAIHZvaWQgS2V5U3Rv
cmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVt
b3ZlKGtleSk7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYg
a2V5KQorYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkp
CiB7CiAgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyMTQsMTEg
QEAgYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0
dXJuIHN0b3JlQ2hhbmdlZDsKIH0KIAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6
a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2NvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+JiBLZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQp
IGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAg
aWYgKCprZXkgPT0ga2V5SUQpCi0gICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFs
c2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSAr
MjQ4LDExIEBAIHZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGlu
c3RhbmNlKQogICAgIG1faW5zdGFuY2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IENETVByb3h5OjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
UmVmUHRyPEtleUhhbmRsZT4gQ0RNUHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtl
eUlEKSBjb25zdAogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwog
ICAgIEFTU0VSVChtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4g
bV9rZXlTdG9yZS5rZXlWYWx1ZShrZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFu
ZGxlKGtleUlEKTsKIH0KIAogdm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBj
b25zdApAQCAtMjYxLDcgKzI3MSw3IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KCkgY29uc3QKICAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQog
Ci1PcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4g
Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29u
c3QKIHsKICAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxs
eSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVj
cnlwdG9ycyBvbmx5IGdldApAQCAtMjgxLDMyICsyOTEsNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKQogCiAgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1
ZShrZXlJRCk7CisgICAgICAgIFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShr
ZXlJRCk7CisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIH0KICAgICAKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQg
JXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZh
aWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wg
Q0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAK
LWJvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAorYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAg
ICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxl
PiBoYW5kbGUgPSBrZXlIYW5kbGUoa2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFu
ZGxlLnJlbGVhc2VOb25OdWxsKCkpOworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQ+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlE
KSBjb25zdAoreworICAgIGlmIChhdXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRs
ZShrZXlJRCkpCisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1
ZSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkKQEAgLTM2MCw2ICszNzksMTggQEAgdm9pZCBDRE1J
bnN0YW5jZVByb3h5Ojp0cmFja1Nlc3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkm
IHNlc3Npb24pCiAgICAgbV9zZXNzaW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBp
bnN0YW5jZSkKKyAgICA6IG1faW5zdGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpyZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgp
Cit7CisgICAgaWYgKCFtX2luc3RhbmNlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbnN0YW5j
ZS0+cmVtb3ZlU2Vzc2lvbigqdGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaAppbmRleCBhOWU3YmNkOTExYjEuLjRi
NzI0YmY5M2FiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Qcm94eS5oCkBAIC0zOCwzMSArMzgsNTEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5D
RE0pCisjaW5jbHVkZSA8bWVtb3J5PgorCitzdHJ1Y3QgT3BlbkNETVNlc3Npb247CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxL
ZXk+IHsKK3VzaW5nIEtleUlEVHlwZSA9IFZlY3Rvcjx1aW50OF90PjsKK3VzaW5nIEtleUhhbmRs
ZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8CisgICAgVmVjdG9yPHVpbnQ4X3Q+CisjaWYgRU5BQkxF
KE9QRU5DRE0pCisgICAgLCBzdGQ6OnNoYXJlZF9wdHI8T3BlbkNETVNlc3Npb24+CisjZW5kaWYK
Kz47CisKK2NsYXNzIEtleUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxLZXlI
YW5kbGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1czsKIAotICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5U3RhdHVz
IHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZh
bHVlKQorICAgIHN0YXRpYyBSZWZQdHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1
cywgS2V5SURUeXBlJiYga2V5SUQsIEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIGtleUhhbmRsZVZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1cywgV1RG
TW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEtleUhhbmRsZShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleUhhbmRs
ZVZhbHVlKSkpOwogICAgIH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1faWQu
c2l6ZSgpKTsgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQotICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CisgICAgYm9vbCB0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZh
cmlhbnQmJik7CisKKyAgICBjb25zdCBLZXlJRFR5cGUmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQorICAgIGNvbnN0IEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2YWx1ZSgpIHsgcmV0
dXJuIG1fdmFsdWU7IH0KICAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KKyAgICBib29sIGlzU3RhdHVzQ3VycmVudGx5VmFsaWQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2Fi
bGUgfHwgbV9zdGF0dXMgPT0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJl
c3RyaWN0ZWQgfHwKKyAgICAgICAgICAgIG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOworICAgIH0KIAogICAgIFN0cmluZyBpZEFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgIC8v
IFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtl
eSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9Ci0gICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQotICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJl
dHVybiBrID09IGtleUlEOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSYg
azEsIGNvbnN0IEtleSYgazIpCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlI
YW5kbGUgJmsxLCBjb25zdCBLZXlIYW5kbGUgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1f
aWQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmaywgY29u
c3QgS2V5SURUeXBlJiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlJRFR5cGUmIGtleUlELCBjb25zdCBLZXlIYW5k
bGUgJmspIHsgcmV0dXJuIGsgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgS2V5SGFuZGxlJiBrMSwgY29uc3QgS2V5SGFuZGxlJiBrMikKICAgICB7CiAgICAgICAg
IC8vIEtleSBJRHMgYXJlIGNvbXBhcmVkIGFzIGZvbGxvd3M6IEZvciBrZXkgSURzIEEgb2YgbGVu
Z3RoIG0gYW5kCiAgICAgICAgIC8vIEIgb2YgbGVuZ3RoIG4sIGFzc2lnbmVkIHN1Y2ggdGhhdCBt
IDw9IG4sIGxldCBBIDwgQiBpZiBhbmQgb25seQpAQCAtODQsMTIgKzEwNCwxMiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG51bVNlc3Npb25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNlczsgfQogICAgIGZyaWVu
ZCBjbGFzcyBLZXlTdG9yZTsKIAotICAgIEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWlu
dDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUpCi0gICAgICAgIDogbV9z
dGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlW
YWx1ZSkpIHsgfQorICAgIEtleUhhbmRsZShLZXlTdGF0dXMgc3RhdHVzLCBLZXlJRFR5cGUmJiBr
ZXlJRCwgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiYga2V5SGFuZGxlVmFsdWUpCisgICAgICAgIDog
bV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShr
ZXlIYW5kbGVWYWx1ZSkpIHsgfQogCiAgICAgS2V5U3RhdHVzIG1fc3RhdHVzOwotICAgIFZlY3Rv
cjx1aW50OF90PiBtX2lkOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIEtleUlE
VHlwZSBtX2lkOworICAgIEtleUhhbmRsZVZhbHVlVmFyaWFudCBtX3ZhbHVlOwogICAgIHVuc2ln
bmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07CiB9OwogCkBAIC05NywxOCArMTE3LDIx
IEBAIGNsYXNzIEtleVN0b3JlIHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3Ig
PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvcjsKIAotICAgIGJvb2wgY29udGFp
bnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICB2b2lkIG1l
cmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Ci0gICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShj
b25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIEtleVN0b3JlKCkgPSBkZWZhdWx0OworCisgICAg
Ym9vbCBjb250YWluc0tleUlEKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgbWVy
Z2UoY29uc3QgS2V5U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJik7CiAgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQot
ICAgIGJvb2wgYWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOwotICAgIGJvb2wgYWRkKFJl
ZlB0cjxLZXk+JiYpOwotICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAg
Ym9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJik7CisgICAgYm9vbCBhZGQo
UmVmUHRyPEtleUhhbmRsZT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleUhh
bmRsZT4mKTsKICAgICBib29sIGhhc0tleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgp
OyB9CiAgICAgdW5zaWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0OwotICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNl
ZCgpIGNvbnN0OworICAgIGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXlIYW5kbGUoY29uc3Qg
S2V5SURUeXBlJikgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBcyhDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1cykgY29uc3Q7CiAgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlzLmlzRW1wdHkoKTsgfQogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJu
IG1fa2V5cy5iZWdpbigpOyB9CiAgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
cy5iZWdpbigpOyB9CkBAIC0xMjAsNyArMTQzLDcgQEAgcHVibGljOgogICAgIGF1dG8gcmVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
UmVmUHRyPEtleT4+IG1fa2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5
czsKIH07CiAKIGNsYXNzIENETUluc3RhbmNlUHJveHk7CkBAIC0xMjksNyArMTUyLDcgQEAgY2xh
c3MgQ0RNSW5zdGFuY2VQcm94eTsKIC8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRl
Y3J5cHRvcnMpLgogY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q0RNUHJveHk+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4S2V5
V2FpdFRpbWVTZWNvbmRzID0gNV9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhL
ZXlXYWl0VGltZVNlY29uZHMgPSA3X3M7CiAKICAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVm
YXVsdDsKIApAQCAtMTQzLDEzICsxNjYsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVk
OgotICAgIFZlY3Rvcjx1aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdDsKLSAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKLSAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OwotICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBSZWZQdHI8S2V5SGFuZGxlPiBrZXlIYW5kbGUoY29u
c3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgS2V5SURU
eXBlJikgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBLZXlJRFR5
cGUmKSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gdHJ5V2FpdEZvcktleUhh
bmRsZShjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxl
Pj4gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIE9w
dGlvbmFsPEtleUhhbmRsZVZhbHVlVmFyaWFudD4gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoY29uc3Qg
S2V5SURUeXBlJikgY29uc3Q7CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0
OwogICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKyAgICBjb25zdCBDRE1J
bnN0YW5jZVByb3h5KiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAog
cHJpdmF0ZToKICAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OwpAQCAtMTg0LDE0ICsy
MDksMjQgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPENETVBy
b3h5RmFjdG9yeSo+JiByZWdpc3RlcmVkRmFjdG9yaWVzKCk7CiB9OwogCitjbGFzcyBDRE1JbnN0
YW5jZVByb3h5OworCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1J
bnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Q
cm94eSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IG1faW5zdGFuY2UuY2xlYXIo
KTsgfQorICAgIHZvaWQgcmVtb3ZlRnJvbUluc3RhbmNlUHJveHkoKTsKKworcHJvdGVjdGVkOgor
ICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKKyAgICBjb25z
dCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0YW5jZTsgfQorCitwcml2YXRlOgorICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VQ
cm94eT4gbV9pbnN0YW5jZTsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9u
IG1hbmFnZW1lbnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKIC8vIGZyb20g
InJlYWwgQ0RNIiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgotY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6
IHB1YmxpYyBDRE1JbnN0YW5jZSB7CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENE
TUluc3RhbmNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gewogcHVi
bGljOgogICAgIGV4cGxpY2l0IENETUluc3RhbmNlUHJveHkoY29uc3QgU3RyaW5nJiBrZXlTeXN0
ZW0pCiAgICAgewpAQCAtMjA3LDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFs
bEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CiAKICAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkg
bWV0aG9kcyAtIG1haW4gdGhyZWFkIG9ubHkuCi0gICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgp
IGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAg
ICBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5n
Rm9yS2V5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1EZWNy
eXB0b3JzV2FpdGluZ0ZvcktleSA+IDA7IH0KICAgICB2b2lkIHNldFBsYXllcihNZWRpYVBsYXll
ciogcGxheWVyKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fcGxheWVyID0gcGxheWVyOyB9
CiAKQEAgLTIxNSw2ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zv
cktleSgpOwogICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKIAorICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvbihjb25zdCBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikgeyBtX3Nl
c3Npb25zLnJlbW92ZShzZXNzaW9uKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlRGVjcnlw
dGlvblJlc291cmNlcygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0
aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTg4
NWFkNmU1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBD
RE1VdGlsaXRpZXMgeworCitSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29u
c3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJz
IHdob3NlIHNpemUgZG9lc24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgor
ICAgIHNpemVfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUg
cm9vdCBvYmplY3QgKGlmIGFueSkuCisgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIUpTT046OlZh
bHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit9Owor
Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43NGY1MTViMGJkMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGls
aXRpZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1
ZmZlcjsKKworbmFtZXNwYWNlIENETVV0aWxpdGllcyB7CisKK1JlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImKTsKKworfTsKKworfTsKKworI2Vu
ZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHAKaW5kZXggNjUzMjJlZDk5ZTk3Li5lNmNjMjJkOTBjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1D
bGVhcktleS5jcHAKQEAgLTM0LDM2ICszNCwxOSBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNv
bmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJD
RE1TZXNzaW9uVHlwZS5oIgorI2luY2x1ZGUgIkNETVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIklu
aXREYXRhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIC8vIEZh
aWwgb24gbGFyZ2UgYnVmZmVycyB3aG9zZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQg
dW5zaWduZWQgaW50ZWdlci4KLSAgICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7Ci0gICAg
aWYgKHNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBK
U09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgotICAgIFN0cmluZyBqc29u
IHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IG9iamVjdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNl
TGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
Ok9iamVjdCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGlu
IHRoZSByb290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGlu
ZyB0byB0aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3JtYXQuCkBAIC03Niw3ICs1OSw3IEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29u
c3QgSlNPTjo6T2JqZWN0JiByb290CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0Fy
cmF5KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8
S2V5Pj4gZGVjb2RlZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBkZWNvZGVk
S2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdp
bigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0
byYgdmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsK
QEAgLTkxLDExICs3NCwxMiBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdAogICAgICAgICAgICAg
aWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdl
dFN0cmluZygiayIsIGtleVZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKLSAg
ICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0p
IHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCisg
ICAgICAgICAgICBLZXlJRFR5cGUga2V5SUREYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGtleUhhbmRsZVZhbHVlRGF0YTsKKyAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlW
YWx1ZSwgeyBrZXlIYW5kbGVWYWx1ZURhdGEgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZN
b3ZlKGtleVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlI
YW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZN
b3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC00
MDEsNyArMzg1LDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzU2Vzc2lvbnMo
KSBjb25zdAogYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3Qg
QXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBj
b25zdAogewogICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBv
YmplY3QgaW4ga2V5aWRzIGNhc2UuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGluaXREYXRhVHlwZSwgImtleWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkp
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtl
eWlkcyIpICYmIENETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KGluaXREYXRhKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFz
IENFTkMgaW5pdERhdGEuCkBAIC00MTgsNyArNDAyLDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJL
ZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25z
dAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3Bv
bnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UpIGNvbnN0CiB7CiAgICAgLy8gVmFsaWRh
dGUgdGhlIHJlc3BvbnNlIGJ1ZmZlciBhcyBhbiBKU09OIG9iamVjdC4KLSAgICBpZiAoIXBhcnNl
SlNPTk9iamVjdChyZXNwb25zZSkpCisgICAgaWYgKCFDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9i
amVjdChyZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHJl
c3BvbnNlLmNvcHkoKTsKQEAgLTUwNyw3ICs0OTEsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNl
VAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9OwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7CisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcm9vdCA9IENETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsK
ICAgICBpZiAoIXJvb3QpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vz
c2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9w
dCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwpAQCAtNTI0LDcgKzUwOCw3IEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9u
SWQsIExpY2Vuc2VUCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtl
eXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9t
KG1fa2V5U3RvcmUpOworICAgICAgICAgICAgcGFyZW50SW5zdGFuY2UoKS5tZXJnZUtleXNGcm9t
KG1fa2V5U3RvcmUpOwogICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIApAQCAtNTM0LDcgKzUxOCw3IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFj
a25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtu
b3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGFyZW50SW5z
dGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIHBhcmVudEluc3Rh
bmNlKCkucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CiAgICAgICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVs
bG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CkBAIC01OTIs
NyArNTc2LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lv
bkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0
aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFu
ZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0Fz
UmVsZWFzZWQoKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlT
dG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsK
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsKICAgICAgICAgLy8gQ29u
c3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQs
IGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CkBAIC02MjEsNiArNjA1LDEzIEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcm
KQogewogfQogCitDRE1JbnN0YW5jZUNsZWFyS2V5JiBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6cGFyZW50SW5zdGFuY2UoKSBjb25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0
YW5jZVByb3h5KCk7CisgICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q0RNSW5zdGFuY2VDbGVhcktleSY+KCppbnN0YW5jZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuaAppbmRleCA4YmYzNjI3MmFkYjYuLjEwNzkwODYwODBmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5oCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25h
bDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwog
fTsKIAotY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5j
ZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xh
c3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsK
IHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5z
dGFuY2VDbGVhcktleSgpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIGNsYXNzIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblBy
b3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5j
ZUNsZWFyS2V5JiBwYXJlbnQpCi0gICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsg
fQorICAgICAgICA6IENETUluc3RhbmNlU2Vzc2lvblByb3h5KHBhcmVudCkgeyB9CiAgICAgdm9p
ZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFU
eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmlu
YWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
dm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKQEAgLTExNiw4ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlw
ZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVj
b3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKIHByaXZhdGU6CisgICAgQ0RNSW5z
dGFuY2VDbGVhcktleSYgcGFyZW50SW5zdGFuY2UoKSBjb25zdDsKKwogICAgIFN0cmluZyBtX3Nl
c3Npb25JRDsKLSAgICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOwogICAg
IEtleVN0b3JlIG1fa2V5U3RvcmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmlu
ZGV4IDhhYzlhYjMxOGU2Zi4uZmVjM2QyMzkyYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcApAQCAtNTAsNiArNTAsOSBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNp
bmNsdWRlICJXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIgorI2lmIEVOQUJMRShP
UEVOQ0RNKQorI2luY2x1ZGUgIldlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNl
bmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yNzUsNiArMjc4LDIyIEBAIGJv
b2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4mJiBvcHRpb25z
KQogICAgIHJldHVybiBpc0dTdHJlYW1lckluaXRpYWxpemVkOwogfQogCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisvLyBXZWJNIGRvZXMgbm90IHNwZWNp
ZnkgYSBwcm90ZWN0aW9uIHN5c3RlbSBJRCBzbyBpdCBjYW4gaGFwcGVuIHRoYXQKKy8vIHRoZSBD
bGVhcktleSBkZWNyeXB0b3IgaXMgY2hvc2VuIGluc3RlYWQgb2YgdGhlIE9wZW5DRE0gb25lIGZv
cgorLy8gV2lkZXZpbmUgKGFuZCB2aWNldmVyc2EpIHdoaWNoIGNhbiBjYW4gY3JlYXRlIGNoYW9z
LiBUaGlzIGlzIGFuCisvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgaW4gcnVuIHRpbWUg
aWYgd2UgcHJlZmVyIHRvIHJhbmsgaGlnaGVyCisvLyBPcGVuQ0RNIG9yIENsZWFyS2V5LiBJZiB3
ZSB3YW50IHRvIHJ1biB0ZXN0cyB3aXRoIE9wZW5DRE0sIHdlIG5lZWQKKy8vIHRvIHNldCB0aGlz
IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIE9wZW5DRE0gYW5kIHRoYXQgZGVjcnlwdG9yIHdpbGwK
Ky8vIGJlIHJhbmtlZCBoaWdoZXIgd2hlbiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIHN5c3RlbSBz
ZXQgKGFzIGluCisvLyBXZWJNKS4KK2Jvb2wgaXNPcGVuQ0RNUmFua2VkKCkKK3sKKyAgICBjb25z
dCBjaGFyKiB2YWx1ZSA9IGdfZ2V0ZW52KCJXRUJLSVRfRU1FX1JBTktfUFJJT1JJVFkiKTsKKyAg
ICByZXR1cm4gdmFsdWUgJiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIk9wZW5DRE0i
KTsKK30KKyNlbmRpZgorCiBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktp
dEVsZW1lbnRzKCkKIHsKICAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKQEAgLTI4Myw3
ICszMDIsMTEgQEAgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVt
ZW50cygpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAg
ICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JB
TktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisgICAgICAg
IGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5L
X1BSSU1BUlkgKyAyMDAsIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworI2lmIEVOQUJM
RShPUEVOQ0RNKQorICAgICAgICB1bnNpZ25lZCBvcGVuQ0RNUmFuayA9IGlzT3BlbkNETVJhbmtl
ZCgpID8gMzAwIDogMTAwOworICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAi
d2Via2l0b3BlbmNkbSIsIEdTVF9SQU5LX1BSSU1BUlkgKyBvcGVuQ0RNUmFuaywgV0VCS0lUX1RZ
UEVfTUVESUFfT1BFTkNETV9ERUNSWVBUKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQpAQCAtMzgyLDYgKzQwNSwxMyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZVNoYXJlZEJ1ZmZlcigpCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCp0aGlzKTsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IEdzdE1hcHBlZEJ1ZmZlcjo6
Y3JlYXRlVmVjdG9yKCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rv
ci5hcHBlbmQoZGF0YSgpLCBzaXplKCkpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIGJvb2wg
aXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBHUmVm
UHRyPEdzdFBsdWdpbj4gcGx1Z2luID0gYWRvcHRHUmVmKGdzdF9yZWdpc3RyeV9maW5kX3BsdWdp
bihnc3RfcmVnaXN0cnlfZ2V0KCksIG5hbWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRl
eCBhMWU1NjI0NGIxN2UuLjAyYTAyYzA1Nzc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApA
QCAtNzMsNiArNzMsOSBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9y
PFN0cmluZz4+JiYgPSBXVEY6Om51bGxvcHQpOwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5k
UmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3Qg
Y2hhciogbmljayk7CiB1aW50NjRfdCB0b0dzdFVuc2lnbmVkNjRUaW1lKGNvbnN0IE1lZGlhVGlt
ZSYpOworI2lmIEVOQUJMRShPUEVOQ0RNKQorYm9vbCBpc09wZW5DRE1SYW5rZWQoKTsKKyNlbmRp
ZgogCiBpbmxpbmUgR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAm
bWVkaWFUaW1lKQogewpAQCAtODEsNiArODQsMTEgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dz
dENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIAogY2xhc3MgR3N0TWFwcGVk
QnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1ZmZlcj4gewog
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoY29uc3Qg
R1JlZlB0cjxHc3RCdWZmZXI+JiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIuZ2V0KCksIGZsYWdzKTsKKyAgICB9CisKICAgICBz
dGF0aWMgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBH
c3RNYXBGbGFncyBmbGFncykKICAgICB7CiAgICAgICAgIEdzdE1hcEluZm8gaW5mbzsKQEAgLTEw
Niw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXplKTsgfQogICAgIGJvb2wgaXNTaGFyYWJsZSgp
IGNvbnN0IHsgcmV0dXJuICEobV9pbmZvLmZsYWdzICYgR1NUX01BUF9XUklURSk7IH0KICAgICBS
ZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gY3JlYXRlVmVjdG9yKCk7CiAKIHByaXZhdGU6CiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1
ZmZlciogYnVmZmVyLCBHc3RNYXBJbmZvJiYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYTM0YzU1MjJhY2UxLi5jNzkzNjQ3NTJh
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
CkBAIC0zMDIsNiArMzAyLDExIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAKICAgICBtX3BsYXllciA9IG51bGxwdHI7CiAgICAg
bV9ub3RpZmllci0+aW52YWxpZGF0ZSgpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkg
JiYgRU5BQkxFKE9QRU5DRE0pCisgICAgaWYgKG1fY2RtSW5zdGFuY2UpCisgICAgICAgIG1fY2Rt
SW5zdGFuY2UtPnJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCk7CisjZW5kaWYKIH0KIAogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKQEAgLTM1MTgsNyAr
MzUyMyw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlv
bkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmIGluaXRECiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEu
cGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQgJXMgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5w
YXlsb2FkQ29udGFpbmVyVHlwZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICBpbml0RGF0
YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFzIiwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5kYXRh
KCkpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIHdlYWtUaGlzLT5tX3Bs
YXllci0+aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENvbnRh
aW5lclR5cGUoKSwgaW5pdERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCmluZGV4
IDBmOWE2OGQyY2Q2ZC4uMzdlODQ3MDZlMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFj
dG9yeUdTdHJlYW1lci5jcHAKQEAgLTMzLDE3ICszMywyOSBAQAogCiAjaW5jbHVkZSAiQ0RNUHJv
eHlDbGVhcktleS5oIgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3BlbkNE
TS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDRE1GYWN0b3J5Ojpw
bGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykK
IHsKICAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigp
KTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5
T3BlbkNETTo6c2luZ2xldG9uKCkpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxDRE1Qcm94eUZhY3Rv
cnkqPiBDRE1Qcm94eUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoKQogewogICAg
IFZlY3RvcjxDRE1Qcm94eUZhY3RvcnkqPiBmYWN0b3JpZXM7CisjaWYgRU5BQkxFKE9QRU5DRE0p
CisgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgZmFjdG9yaWVz
LnVuY2hlY2tlZEFwcGVuZCgmQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNlbHNl
CiAgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisjZW5kaWYKICAgICBm
YWN0b3JpZXMudW5jaGVja2VkQXBwZW5kKCZDRE1Qcm94eUZhY3RvcnlDbGVhcktleTo6c2luZ2xl
dG9uKCkpOwogICAgIHJldHVybiBmYWN0b3JpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkyYmFmMmUzZTEzMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvQ0RNT3BlbkNETS5jcHAKQEAgLTAsMCArMSw2NTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKworI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorI2luY2x1ZGUgIkNE
TVJlc3RyaWN0aW9ucy5oIgorI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVkZSAi
Q0RNVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhS2V5TWVzc2FnZVR5cGUuaCIKKyNpbmNs
dWRlICJNZWRpYUtleVN0YXR1cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0
ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiAoIWRlZmlu
ZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSkKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Vi
a2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKyNlbmRpZgorCitu
YW1lc3BhY2UgeworCisvLyBXZSBhcmUgZG9pbmcgdGhpcyB0byBhdm9pZCBjb25mbGljdCB3aXRo
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzLgordXNpbmcgT3BlbkNETUtleVN0YXR1cyA9
IEtleVN0YXR1czsKKworfQorCitzdGF0aWMgTGljZW5zZVR5cGUgb3BlbkNETUxpY2Vuc2VUeXBl
KFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TGljZW5zZVR5cGUgbGljZW5zZVR5cGUpCit7
CisgICAgc3dpdGNoIChsaWNlbnNlVHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6VGVtcG9yYXJ5OgorICAgICAgICByZXR1cm4gVGVtcG9y
YXJ5OworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6
UGVyc2lzdGVudFVzYWdlUmVjb3JkOgorICAgICAgICByZXR1cm4gUGVyc2lzdGVudFVzYWdlUmVj
b3JkOworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6
UGVyc2lzdGVudExpY2Vuc2U6CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50TGljZW5zZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFRlbXBvcmFyeTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENE
TUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlIHNlc3Npb25Mb2FkRmFpbHVyZUZy
b21PcGVuQ0RNKGNvbnN0IFN0cmluZ1ZpZXcmIGxvYWRTdGF0dXMpCit7CisgICAgaWYgKGxvYWRT
dGF0dXMgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNz
aW9uTG9hZEZhaWx1cmU6Ok5vbmU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlNlc3Npb25Ob3RG
b3VuZCIpCisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFp
bHVyZTo6Tm9TZXNzaW9uRGF0YTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiTWlzbWF0Y2hlZFNl
c3Npb25UeXBlIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxv
YWRGYWlsdXJlOjpNaXNtYXRjaGVkU2Vzc2lvblR5cGU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0g
IlF1b3RhRXhjZWVkZWQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNz
aW9uTG9hZEZhaWx1cmU6OlF1b3RhRXhjZWVkZWQ7CisgICAgcmV0dXJuIENETUluc3RhbmNlU2Vz
c2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpPdGhlcjsKK30KKworCit2b2lkIE9wZW5DRE06OmRl
c3RydWN0T3BlbkNETVNlc3Npb24oT3BlbkNETVNlc3Npb24qIHNlc3Npb24pCit7CisgICAgaWYg
KCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAgb3BlbmNkbV9kZXN0cnVjdF9zZXNzaW9u
KHNlc3Npb24pOworfQorCitPcGVuQ0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBPcGVuQ0RNOjpj
cmVhdGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbihPcGVuQ0RNU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAg
ICByZXR1cm4gT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24oc2Vzc2lvbiwgT3BlbkNETTo6
ZGVzdHJ1Y3RPcGVuQ0RNU2Vzc2lvbik7Cit9CisKK0NETUZhY3RvcnlPcGVuQ0RNJiBDRE1GYWN0
b3J5T3BlbkNETTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RN
RmFjdG9yeU9wZW5DRE0+IHNfZmFjdG9yeTsKKyAgICByZXR1cm4gc19mYWN0b3J5OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETShj
b25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0o
a2V5U3lzdGVtKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q0RNUHJpdmF0ZU9wZW5DRE0+KGtl
eVN5c3RlbSk7Cit9CisKK1JlZlB0cjxDRE1Qcm94eT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0
ZUNETVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0
c0tleVN5c3RlbShrZXlTeXN0ZW0pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5
T3BlbkNETShrZXlTeXN0ZW0pKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3Rv
cnlPcGVuQ0RNOjpzdXBwb3J0ZWRLZXlTeXN0ZW1zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRl
ZEtleVN5c3RlbXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAg
c3RkOjpzdHJpbmcgZW1wdHlTdHJpbmc7CisgICAgICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwg
MCBtZWFucyBzdXBwb3J0ZWQsIGhlbmNlIHNvbWV0aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0
ZWQuCisgICAgICAgIGlmICghb3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVV
dGlsaXRpZXM6OnNfV2lkZXZpbmVLZXlTeXN0ZW0sIGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAg
ICAgICAgICAgc3VwcG9ydGVkS2V5U3lzdGVtcy5hcHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVz
OjpzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBw
b3J0ZWRLZXlTeXN0ZW1zLmlzRW1wdHkoKSAmJiBpc09wZW5DRE1SYW5rZWQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiT3BlbkNETSBpcyB1cC1yYW5r
ZWQgYXMgcHJlZmVycmVkIGRlY3J5cHRvciBidXQgT3BlbkNETSBpcyBub3Qgc3VwcG9ydGluZyBh
bnkgZW5jcnlwdGlvbiBzeXN0ZW0uIElzICIKKyAgICAgICAgICAgICAgICAiVGh1bmRlciBydW5u
aW5nPyBBcmUgdGhlIHBsdWdpbnMgYnVpbHQ/Iik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0p
OworICAgIHJldHVybiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworfQorCitib29sIENETUZhY3RvcnlP
cGVuQ0RNOjpzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAg
ICByZXR1cm4gQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3Rl
bXMoKS5jb250YWlucyhrZXlTeXN0ZW0pOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJp
dmF0ZU9wZW5DRE06OnN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdAoreworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMgVmVjdG9yPEF0b21TdHJpbmc+
IHN1cHBvcnRlZEluaXREYXRhVHlwZXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKKyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDMpOworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9t
U3RyaW5nKCJrZXlpZHMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMudW5jaGVj
a2VkQXBwZW5kKEF0b21TdHJpbmcoImNlbmMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRh
VHlwZXMudW5jaGVja2VkQXBwZW5kKEF0b21TdHJpbmcoIndlYm0iKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHN1cHBvcnRlZEluaXREYXRhVHlwZXM7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5D
RE06OnN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgYXVkaW9DYXBhYmlsaXR5
IDogY29uZmlndXJhdGlvbi5hdWRpb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNk
bV9pc190eXBlX3N1cHBvcnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBhdWRpb0NhcGFi
aWxpdHkuY29udGVudFR5cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGZvciAoYXV0byYgdmlkZW9DYXBhYmlsaXR5IDogY29uZmlndXJhdGlv
bi52aWRlb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9pc190eXBlX3N1cHBv
cnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCB2aWRlb0NhcGFiaWxpdHkuY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06
OnN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgZW1wdHlBdG9t
KCkgfTsKK30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZl
SWRlbnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwg
Y29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QKK3sKKyAgICByZXR1cm4gQ0RNUmVxdWlyZW1l
bnQ6Ok9wdGlvbmFsOworfQorCitDRE1SZXF1aXJlbWVudCBDRE1Qcml2YXRlT3BlbkNETTo6cGVy
c2lzdGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYs
IGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0dXJuIENETVJlcXVpcmVt
ZW50OjpPcHRpb25hbDsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJ
ZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0
cjxDRE1JbnN0YW5jZT4gQ0RNUHJpdmF0ZU9wZW5DRE06OmNyZWF0ZUluc3RhbmNlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlT3BlbkNETShtX2tleVN5c3RlbSkpOwor
fQorCit2b2lkIENETVByaXZhdGVPcGVuQ0RNOjpsb2FkQW5kSW5pdGlhbGl6ZSgpCit7CisgICAg
Ly8gTm8tb3AuCit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2VydmVyQ2Vy
dGlmaWNhdGVzKCkgY29uc3QKK3sKKyAgICAvLyBTZXJ2ZXIgY2VydGlmaWNhdGVzIGFyZSBub3Qg
c3VwcG9ydGVkLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNE
TTo6c3VwcG9ydHNTZXNzaW9ucygpIGNvbnN0Cit7CisgICAgLy8gU2Vzc2lvbnMgYXJlIHN1cHBv
cnRlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6c3Vw
cG9ydHNJbml0RGF0YShjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgaW5pdERhdGEpIGNvbnN0Cit7CisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRh
IGJ1ZmZlciBhcyBhbiBKU09OIG9iamVjdCBpbiBrZXlpZHMgY2FzZS4KKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAia2V5aWRzIikgJiYgQ0RNVXRp
bGl0aWVzOjpwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgQ0VOQyBpbml0RGF0YS4g
RklYTUU6IFZhbGlkYXRlIGl0IGlzIGFjdHVhbGx5IENFTkMuCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSAmJiAhaW5pdERhdGEuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0
RGF0YSBidWZmZXIgYXMgV2ViTSBpbml0RGF0YS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAid2VibSIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZShjb25zdCBT
aGFyZWRCdWZmZXImIHJlc3BvbnNlKSBjb25zdAoreworICAgIHJldHVybiByZXNwb25zZS5jb3B5
KCk7Cit9CisKK09wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplU2Vz
c2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAoreworICAgIHJldHVybiBzZXNz
aW9uSWQ7Cit9CisKK0NETUluc3RhbmNlT3BlbkNETTo6Q0RNSW5zdGFuY2VPcGVuQ0RNKGNvbnN0
IFN0cmluZyYga2V5U3lzdGVtKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShrZXlTeXN0ZW0pCisg
ICAgLCBtX29wZW5DRE1TeXN0ZW0ob3BlbmNkbV9jcmVhdGVfc3lzdGVtKGtleVN5c3RlbS51dGY4
KCkuZGF0YSgpKSkKKyAgICAsIG1fa2V5U3lzdGVtKGtleVN5c3RlbSkKK3sKK30KKwordm9pZCBD
RE1JbnN0YW5jZU9wZW5DRE06OmluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1L
ZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxv
d1BlcnNpc3RlbnRTdGF0ZSwKKyAgICBTdWNjZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAg
ICBjYWxsYmFjayhTdWNjZWVkZWQpOworfQorCit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6c2V0
U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBjZXJ0aWZpY2F0ZSwgIFN1Y2Nl
c3NDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIE9wZW5DRE1FcnJvciBlcnJvciA9IG9wZW5j
ZG1fc3lzdGVtX3NldF9zZXJ2ZXJfY2VydGlmaWNhdGUobV9vcGVuQ0RNU3lzdGVtLmdldCgpLCBj
b25zdF9jYXN0PHVpbnQ4X3QqPihjZXJ0aWZpY2F0ZS0+ZGF0YUFzVUludDhQdHIoKSksCisgICAg
ICAgIGNlcnRpZmljYXRlLT5zaXplKCkpOworICAgIGNhbGxiYWNrKCFlcnJvciA/IFN1Y2NlZWRl
ZCA6IEZhaWxlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTdG9yYWdlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ0RN
SW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETShDRE1JbnN0
YW5jZU9wZW5DRE0mIGluc3RhbmNlKQorICAgIDogQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoaW5z
dGFuY2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX29wZW5DRE1TZXNz
aW9uQ2FsbGJhY2tzLnByb2Nlc3NfY2hhbGxlbmdlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Np
b24qLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhcltdLCBjb25zdCB1aW50OF90IGNoYWxsZW5n
ZVtdLAorICAgICAgICBjb25zdCB1aW50MTZfdCBjaGFsbGVuZ2VMZW5ndGgpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBub3RpZmljYXRpb24iKTsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUlu
c3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBidWZmZXIgPSBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShjaGFsbGVuZ2UsCisgICAgICAgICAgICBjaGFsbGVuZ2VMZW5ndGgp
XSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNr
KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vz
c2lvbkNhbGxiYWNrcy5rZXlfdXBkYXRlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24qLCB2
b2lkKiB1c2VyRGF0YSwgY29uc3QgdWludDhfdCBrZXlJRERhdGFbXSwgY29uc3QgdWludDhfdCBr
ZXlJRExlbmd0aCkgeworICAgICAgICBHU1RfREVCVUcoIkdvdCAna2V5IHVwZGF0ZWQnIE9DRE0g
bm90aWZpY2F0aW9uIik7CisgICAgICAgIEtleUlEVHlwZSBrZXlJRDsKKyAgICAgICAga2V5SUQu
YXBwZW5kKGtleUlERGF0YSwga2V5SURMZW5ndGgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtzZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETSo+KHVzZXJEYXRhKSksIGtleUlEID0gV1RGTW92ZShrZXlJRCldKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2Vzc2lvbi0+a2V5VXBkYXRlZENhbGxiYWNrKFdURk1vdmUoa2V5SUQpKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLmtleXNfdXBkYXRl
ZF9jYWxsYmFjayA9IFtdKGNvbnN0IE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEpIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJHb3QgJ2FsbCBrZXlzIHVwZGF0ZWQnIE9DRE0gbm90aWZpY2F0
aW9uIik7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihz
dGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKV0oKSB7Cisg
ICAgICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2Vzc2lvbi0+a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3MuZXJyb3JfbWVzc2FnZV9jYWxsYmFj
ayA9IFtdKE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIgbWVzc2Fn
ZVtdKSB7CisgICAgICAgIEdTVF9FUlJPUigiR290ICdlcnJvcicgT0NETSBub3RpZmljYXRpb246
ICVzIiwgbWVzc2FnZSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtl
V2Vha1B0cihzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEp
KSwgYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZSwKKyAgICAg
ICAgICAgIHN0cmxlbihtZXNzYWdlKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNl
c3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+ZXJy
b3JDYWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworfQorCitS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Np
b24oKQoreworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNPiBuZXdTZXNzaW9u
ID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0oKnRoaXMpKTsKKyAgICBB
U1NFUlQobmV3U2Vzc2lvbik7CisgICAgdHJhY2tTZXNzaW9uKCpuZXdTZXNzaW9uKTsKKyAgICBy
ZXR1cm4gbmV3U2Vzc2lvbjsKK30KKworY2xhc3MgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHsKKwor
cHVibGljOgorICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZShjb25zdCBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgU3RyaW5nVmlldyBwYXlsb2FkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgc2l6
ZV90IHR5cGVQb3NpdGlvbiA9IHBheWxvYWQuZmluZCgiOlR5cGU6Iik7CisgICAgICAgIFN0cmlu
Z1ZpZXcgcmVxdWVzdFR5cGUocGF5bG9hZC5jaGFyYWN0ZXJzOCgpLCB0eXBlUG9zaXRpb24gIT0g
bm90Rm91bmQgPyB0eXBlUG9zaXRpb24gOiAwKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
MHU7CisgICAgICAgIGlmICghcmVxdWVzdFR5cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxl
bmd0aCgpICE9IHBheWxvYWQubGVuZ3RoKCkpCisgICAgICAgICAgICBvZmZzZXQgPSB0eXBlUG9z
aXRpb24gKyA2OworCisgICAgICAgIGlmIChyZXF1ZXN0VHlwZS5sZW5ndGgoKSA9PSAxKQorICAg
ICAgICAgICAgbV90eXBlID0gbWFrZU9wdGlvbmFsKHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlh
S2V5TWVzc2FnZVR5cGU+KHJlcXVlc3RUeXBlLnRvSW50KCkpKTsKKworICAgICAgICBtX3BheWxv
YWQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwYXlsb2FkLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQs
IHBheWxvYWQubGVuZ3RoKCkgLSBvZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaGFzUGF5bG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fcGF5bG9hZCk7IH0KKyAgICBj
b25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9hZCgpIGNvbnN0JiB7IEFTU0VSVChtX3BheWxv
YWQpOyByZXR1cm4gbV9wYXlsb2FkLnZhbHVlKCk7IH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiYg
cGF5bG9hZCgpICYgeyBBU1NFUlQobV9wYXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgp
OyB9CisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4o
bV90eXBlKTsgfQorICAgIFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZSgpIGNvbnN0
IHsgQVNTRVJUKG1fdHlwZSk7IHJldHVybiBtX3R5cGUudmFsdWUoKTsgfQorICAgIFdlYkNvcmU6
Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZU9yKFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUg
YWx0ZXJuYXRlKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPyBtX3R5cGUudmFsdWUoKSA6IGFsdGVy
bmF0ZTsgfQorCitwcml2YXRlOgorICAgIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiBtX3Bh
eWxvYWQ7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4gbV90eXBl
OworfTsKKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5lcmF0
ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBQYXJzZWRS
ZXNwb25zZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisKKyAgICBpZiAo
IW1fY2hhbGxlbmdlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lc3NhZ2UgPSBX
VEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICBtX25lZWRz
SW5kaXZpZHVhbGl6YXRpb24gPSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZSgpID09IENETUlu
c3RhbmNlU2Vzc2lvbjo6TWVzc2FnZVR5cGU6OkluZGl2aWR1YWxpemF0aW9uUmVxdWVzdDsKKwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFsbGVuZ2VD
YWxsYmFja3MpCisgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgICAgICBtX2No
YWxsZW5nZUNhbGxiYWNrcy5jbGVhcigpOworICAgIH0gZWxzZSBpZiAoIW1fc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgICAgICBzZXNz
aW9uQ2hhbmdlZENhbGxiYWNrKHRydWUsIHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCku
Y29weVJlZigpKTsKKyAgICAgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBwYXJzZWRSZXNwb25zZU1lc3Nh
Z2UuaGFzVHlwZSgpKSB7CisgICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2Uoc3RhdGlj
X2Nhc3Q8Q0RNTWVzc2FnZVR5cGU+KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS50eXBlKCkpLAorICAg
ICAgICAgICAgICAgIFdURk1vdmUocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSkpOwor
ICAgICAgICB9CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVH
KSB8fCAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmco
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3Rh
dHVzKSB7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOgor
ICAgICAgICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBpcmVkIjsKKyAgICBjYXNlIENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuICJS
ZWxlYXNlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0
UmVzdHJpY3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0cmljdGVkIjsKKyAgICBjYXNl
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOgorICAgICAg
ICByZXR1cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiAiU3RhdHVzUGVuZGlu
ZyI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJv
cjoKKyAgICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9
Cit9CisjZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgQ0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgT3BlbkNETUtleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlz
RW1wdHkoKSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNzaW9uLmdldCgpLCBrZXlJRC5k
YXRhKCksIGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOworCisgICAgc3dpdGNoIChzdGF0
dXMpIHsKKyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVkOgorICAgICAgICByZXR1cm4g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7CisgICAgY2FzZSBSZWxlYXNl
ZDoKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNl
ZDsKKyAgICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsKKyAgICBjYXNlIE91dHB1dERv
d25zY2FsZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6
T3V0cHV0RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVy
biBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVzUGVuZGluZzsKKyAgICBjYXNl
IEludGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpJ
bnRlcm5hbEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RN
OjprZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQpCit7CisgICAgR1NUX01FTURV
TVAoInVwZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpOworCisgICAgYXV0
byBrZXlTdGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9ERUJVRygidXBkYXRlZCB3aXRo
IHdpdGgga2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1cykpOworICAgIG1fZG9lc0tl
eVN0b3JlTmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5SGFuZGxlOjpjcmVhdGUoa2V5
U3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgT3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Np
b24oKSkpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRhdGVE
b25lQ2FsbGJhY2soKQoreworICAgIEdTVF9ERUJVRygidXBkYXRlIGRvbmUiKTsKKyAgICBpZiAo
bV9kb2VzS2V5U3RvcmVOZWVkTWVyZ2luZykgeworICAgICAgICBtX2RvZXNLZXlTdG9yZU5lZWRN
ZXJnaW5nID0gZmFsc2U7CisgICAgICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZU9wZW5D
RE0oKTsKKyAgICAgICAgaWYgKGluc3RhbmNlKQorICAgICAgICAgICAgaW5zdGFuY2UtPm1lcmdl
S2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgfQorCisgICAgaWYgKG1fc2Vzc2lvbkNoYW5nZWRD
YWxsYmFja3MuaXNFbXB0eSgpICYmIG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT51cGRh
dGVLZXlTdGF0dXNlcyhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENh
bGxiYWNrIDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFjayh0cnVlLCBudWxscHRyKTsKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6ZXJyb3JDYWxs
YmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIG1lc3NhZ2UpCit7CisgICAgR1NUX0VSUk9SKCJD
RE0gZXJyb3IiKTsKKyAgICBHU1RfTUVNRFVNUCgiZXJyb3IgZHVtcCIsIG1lc3NhZ2UtPmRhdGFB
c1VJbnQ4UHRyKCksIG1lc3NhZ2UtPnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFs
bGVuZ2VDYWxsYmFjayA6IG1fY2hhbGxlbmdlQ2FsbGJhY2tzKQorICAgICAgICBjaGFsbGVuZ2VD
YWxsYmFjaygpOworICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICBmb3Ig
KGF1dG8mIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tz
KQorICAgICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBtZXNzYWdlLmNvcHlSZWYo
KSk7CisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlIGxpY2Vu
c2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+
JiYgaW5pdERhdGFTaGFyZWRCdWZmZXIsCisgICAgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBVVUlEIG9y
IHN5c3RlbSBJRD8KKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VPcGVuQ0RNKCk7Cisg
ICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICBtX2luaXREYXRhID0gSW5pdERhdGEoaW5zdGFuY2Ut
PmtleVN5c3RlbSgpLCBXVEZNb3ZlKGluaXREYXRhU2hhcmVkQnVmZmVyKSk7CisKKyAgICBHU1Rf
VFJBQ0UoIkdvaW5nIHRvIHJlcXVlc3QgYSBuZXcgc2Vzc2lvbiBpZCwgaW5pdCBkYXRhIHNpemUg
JWx1IiwgbV9pbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CisgICAgR1NUX01FTURVTVAoImlu
aXQgZGF0YSIsIG1faW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBtX2luaXRE
YXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKworICAgIE9wZW5DRE1TZXNzaW9uKiBzZXNzaW9uID0g
bnVsbHB0cjsKKyAgICBvcGVuY2RtX2NvbnN0cnVjdF9zZXNzaW9uKCZpbnN0YW5jZS0+b3BlbkNE
TVN5c3RlbSgpLCBvcGVuQ0RNTGljZW5zZVR5cGUobGljZW5zZVR5cGUpLCBpbml0RGF0YVR5cGUu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9pbml0RGF0YS5wYXlsb2FkKCktPmRh
dGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCksIG51bGxwdHIsIDAs
ICZtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLCB0aGlzLCAmc2Vzc2lvbik7CisgICAgaWYgKCFz
ZXNzaW9uKSB7CisgICAgICAgIEdTVF9FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBzZXNzaW9uIik7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXls
b2FkKCk7CisgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwg
ZmFsc2UsIEZhaWxlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zZXNzaW9uLnJl
c2V0KHNlc3Npb24pOworICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpmcm9tVVRGOChvcGVuY2Rt
X3Nlc3Npb25faWQobV9zZXNzaW9uLmdldCgpKSk7CisKKyAgICBhdXRvIGdlbmVyYXRlQ2hhbGxl
bmdlID0gW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGlmIChtX3Nlc3Np
b25JRC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigiY291bGQgbm90IGNyZWF0
ZSBzZXNzaW9uIGlkIik7CisgICAgICAgICAgICBjYWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCB7IH0sIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJjcmVhdGVkIGludmFsaWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgbV9zZXNz
aW9uSUQsIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUluc3RhbmNlUHJv
eHkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9ERUJV
RygiY3JlYXRlZCB2YWxpZCBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGNhbGxiYWNrKG1fbWVzc2FnZS5jb3B5UmVmKCkucmVsZWFzZU5vbk51bGwoKSwg
bV9zZXNzaW9uSUQsIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiwgU3VjY2VlZGVkKTsKKyAgICB9
OworCisgICAgaWYgKG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBpc1ZhbGlkKCkpCisgICAgICAg
IGdlbmVyYXRlQ2hhbGxlbmdlKCk7CisgICAgZWxzZQorICAgICAgICBtX2NoYWxsZW5nZUNhbGxi
YWNrcy5hcHBlbmQoV1RGTW92ZShnZW5lcmF0ZUNoYWxsZW5nZSkpOworfQorCit2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbk9wZW5DRE06OnNlc3Npb25GYWlsdXJlKCkKK3sKKyAgICBmb3IgKGF1dG8m
IHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAg
ICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBudWxscHRyKTsKKyAgICBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGljZW5zZVR5
cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2UsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYm
IGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vzc2lvbklELCBzZXNzaW9uSUQgPT0g
bV9zZXNzaW9uSUQpOworCisgICAgR1NUX1RSQUNFKCJVcGRhdGluZyBzZXNzaW9uICVzIiwgc2Vz
c2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5h
cHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJvb2wgc3VjY2Vzcywg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZU1lc3NhZ2UpIG11dGFibGUgeworICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAg
ICAgICAgaWYgKCFyZXNwb25zZU1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1f
a2V5U3RvcmUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgbV9r
ZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNpbmcgSlNPTiByZXBvbnNlIG1lc3NhZ2VzIGlz
IG11Y2ggY2xlYW5lciB0aGFuIHVzaW5nIHN0cmluZyBwcmVmaXhlcywgSSBiZWxpZXZlIHRoZXJl
CisgICAgICAgICAgICAgICAgLy8gd2lsbCBldmVuIGJlIG90aGVyIHBhcnRzIG9mIHRoZSBzcGVj
IHdoZXJlIG5vdCBoYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpbGwgYmUgYmFkLgorICAgICAgICAg
ICAgICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UocmVzcG9u
c2VNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2VNZXNzYWdlLmhh
c1BheWxvYWQoKSkgeworICAgICAgICAgICAgICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBtZXNz
YWdlID0gV1RGTW92ZShwYXJzZWRSZXNwb25zZU1lc3NhZ2UucGF5bG9hZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHKCJnb3QgbWVzc2FnZSBvZiBzaXplICVsdSIsIG1lc3NhZ2Ut
PnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9NRU1EVU1QKCJtZXNzYWdlIiwgbWVz
c2FnZS0+ZGF0YUFzVUludDhQdHIoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnR5
cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1RGTW92ZShtZXNzYWdlKSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBHU1RfRVJS
T1IoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIiwgcmVzcG9uc2VN
ZXNzYWdlID8gcmVzcG9uc2VNZXNzYWdlLT5zaXplKCkgOiAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1IoInVwZGF0ZSBsaWNl
bnNlIHJlcG9ydGVkIGVycm9yIHN0YXRlIik7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwgbV9zZXNz
aW9uSUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl91cGRhdGUobV9zZXNzaW9uLmdldCgp
LCByZXNwb25zZS0+ZGF0YUFzVUludDhQdHIoKSwgcmVzcG9uc2UtPnNpemUoKSkpCisgICAgICAg
IHNlc3Npb25GYWlsdXJlKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6
bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUX1VO
VVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7CisKKyAgICBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlTWVzc2Fn
ZSkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNlTWVzc2FnZSkKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCwgU2Vz
c2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBVc2luZyBKU09OIHJlcG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBjbGVhbmVy
IHRoYW4gdXNpbmcgc3RyaW5nIHByZWZpeGVzLCBJIGJlbGlldmUgdGhlcmUKKyAgICAgICAgICAg
ICAgICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIgcGFydHMgb2YgdGhlIHNwZWMgd2hlcmUgbm90IGhh
dmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBiZSBiYWQuCisgICAgICAgICAgICAgICAgUGFyc2Vk
UmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFzUGF5bG9hZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2UgPSBXVEZNb3Zl
KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICAgICAgICAgICAgICBH
U1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlLT5kYXRhQXNV
SW50OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgc3RkOjptYWtlX3BhaXIocGFyc2VkUmVzcG9u
c2VNZXNzYWdlLnR5cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKG1lc3NhZ2UpKSwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJtZXNzYWdlIG9mIHNpemUgJWx1
IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIHJlc3BvbnNlTWVzc2FnZSA/IHJlc3BvbnNlTWVzc2Fn
ZS0+c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkLCBTZXNz
aW9uTG9hZEZhaWx1cmU6Ok90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2FnZURhdGEg
PSByZXNwb25zZU1lc3NhZ2UgPyByZXNwb25zZU1lc3NhZ2UtPmRhdGEoKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2FnZVNpemUgPSByZXNwb25zZU1lc3NhZ2UgPyBy
ZXNwb25zZU1lc3NhZ2UtPnNpemUoKSA6IDA7CisgICAgICAgICAgICBTdHJpbmdWaWV3IHJlc3Bv
bnNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXNwb25zZU1lc3NhZ2VEYXRhKSwg
cmVzcG9uc2VNZXNzYWdlU2l6ZSk7CisgICAgICAgICAgICBHU1RfRVJST1IoInNlc3Npb24gJXMg
bm90IGxvYWRlZCwgcmVhc29uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwgcmVzcG9u
c2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCwgc2Vzc2lvbkxv
YWRGYWlsdXJlRnJvbU9wZW5DRE0ocmVzcG9uc2UpKTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Np
b25fbG9hZChtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgpOworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJp
bmcmIHNlc3Npb25JRCwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKKworICAg
IGlmIChtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1wdHkoKSkKKyAgICAgICAgb3BlbmNk
bV9zZXNzaW9uX2Nsb3NlKG1fc2Vzc2lvbi5nZXQoKSk7CisKKyAgICByZW1vdmVGcm9tSW5zdGFu
Y2VQcm94eSgpOworCisgICAgY2FsbGJhY2soKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGlj
ZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKKworICAg
IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShib29sIHN1Y2Nlc3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
KSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgICAgIGNh
bGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpSZWxlYXNlZCksIFdU
Rjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVz
c2FnZShidWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2Uu
aGFzUGF5bG9hZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1l
c3NhZ2UgPSBXVEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAg
ICAgICAgICAgICAgICBHU1RfREVCVUcoInNlc3Npb24gJXMgcmVtb3ZlZCwgbWVzc2FnZSBsZW5n
dGggJWx1IiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlT
dGF0dXM6OlJlbGVhc2VkKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVk
ZWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCBhcyBzZXNz
aW9uICVzIHJlbW92YWwgYW5zd2VyIiwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVz
OjpJbnRlcm5hbEVycm9yKSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoImNvdWxkIG5vdCByZW1vdmUgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lv
bklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxL
ZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJyb3IpLCBXVEY6Om51bGxvcHQsIFN1Y2Nl
c3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9zZXNzaW9u
IHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fcmVtb3ZlKG1fc2Vz
c2lvbi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWlsdXJlKCk7CisKKyAgICByZW1vdmVGcm9t
SW5zdGFuY2VQcm94eSgpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnN0
b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK09wdGlvbmFsPENETUluc3RhbmNlT3BlbkNETSY+IENETUluc3RhbmNlU2Vzc2lv
bk9wZW5DRE06OmNkbUluc3RhbmNlT3BlbkNETSgpIGNvbnN0Cit7CisgICAgYXV0byBpbnN0YW5j
ZSA9IGNkbUluc3RhbmNlUHJveHkoKTsKKyAgICBpZiAoIWluc3RhbmNlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZU9wZW5D
RE0mPigqaW5zdGFuY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNE
TS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1P
cGVuQ0RNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZWViNzU5
YWExNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RN
KQorCisjaW5jbHVkZSAiQ0RNRmFjdG9yeS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIkNETVByaXZhdGUuaCIKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPG9wZW5fY2RtLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgT3BlbkNETSB7CisKK3N0cnVjdCBPcGVuQ0RN
U3lzdGVtRGVsZXRlciB7CisgICAgT3BlbkNETUVycm9yIG9wZXJhdG9yKCkoT3BlbkNETVN5c3Rl
bSogcHRyKSBjb25zdCB7IHJldHVybiBvcGVuY2RtX2Rlc3RydWN0X3N5c3RlbShwdHIpOyB9Cit9
OwordXNpbmcgVW5pcXVlT3BlbkNETVN5c3RlbSA9IHN0ZDo6dW5pcXVlX3B0cjxPcGVuQ0RNU3lz
dGVtLCBPcGVuQ0RNU3lzdGVtRGVsZXRlcj47CisKK3ZvaWQgZGVzdHJ1Y3RPcGVuQ0RNU2Vzc2lv
bihPcGVuQ0RNU2Vzc2lvbiopOworc3RydWN0IE9wZW5DRE1TZXNzaW9uRGVsZXRlciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKE9wZW5DRE1TZXNzaW9uKiBwdHIpIGNvbnN0IHsgZGVzdHJ1Y3RPcGVu
Q0RNU2Vzc2lvbihwdHIpOyB9Cit9OwordXNpbmcgVW5pcXVlT3BlbkNETVNlc3Npb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8T3BlbkNETVNlc3Npb24sIE9wZW5DRE1TZXNzaW9uRGVsZXRlcj47Cit1c2lu
ZyBTaGFyZWRPcGVuQ0RNU2Vzc2lvbiA9IHN0ZDo6c2hhcmVkX3B0cjxPcGVuQ0RNU2Vzc2lvbj47
CitTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBjcmVhdGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbihPcGVuQ0RN
U2Vzc2lvbiogPSBudWxscHRyKTsKKworfSAvLyBuYW1lc3BhY2UgT3BlbkNETQorCitjbGFzcyBD
RE1GYWN0b3J5T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5LCBwdWJsaWMgQ0RNUHJv
eHlGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgQ0RNRmFjdG9yeU9wZW5DRE0mIHNpbmdsZXRvbigpOworCisgICAgdmlydHVhbCB+Q0RN
RmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNUHJp
dmF0ZT4gY3JlYXRlQ0RNKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIFJlZlB0cjxDRE1Qcm94
eT4gY3JlYXRlQ0RNUHJveHkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0
c0tleVN5c3RlbShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBOZXZlckRlc3Ryb3llZDxDRE1GYWN0b3J5T3BlbkNETT47CisgICAgQ0RNRmFjdG9yeU9w
ZW5DRE0oKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDRE1Qcml2YXRlT3BlbkNETSBmaW5hbCA6
IHB1YmxpYyBDRE1Qcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBDRE1Qcml2YXRlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgOiBtX2tl
eVN5c3RlbShrZXlTeXN0ZW0pIHsgfTsKKyAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlT3BlbkNETSgp
ID0gZGVmYXVsdDsKKworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5
cGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uc3Qg
Q0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9y
dHNDb25maWd1cmF0aW9uV2l0aFJlc3RyaWN0aW9ucyhjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0
aW9uKTsKKyAgICB9CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25UeXBlV2l0aENvbmZpZ3VyYXRp
b24oY29uc3QgQ0RNU2Vzc2lvblR5cGUmLCBjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBv
cnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgVmVjdG9yPEF0b21T
dHJpbmc+IHN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0IGZpbmFsOworICAgIENETVJlcXVp
cmVtZW50IGRpc3RpbmN0aXZlSWRlbnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmluYWw7Cisg
ICAgQ0RNUmVxdWlyZW1lbnQgcGVyc2lzdGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5
U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENs
ZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgY29uc3QgZmluYWw7Cisg
ICAgUmVmUHRyPENETUluc3RhbmNlPiBjcmVhdGVJbnN0YW5jZSgpIGZpbmFsOworICAgIHZvaWQg
bG9hZEFuZEluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzU2VydmVyQ2VydGlm
aWNhdGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25zKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcmLCBjb25z
dCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBz
YW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYpIGNvbnN0IGZpbmFsOworICAgIE9w
dGlvbmFsPFN0cmluZz4gc2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJikgY29uc3QgZmlu
YWw7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsKKworY2xhc3MgQ0RN
SW5zdGFuY2VPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHkgeworcHVibGlj
OgorICAgIENETUluc3RhbmNlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7CisgICAg
dmlydHVhbCB+Q0RNSW5zdGFuY2VPcGVuQ0RNKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ0RNSW5z
dGFuY2UKKyAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RNOyB9CisgICAgdm9pZCBp
bml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlv
biYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3RhdGUsIFN1
Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlcnZlckNlcnRpZmljYXRlKFJl
ZjxTaGFyZWRCdWZmZXI+JiYsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNl
dFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgY29uc3QgU3RyaW5n
JiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2tleVN5c3RlbTsgfQorICAgIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKKworICAgIE9w
ZW5DRE1TeXN0ZW0mIG9wZW5DRE1TeXN0ZW0oKSBjb25zdCB7IHJldHVybiAqbV9vcGVuQ0RNU3lz
dGVtLmdldCgpOyB9OworCisgICAgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpIGZp
bmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDRE1J
bnN0YW5jZVByb3h5OjpyZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpOworICAgICAgICBtX29w
ZW5DRE1TeXN0ZW0ucmVzZXQobnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE9wZW5D
RE06OlVuaXF1ZU9wZW5DRE1TeXN0ZW0gbV9vcGVuQ0RNU3lzdGVtOworICAgIFN0cmluZyBtX2tl
eVN5c3RlbTsKK307CisKK2NsYXNzIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0gZmluYWwgOiBw
dWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE0oQ0RNSW5zdGFuY2VPcGVuQ0RNJik7CisKKyAgICB2b2lkIHJlcXVlc3RM
aWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2
b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxTaGFyZWRC
dWZmZXI+JiYsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRT
ZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vz
c2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmlu
ZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lv
bkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJh
Y2smJikgZmluYWw7CisgICAgdm9pZCBzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5n
JikgZmluYWw7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24g
JiYgbV9tZXNzYWdlICYmICFtX21lc3NhZ2UtPmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBzZXRD
bGllbnQoV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGllbnQ+JiYgY2xpZW50KSBmaW5hbCB7
IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIGZp
bmFsIHsgbV9jbGllbnQuY2xlYXIoKTsgfQorCisgICAgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJl
c291cmNlcygpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICAgICAgbV9zZXNzaW9uLnJl
c2V0KG51bGxwdHIpOworICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6cmVsZWFzZURl
Y3J5cHRpb25SZXNvdXJjZXMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8Q0RN
SW5zdGFuY2VPcGVuQ0RNJj4gY2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29uc3Q7CisKKyAgICB1c2lu
ZyBOb3RpZmljYXRpb24gPSB2b2lkIChDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjoqKShSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB1c2luZyBDaGFsbGVuZ2VHZW5lcmF0
ZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcgU2Vzc2lvbkNoYW5nZWRD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoYm9vbCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik+Owor
CisgICAgdm9pZCBjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVy
PiYmKTsKKyAgICB2b2lkIGtleVVwZGF0ZWRDYWxsYmFjayhLZXlJRFR5cGUmJik7CisgICAgdm9p
ZCBrZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgdm9pZCBlcnJvckNhbGxiYWNrKFJlZlB0
cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0
YXR1cyhjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIHNlc3Npb25GYWlsdXJlKCk7
CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgYWxsIG9yaWdpbmFsIHVzZXMgb2YgdGhlc2UgYXR0cmli
dXRlcy4KKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsK
KyAgICBib29sIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgeyBmYWxzZSB9OworICAgIEluaXRE
YXRhIG1faW5pdERhdGE7CisgICAgT3BlbkNETVNlc3Npb25DYWxsYmFja3MgbV9vcGVuQ0RNU2Vz
c2lvbkNhbGxiYWNrcyB7IH07CisgICAgT3BlbkNETTo6VW5pcXVlT3BlbkNETVNlc3Npb24gbV9z
ZXNzaW9uOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWVzc2FnZTsKKyAgICBib29sIG1f
bmVlZHNJbmRpdmlkdWFsaXphdGlvbiB7IGZhbHNlIH07CisgICAgVmVjdG9yPENoYWxsZW5nZUdl
bmVyYXRlZENhbGxiYWNrPiBtX2NoYWxsZW5nZUNhbGxiYWNrczsKKyAgICBWZWN0b3I8U2Vzc2lv
bkNoYW5nZWRDYWxsYmFjaz4gbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrczsKKyAgICBXZWFrUHRy
PENETUluc3RhbmNlU2Vzc2lvbkNsaWVudD4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0RNX0lOU1RBTkNFKFdlYkNvcmU6
OkNETUluc3RhbmNlT3BlbkNETSwgV2ViQ29yZTo6Q0RNSW5zdGFuY2U6OkltcGxlbWVudGF0aW9u
VHlwZTo6T3BlbkNETSk7CisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBF
TkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCmluZGV4
IGU3NzMyYWI5NGU3YS4uY2ZlNGM3YWE1MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5jcHAKQEAgLTEyMSwxMSArMTIxLDE0IEBAIGJvb2wgQ0RNUHJveHlDbGVhcktleTo6
Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKICAgICBW
ZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CiAgICAga2V5SURWZWMuYXBwZW5kKGluLmtleUlELCBp
bi5rZXlJRFNpemVJbkJ5dGVzKTsKIAotICAgIGF1dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZvcktl
eShrZXlJRFZlYyk7CisgICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoa2V5
SURWZWMpOwogICAgIGlmICgha2V5RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShnQ3J5cHRI
YW5kbGUoKSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHVpbnQ4X3Q+PihrZXlEYXRhLnZhbHVlKCkp
KTsKKyAgICBhdXRvJiBrZXlEYXRhVmFsdWUgPSBXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGtl
eURhdGEudmFsdWUoKSk7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2Ny
eV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRsZSgpLCBrZXlEYXRhVmFsdWUuZGF0YSgpLCBrZXlE
YXRhVmFsdWUuc2l6ZSgpKSkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRrZXkpOiAlcyIs
IGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJv
eHlPcGVuQ0RNLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBj
MTBhOWY1OGZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNwcApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eU9wZW5DRE0uaCIK
KworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5j
bHVkZSAiQ0RNT3BlbkNETS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxvcGVu
X2NkbV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCitHU1RfREVCVUdf
Q0FURUdPUllfRVhURVJOKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0Nh
dGVnb3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTk9URTogWW91VHViZSAyMDE5IEVN
RSBjb25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhpcyB0byBiZSA+PTVzLgorY29uc3QgV1RGOjpT
ZWNvbmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dCA9IFdURjo6U2Vjb25kcyg2KTsKKwor
T3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24gQ0RNUHJveHlPcGVuQ0RNOjpnZXREZWNyeXB0
aW9uU2Vzc2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYgaW4pIGNvbnN0Cit7CisgICAgYXV0
byBtYXBwZWRLZXlJRCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGluLmtleUlEQnVmZmVyLCBH
U1RfTUFQX1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5SUQpIHsKKyAgICAgICAgR1NUX0VSUk9S
KCJGYWlsZWQgdG8gbWFwIGtleSBJRCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgYXV0byBrZXlJRCA9IG1hcHBlZEtleUlELT5jcmVhdGVWZWN0b3IoKTsK
KworICAgIGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGtleUlEKTsKKyAg
ICBpZiAoIWtleUhhbmRsZS5oYXNWYWx1ZSgpIHx8ICFrZXlIYW5kbGUudmFsdWUoKS0+aXNTdGF0
dXNDdXJyZW50bHlWYWxpZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEtleUhh
bmRsZVZhbHVlVmFyaWFudCYga2V5RGF0YSA9IGtleUhhbmRsZS52YWx1ZSgpLT52YWx1ZSgpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE9wZW5DRE06OlNoYXJlZE9wZW5DRE1T
ZXNzaW9uPihrZXlEYXRhKSk7CisKKyAgICBhdXRvJiBrZXlWYWx1ZSA9IFdURjo6Z2V0PE9wZW5D
RE06OlNoYXJlZE9wZW5DRE1TZXNzaW9uPihrZXlEYXRhKTsKKworICAgIGlmICgha2V5VmFsdWUp
IHsKKyAgICAgICAgYXV0byBuZXdLZXlWYWx1ZSA9IE9wZW5DRE06OmNyZWF0ZVNoYXJlZE9wZW5D
RE1TZXNzaW9uKG9wZW5jZG1fZ2V0X3N5c3RlbV9zZXNzaW9uKCZzdGF0aWNfY2FzdDxjb25zdCBD
RE1JbnN0YW5jZU9wZW5DRE0qPihpbnN0YW5jZSgpKS0+b3BlbkNETVN5c3RlbSgpLAorICAgICAg
ICAgICAga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCksIHNfbGljZW5zZUtleVJlc3BvbnNlVGlt
ZW91dC5taWxsaXNlY29uZHNBczx1aW50MzJfdD4oKSkpOworICAgICAgICBBU1NFUlQobmV3S2V5
VmFsdWUpOworICAgICAgICBrZXlIYW5kbGUudmFsdWUoKS0+dGFrZVZhbHVlSWZEaWZmZXJlbnQo
V1RGTW92ZShuZXdLZXlWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZTsKK30K
KworYm9vbCBDRE1Qcm94eU9wZW5DRE06OmRlY3J5cHQoQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0
aW9uQ29udGV4dCYgaW5wdXQpCit7CisgICAgT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24g
c2Vzc2lvbiA9IGdldERlY3J5cHRpb25TZXNzaW9uKGlucHV0KTsKKyAgICBpZiAoIXNlc3Npb24p
IHsKKyAgICAgICAgR1NUX0VSUk9SKCJ0aGVyZSBpcyBubyB2YWxpZCBzZXNzaW9uIHRvIGRlY3J5
cHQgZm9yIHRoZSBwcm92aWRlZCBrZXkgSUQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEdTVF9UUkFDRSgiZGVjcnlwdGluZyIpOworICAgIC8vIERlY3J5cHQgY2lwaGVy
LgorICAgIE9wZW5DRE1FcnJvciBlcnJvckNvZGUgPSBvcGVuY2RtX2dzdHJlYW1lcl9zZXNzaW9u
X2RlY3J5cHQoc2Vzc2lvbi5nZXQoKSwgaW5wdXQuZGF0YUJ1ZmZlciwgaW5wdXQuc3Vic2FtcGxl
c0J1ZmZlciwgaW5wdXQubnVtU3Vic2FtcGxlcywKKyAgICAgICAgaW5wdXQuaXZCdWZmZXIsIGlu
cHV0LmtleUlEQnVmZmVyLCAwKTsKKyAgICBpZiAoZXJyb3JDb2RlKSB7CisgICAgICAgIEdTVF9F
UlJPUigiZGVjcnlwdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgJVgiLCBlcnJvckNvZGUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYm
IEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYmZiMDhiZGRlOGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5T3BlbkNETS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAg
ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUg
IkNETUluc3RhbmNlU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBzaG91bGQg
dXNlIHRvIG1ha2UgdXNlIG9mIGEgcGxhdGZvcm0gQ0RNIG1vZHVsZS4KK2NsYXNzIENETVByb3h5
T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENE
TVByb3h5T3BlbkNETSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKK3B1
YmxpYzoKKyAgICBDRE1Qcm94eU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisgICAg
ICAgIDogbV9rZXlTeXN0ZW0oa2V5U3lzdGVtKSB7IH0KKyAgICB2aXJ0dWFsIH5DRE1Qcm94eU9w
ZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1Y3QgRGVjcnlwdGlvbkNvbnRleHQgeworICAg
ICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyOworICAgICAgICBHc3RCdWZmZXIqIGl2QnVmZmVy
OworICAgICAgICBHc3RCdWZmZXIqIGRhdGFCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciogc3Vi
c2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisgICAgfTsKKwor
ICAgIGJvb2wgZGVjcnlwdChEZWNyeXB0aW9uQ29udGV4dCYpOworICAgIGNvbnN0IFN0cmluZyYg
a2V5U3lzdGVtKCkgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KKworcHJpdmF0ZToKKyAgICBPcGVu
Q0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBnZXREZWNyeXB0aW9uU2Vzc2lvbihjb25zdCBEZWNy
eXB0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEp
ICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0
aWVzLmgKaW5kZXggOGE5MmNhM2IxZWE4Li4yMWUyZDU1ZWRmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9V
VElMSVRJRVNfQ0xFQVJLRVlfVVVJRCAiMTA3N2VmZWMtYzBiMi00ZDAyLWFjZTMtM2MxZTUyZTJm
YjRiIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2RlZmluZSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVf
VVRJTElUSUVTX1dJREVWSU5FX1VVSUQgImVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFk
MjFlZCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbml0RGF0YSB7CkBA
IC00OCw2ICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGF5bG9hZCA9IG1hcHBlZEluaXRE
YXRhLT5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKICAgICB9CiAKKyAgICBJbml0RGF0YShjb25zdCBT
dHJpbmcmIHN5c3RlbUlkLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHBheWxvYWQpCisgICAgICAg
IDogbV9zeXN0ZW1JZChzeXN0ZW1JZCkKKyAgICAgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXls
b2FkKSkKKyAgICB7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEmJiBpbml0RGF0
YSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBzb21lIGNvbmZ1c2lvbiBoZXJl
IGFib3V0IGhvdyB0byBkZXRlY3QgdGhlCkBAIC02NCw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9wYXlsb2FkLT5hcHBlbmQoKmluaXREYXRhLnBheWxvYWQoKSk7CiAgICAgfQogCi0gICAg
Y29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5
bG9hZDsgfQorICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBwYXlsb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXlsb2FkOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3lzdGVtSWQ7IH0KICAgICBTdHJpbmcgcGF5bG9hZENvbnRhaW5lclR5cGUo
KSBjb25zdAogICAgIHsKQEAgLTExNSwxNyArMTI0LDMzIEBAIGNsYXNzIEdTdHJlYW1lckVNRVV0
aWxpdGllcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX0Ns
ZWFyS2V5VVVJRCA9IFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJ
RDsKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlLZXlTeXN0ZW0g
PSAib3JnLnczLmNsZWFya2V5IjsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0aWMgY29u
c3RleHByIGNoYXIgY29uc3QqIHNfV2lkZXZpbmVVVUlEID0gV0VCQ09SRV9HU1RSRUFNRVJfRU1F
X1VUSUxJVElFU19XSURFVklORV9VVUlEOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBjb25z
dCogc19XaWRldmluZUtleVN5c3RlbSA9ICJjb20ud2lkZXZpbmUuYWxwaGEiOworI2VuZGlmCiAK
ICAgICBzdGF0aWMgYm9vbCBpc0NsZWFyS2V5S2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lz
dGVtLCBzX0NsZWFyS2V5S2V5U3lzdGVtKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoT1BFTkNETSkK
KyAgICBzdGF0aWMgYm9vbCBpc1dpZGV2aW5lS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lz
dGVtLCBzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBrZXlTeXN0ZW1Ub1V1aWQoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAg
ewogICAgICAgICBpZiAoaXNDbGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pKQogICAgICAgICAg
ICAgcmV0dXJuIHNfQ2xlYXJLZXlVVUlEOwogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgICAg
IGlmIChpc1dpZGV2aW5lS2V5U3lzdGVtKGtleVN5c3RlbSkpCisgICAgICAgICAgICByZXR1cm4g
c19XaWRldmluZVVVSUQ7CisjZW5kaWYKKwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDg2YjdjNjZmYWQ0
Zi4uNTEwM2Q0Y2I5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3Qg
X1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7CiB9OwogCiBzdGF0aWMgdm9pZCBm
aW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyBib29sIGNkbVBy
b3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29u
c3QgUmVmUHRyPENETVByb3h5PiYpOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwg
R3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzKTsKIApAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAog
ICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CiAKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwotICAgIGNlbmNDbGFzcy0+cHJv
dGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
KyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRSKHBy
b3RlY3Rpb25TeXN0ZW1JZCk7CiAgICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NU
X0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2VuY0NsYXNzLT5kZWNyeXB0
ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKQEAgLTEwNiw2ICsxMDcsMTEgQEAgc3Rh
dGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIEdTVF9DQUxMX1BBUkVOVChH
X09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNo
YXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KikKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
K30KKwogc3RhdGljIGJvb2wgY2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKIHsK
ICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCA0N2I1NjBmNzM5MjAuLjE1ZTEzYWJm
YmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0xMzQsMTQgKzEzNCwxNCBA
QCBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBH
c3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAogICAgICAgICAgICAgLy8gY2FuIGNhdXNlIGNhcHMg
bmVnb3RpYXRpb24gZmFpbHVyZXMgd2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVhbXMuCiAgICAg
ICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0
KCksICJiYXNlLXByb2ZpbGUiLCAiY29kZWNfZGF0YSIsICJoZWlnaHQiLCAiZnJhbWVyYXRlIiwg
ImxldmVsIiwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICJwcm9maWxlIiwgInJhdGUiLCAid2lkdGgi
LCBudWxscHRyKTsKIAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29pbmdTdHJ1
Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNzLT5w
cm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXRnb2lu
Z1N0cnVjdHVyZS5nZXQoKSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklORywga2xh
c3MtPnByb3RlY3Rpb25TeXN0ZW1JZChzZWxmKSwKICAgICAgICAgICAgICAgICAib3JpZ2luYWwt
bWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoaW5jb21p
bmdTdHJ1Y3R1cmUpLCBudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gR1NUX1BST1RFQ1RJT05f
VU5TUEVDSUZJRURfU1lTVEVNX0lEIHdhcyBhZGRlZCBpbiB0aGUgR1N0cmVhbWVyCiAgICAgICAg
ICAgICAvLyBkZXZlbG9wZW1lbnQgZ2l0IG1hc3RlciB3aGljaCB3aWxsIHNoaXAgYXMgdmVyc2lv
biAxLjE2LjAuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dGdvaW5nU3Ry
dWN0dXJlLmdldCgpLAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQotICAgICAgICAg
ICAgICAgICFnX3N0cmNtcDAoa2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwgR1NUX1BST1RFQ1RJ
T05fVU5TUEVDSUZJRURfU1lTVEVNX0lEKSA/ICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIiA6Cisg
ICAgICAgICAgICAgICAgIWdfc3RyY21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKHNlbGYp
LCBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklFRF9TWVNURU1fSUQpID8gImFwcGxpY2F0aW9uL3gt
d2VibS1lbmMiIDoKICNlbmRpZgogICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LWNlbmMi
KTsKICAgICAgICAgfQpAQCAtMTc3LDYgKzE3NywxMiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0
cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVy
KQogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShzZWxmKTsKIAorICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0
aW9uX21ldGEoYnVmZmVyKSk7CisgICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJCdWZmZXIgJXAgZG9lcyBub3QgY29udGFpbiBwcm90ZWN0
aW9uIG1ldGEsIG5vdCBkZWNyeXB0aW5nIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOworICAgIH0KKwogICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1l
bnRNdXRleCk7CiAKICAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0
ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgpAQCAtMTkxLDEyICsxOTcsNiBAQCBz
dGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJh
c2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB9CiAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVBy
b3h5LmdldCgpKTsKICAgICB9Ci0KLSAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1l
dGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRf
cHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwotICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKLSAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9u
IG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgfQogICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFP
blJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKICAgICAg
ICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0
YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmlu
ZGV4IGJiMTE2NmQzODAzMy4uYTA0NjVmZjUzZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQgewogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mg
ewogICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAotICAgIGNvbnN0IGNo
YXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAgICBjb25zdCBjaGFyKiAoKnByb3RlY3Rpb25TeXN0
ZW1JZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogICAgIGJvb2wgKCpj
ZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgY29u
c3QgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5PiYpOwogICAgIGJvb2wgKCpkZWNyeXB0KShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0
QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBs
ZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5D
RE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAwY2Q3YzEyNmI3ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxNzIgQEAK
Ky8qIEdTdHJlYW1lciBPcGVuQ0RNIGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIp
CisKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVuQ0RNLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0
ZXJlYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKSkK
K3N0cnVjdCBfV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUgeworICAgIFJlZlB0cjxD
RE1Qcm94eU9wZW5DRE0+IGNkbVByb3h5OworfTsKKworc3RhdGljIHZvaWQgZmluYWxpemUoR09i
amVjdCopOworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBjb25zdCBSZWZQdHI8Q0RNUHJv
eHk+Jik7CitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBs
ZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LAorICAgIEdzdEJ1ZmZlciogc3ViU2FtcGxlcyk7
CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRl
Z29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0
RGVidWdDYXRlZ29yeQorCitzdGF0aWMgY29uc3QgY2hhciogY2VuY0VuY3J5cHRpb25NZWRpYVR5
cGVzW10gPSB7ICJ2aWRlby9tcDQiLCAiYXVkaW8vbXA0IiwgInZpZGVvL3gtaDI2NCIsICJhdWRp
by9tcGVnIiwgbnVsbHB0ciB9Oworc3RhdGljIGNvbnN0IGNoYXIqIHdlYm1FbmNyeXB0aW9uTWVk
aWFUeXBlc1tdID0geyAidmlkZW8vd2VibSIsICJhdWRpby93ZWJtIiwgInZpZGVvL3gtdnA5Iiwg
bnVsbHB0ciB9OworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBH
U1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1Rf
UEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMoCisgICAgICAgICJ2aWRlby93ZWJtOyAi
CisgICAgICAgICJhdWRpby93ZWJtOyAiCisgICAgICAgICJ2aWRlby9tcDQ7ICIKKyAgICAgICAg
ImF1ZGlvL21wNDsgIgorICAgICAgICAiYXVkaW8vbXBlZzsgIgorICAgICAgICAidmlkZW8veC1o
MjY0OyAiCisgICAgICAgICJ2aWRlby94LXZwOTsgIikpOworCisjZGVmaW5lIHdlYmtpdF9tZWRp
YV9vcGVuY2RtX2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQ
RShXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0LCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0
LCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpOworCitzdGF0aWMgR1JlZlB0cjxHc3RD
YXBzPiBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCkKK3sKKyAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworCisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXlTeXN0ZW0gOiBDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9uKCkuc3VwcG9y
dGVkS2V5U3lzdGVtcygpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBjZW5jRW5jcnlwdGlv
bk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVj
dHVyZShjYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1jZW5jIiwg
Im9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgIGNl
bmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NU
UklORywgR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQoa2V5U3lzdGVtKSwg
bnVsbHB0cikpOworICAgICAgICB9CisgICAgICAgIGlmIChHU3RyZWFtZXJFTUVVdGlsaXRpZXM6
OmlzV2lkZXZpbmVLZXlTeXN0ZW0oa2V5U3lzdGVtKSkgeworICAgICAgICAgICAgLy8gTm8ga2V5
IHN5c3RlbSBVVUlEIGZvciB3ZWJtLiBJdCdzIG5vdCBzZXQgaW4gY2FwcyBmb3IgaXQgYW5kIGl0
J3MganVzdCBXaWRldmluZS4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyB3ZWJtRW5jcnlw
dGlvbk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVu
ZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gt
d2VibS1lbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsCisgICAgICAg
ICAgICAgICAgICAgIHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgbnVsbHB0cikpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJzaW5rIHBhZCB0
ZW1wbGF0ZSBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKworICAgIHJldHVy
biBjYXBzOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzKiBrbGFzcykKK3sKKyAgICBH
U1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRl
Z29yeSwgIndlYmtpdG9wZW5jZG0iLCAwLCAiT3BlbkNETSBkZWNyeXB0Iik7CisKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gZmluYWxpemU7CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVs
ZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHUmVmUHRyPEdzdENh
cHM+IGdzdFNpbmtQYWRUZW1wbGF0ZUNhcHMgPSBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCk7
CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdz
dF9wYWRfdGVtcGxhdGVfbmV3KCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywg
Z3N0U2lua1BhZFRlbXBsYXRlQ2Fwcy5nZXQoKSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2Fk
ZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQo
JnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFk
YXRhKGVsZW1lbnRDbGFzcywgIkRlY3J5cHQgZW5jcnlwdGVkIGNvbnRlbnQgdXNpbmcgT3BlbkNE
TSIsIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SLAorICAgICAgICAiRGVjcnlw
dHMgZW5jcnlwdGVkIG1lZGlhIHVzaW5nIE9wZW5DRE0uIiwgIlhhYmllciBSb2Ryw61ndWV6IENh
bHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4iKTsKKworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRDbGFzcyogY29tbW9uQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0NMQVNTKGtsYXNzKTsKKyAgICBjb21tb25DbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0g
R1NUX0RFQlVHX0ZVTkNQVFIocHJvdGVjdGlvblN5c3RlbUlkKTsKKyAgICBjb21tb25DbGFzcy0+
Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwor
ICAgIGNvbW1vbkNsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCogc2VsZikKK3sKKyAg
ICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9P
UEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgc2VsZi0+cHJpdiA9IHByaXY7
CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSgpOworfQor
CitzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0TWVk
aWFPcGVuQ0RNRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2Jq
ZWN0KTsKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYt
PnByaXY7CisgICAgcHJpdi0+fldlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKCk7CisK
KyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BS
SVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisgICAgQVNTRVJUKHBy
aXYtPmNkbVByb3h5KTsKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0
ZW1Ub1V1aWQocHJpdi0+Y2RtUHJveHktPmtleVN5c3RlbSgpKTsKK30KKworc3RhdGljIGJvb2wg
Y2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
LCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKK3sKKyAgICBXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisgICAgcHJp
di0+Y2RtUHJveHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5T3BlbkNETSo+KGNkbVByb3h5
LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CisKK3N0YXRpYyBib29sIGRl
Y3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YnNhbXBsZUNvdW50LAorICAgIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikK
K3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVD
UllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVm
ZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgp
IHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzdWJzYW1wbGVDb3VudCAmJiAhc3Vic2FtcGxl
c0J1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlkIGRlY3J5
cHQoKSBzdWJzYW1wbGVzIHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENETVByb3h5T3BlbkNETTo6
RGVjcnlwdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEQnVmZmVyID0ga2V5
SURCdWZmZXI7CisgICAgY29udGV4dC5pdkJ1ZmZlciA9IGl2QnVmZmVyOworICAgIGNvbnRleHQu
ZGF0YUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBjb250ZXh0Lm51bVN1YnNhbXBsZXMgPSBzdWJzYW1w
bGVDb3VudDsKKyAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBzdWJzYW1wbGVDb3VudCA/
IHN1YnNhbXBsZXNCdWZmZXIgOiBudWxscHRyOworCisgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5
LT5kZWNyeXB0KGNvbnRleHQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1E
ZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTgzMGE3MTdjZTBhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyogR1N0cmVh
bWVyIE9wZW5DRE0gY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5j
bHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBUICAg
ICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCwg
V2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RN
X0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNETV9ERUNSWVBUKG9iaikg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJ
QV9PUEVOQ0RNX0RFQ1JZUFQpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNETV9ERUNS
WVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9U
WVBFX01FRElBX09QRU5DRE1fREVDUllQVCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRp
YU9wZW5DRE1EZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyAgIFdlYktpdE1lZGlhT3Bl
bkNETURlY3J5cHRDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0UHJpdmF0ZSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZTsKKworR1R5cGUgd2Vi
a2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9nZXRfdHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJL
aXRNZWRpYU9wZW5DRE1EZWNyeXB0IHsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0IHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0Q2xhc3MgeworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFzczsKK307
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBF
TkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9GaW5kT3BlbkNETS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZWQzODNjYzk5ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZQpAQCAtMCwwICsxLDY5
IEBACisjLnJzdAorIyBGaW5kT3BlbkNETQorIyAtLS0tLS0tLS0tLS0tCisjCisjIEZpbmRzIHRo
ZSBPcGVuQ0RNIGxpYnJhcnkuCisjCisjIFRoaXMgd2lsbCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2
YXJpYWJsZXM6CisjCisjIGBgT1BFTkNETV9GT1VORGBgCisjICAgICBUcnVlIGlmIHRoZSByZXF1
ZXN0ZWQgdmVyc2lvbiBvZiBnY3J5cHQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9WRVJTSU9OYGAK
KyMgICAgIFRoZSB2ZXJzaW9uIG9mIGdjcnlwdCB0aGF0IHdhcyBmb3VuZAorIyBgYE9QRU5DRE1f
SU5DTFVERV9ESVJTYGAKKyMgICAgIFRoZSBnY3J5cHQgaW5jbHVkZSBkaXJlY3RvcmllcworIyBg
YE9QRU5DRE1fTElCUkFSSUVTYGAKKyMgICAgIFRoZSBsaW5rZXIgbGlicmFyaWVzIG5lZWRlZCB0
byB1c2UgdGhlIGdjcnlwdCBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xv
Z2ljYWwKKyMgQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhv
ciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisjIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisjIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ZpbmRfbGlicmFyeShPUEVOQ0RNX0xJQlJBUlkKKyAgTkFNRVMgbGlib2NkbS5z
bworKQorZmluZF9wYXRoKE9QRU5DRE1fSU5DTFVERV9ESVIKKyAgTkFNRVMgb3Blbl9jZG0uaAor
ICBQQVRIX1NVRkZJWEVTICJXUEVGcmFtZXdvcmsvb2NkbS8iCispCisKK2luY2x1ZGUoRmluZFBh
Y2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRf
YXJncyhPcGVuY2RtCisgICAgRk9VTkRfVkFSIE9QRU5DRE1fRk9VTkQKKyAgICBSRVFVSVJFRF9W
QVJTIE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElSCispCitpZiAoT1BFTkNETV9G
T1VORCkKKyAgICBzZXQoT1BFTkNETV9MSUJSQVJJRVMgJHtPUEVOQ0RNX0xJQlJBUll9KQorICAg
IHNldChPUEVOQ0RNX0lOQ0xVREVfRElSUyAke09QRU5DRE1fSU5DTFVERV9ESVJ9KQorZW5kaWYg
KCkKKworbWFya19hc19hZHZhbmNlZChPUEVOQ0RNX0xJQlJBUlkgT1BFTkNETV9JTkNMVURFX0RJ
UikKKworaW5jbHVkZShGZWF0dXJlU3VtbWFyeSkKK3NldF9wYWNrYWdlX3Byb3BlcnRpZXMoT3Bl
bmNkbSBQUk9QRVJUSUVTCisgICAgREVTQ1JJUFRJT04gIk9wZW5DRE0gRFJNIGZyYW1ld29yayIK
KyAgICBVUkwgImh0dHBzOi8vZ2l0aHViLmNvbS9yZGtjZW50cmFsL1RodW5kZXIiCispCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlCmluZGV4IGNkODkzNGIyMDAzZS4uY2E5YjBjNzYyMjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZQpAQCAtMTg3LDYgKzE4Nyw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JF
VkFMSURBVElPTiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSBQUklWQVRFIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMg
UFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUEVSSU9ESUNfTUVNT1JZX01PTklUT1IgUFJJ
VkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QT0lOVEVS
X0xPQ0sgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTQyOCw2ICs0MjksMTAg
QEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCitpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5DRE0pCisgIGZpbmRfcGFja2FnZShPcGVu
Q0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyMjQ3CiBpZiAoRU5BQkxFRF9DT01QSUxFUl9TQU5JVElaRVJTKQogICAg
IHNldChFTkFCTEVfSU5UUk9TUEVDVElPTiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGI4
YWRiODc0NTRjOC4uNzRjZjg3ZGYzYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c1dQRS5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAtNDUsNiAr
NDUsNyBAQCBpbmNsdWRlKEdTdHJlYW1lckRlZmluaXRpb25zKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBQVUJMSUMgT0ZGKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJVFkgUFVC
TElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSBQVUJMSUMgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKK1dFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PUEVOQ0RNIFBSSVZBVEUgT0ZGKQogV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkRSSVZFUiBQVUJMSUMgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBUTyBQVUJM
SUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQVUJM
SUMgT04pCkBAIC0xOTgsNiArMTk5LDEwIEBAIGlmIChVU0VfU1lTVEVNRCkKICAgICBlbmRpZiAo
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJMRV9PUEVO
Q0RNKQorICBmaW5kX3BhY2thZ2UoT3BlbkNETSBSRVFVSVJFRCkKK2VuZGlmICgpCisKIGFkZF9k
ZWZpbml0aW9ucygtREJVSUxESU5HX1dQRV9fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhU
X1BBQ0tBR0U9IldQRSIpCiBhZGRfZGVmaW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5BQkxFRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCA1M2VhYTc2YWE2MjYuLjRiNmI0NTgyNWU1
YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMTgzLDYgKzE4Myw3IEBAIG1hY3Jv
KFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX05F
VFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSAiVG9vZ2xlIG5ldHdvcmsgY2FjaGUg
c3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBjYWNoaW5nIHN0cmF0ZWd5IiBQUklWQVRFIE9GRikKICAg
ICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTk9USUZJQ0FUSU9OUyAiVG9nZ2xlIE5vdGlm
aWNhdGlvbnMgc3VwcG9ydCIgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiBQ
UklWQVRFIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfT1BFTkNETSAiVG9n
Z2xlIEVNRSBWMyBPcGVuQ0RNIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMgIlRvZ2dsZSBPcmllbnRhdGlvbiBF
dmVudHMgc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCAiVG9nZ2xlIGFjY2VsZXJhdGVkIHNjcm9sbGlu
ZyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
UEFZTUVOVF9SRVFVRVNUICJUb2dnbGUgUGF5bWVudCBSZXF1ZXN0IHN1cHBvcnQiIFBSSVZBVEUg
T0ZGKQpAQCAtMjU1LDYgKzI1Niw3IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAg
V0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCBFTkFCTEVf
VklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NPVVJDRSBFTkFC
TEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NUUkVBTSBF
TkFCTEVfVklERU8pCisgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX09QRU5DRE0gRU5B
QkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVklE
RU9fUFJFU0VOVEFUSU9OX01PREUgRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJT05fREVQ
RU5EKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiBFTkFCTEVfVklERU8pCiAg
ICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1RPVUNIX1NMSURFUiBFTkFCTEVfVE9VQ0hf
RVZFTlRTKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDI2NjI0NDVjYTlmYS4uZTU0MGNiNGRhNTJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjAtMDctMDMgIFhh
YmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQg
dG8gYnVpbGQgT3BlbkNETSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhlcmUgaXMgYW4KKyAgICAg
ICAgb3B0IGluIGVudiB2YXIgdG8gZ2V0IEpIQnVpbGQgYnVpbGRpbmcgVGh1bmRlciBpdHMgV2lk
ZXZpbmUKKyAgICAgICAgZGVwZW5kZW5jaWVzLiBXZSBhbHNvIGluY2x1ZGUgYSBjb3VwbGUgb2Yg
R1N0cmVhbWVyIHBhdGNoZXMgbmVlZGVkCisgICAgICAgIHRvIGdldCBrZXkgSURzIGluIHRoZSBk
ZWNyeXB0b3JzLgorCisgICAgICAgIFdpZGV2aW5lIGlzIG9idmlvdXNseSBwcm9wcmlldGFyeSBh
bmQgYXMgeW91IG5lZWQgdG8gYmUgbGljZW5zZWQKKyAgICAgICAgdG8gYWNjZXNzIGl0LCB5b3Ug
bmVlZCBjcmVkZW50aWFscyB0byBidWlsZCBpdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbToKKyAgICAgICAgKiBnc3RyZWFtZXIvamhidWlsZC5tb2R1bGVz
OgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhZC0wMDA2LW1zc2Rl
bXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5wYXRjaDogQWRkZWQuCisgICAgICAgICogZ3N0cmVh
bWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRl
bXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaDogQWRkZWQuCisgICAgICAgICogZ3Rr
L2luc3RhbGwtZGVwZW5kZW5jaWVzOgorICAgICAgICAqIGpoYnVpbGQvamhidWlsZHJjX2NvbW1v
bi5weToKKyAgICAgICAgKGluaXQpOgorICAgICAgICAqIHdwZS9pbnN0YWxsLWRlcGVuZGVuY2ll
czoKKwogMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgU3BsaXQgY29sb3IgY29udmVyc2lvbiBmdW5jdGlvbnMgb3V0IG9mIENvbG9yVXRpbGl0aWVz
LmgvY3BwIGludG8gdGhlaXIgb3duIGZpbGUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KaW5kZXggNDA0N2JmYmQ0YWVlLi5kNGVkYjhkMTNjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTEzNSw2ICsxMzUsNyBAQCBteSAoCiAgICAg
JG5ldHdvcmtDYWNoZVN0YWxlV2hpbGVSZXZhbGlkYXRlU3VwcG9ydCwKICAgICAkbm90aWZpY2F0
aW9uc1N1cHBvcnQsCiAgICAgJG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQsCisgICAgJG9wZW5DRE1T
dXBwb3J0LAogICAgICRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQsCiAgICAgJG92ZXJmbG93U2Ny
b2xsaW5nVG91Y2hTdXBwb3J0LAogICAgICRwYXltZW50UmVxdWVzdFN1cHBvcnQsCkBAIC00NDgs
NiArNDQ5LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJvZmZzY3JlZW4t
Y2FudmFzIiwgZGVzYyA9PiAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMiLCB2YWx1ZSA9PiBcJG9mZnNjcmVl
bkNhbnZhc1N1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJvcGVuY2RtIiwgZGVzYyA9PiAi
VG9nZ2xlIE9wZW5DRE0gc3VwcG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUEVOQ0RN
IiwgdmFsdWUgPT4gXCRvcGVuQ0RNU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gIm9yaWVu
dGF0aW9uLWV2ZW50cyIsIGRlc2MgPT4gIlRvZ2dsZSBPcmllbnRhdGlvbiBFdmVudHMgc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9
PiBcJG9yaWVudGF0aW9uRXZlbnRzU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9nc3Ry
ZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcwpp
bmRleCA5NTZmMTI2ZDViNzUuLjBjMWE4OTRiNWM4MiAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVz
CkBAIC0xMSw2ICsxMSwxMiBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQi
Lz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9
ImdzdHJlYW1lci12YWFwaSIvPgorICAgICAgPGlmIGNvbmRpdGlvbi1zZXQ9Ik9wZW5DRE0iPgor
ICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4KKyAgICAgICAgPGRlcCBwYWNrYWdlPSJ3
aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItY2RtaS13aWRldmluZSIv
PgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgICA8
L2lmPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21ldGFtb2R1bGU+CiAKQEAgLTE5LDYgKzI1
LDggQEAKICAgICAgIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8i
Lz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ2l0aHViLXRhcmJhbGwiCiAg
ICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9Imdp
dCIgbmFtZT0iZ2l0aHViLXNzaCIKKyAgICAgIGhyZWY9ImdpdEBnaXRodWIuY29tOiIvPgogICA8
cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20iCiAg
ICAgICBocmVmPSJodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vd2VibS8iLz4KICAg
PHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJhb21lZGlhLmdvb2dsZXNvdXJjZS5jb20iCkBA
IC03OSw2ICs4Nyw3IEBACiAKICAgICA8YnJhbmNoIGhhc2g9InNoYTI1Njo0MGJiM2JhZmRhMjVj
MGI3MzljOGZjMzZlNDgzODBmY2NmNjFjNGQzZjgzNzQ3ZTk3YWMzZjliMDE3MWIxMzE5IiBtb2R1
bGU9ImdzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0ke3ZlcnNpb259LnRhci54eiIg
cmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9Imdv
b2QtMDAwMS1xdGRlbXV4LVNwZWNpZnktUkVESVJFQ1QtaW5mb3JtYXRpb24taW4tZXJyb3ItbWVz
c2FnLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCB1cHN0cmVhbSwgc2hvdWxkIGJlIHNo
aXBwZWQgaW4gMS4xNi4zIC0tPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWdvb2Qt
MDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQu
cGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC05Miw2
ICsxMDEsNyBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2
OmYxY2I3YWEyMzg5NTY5YTUzNDM2NjFhYWU0NzNmMGE5NDBhOTBiODcyMDAxODI0YmM0N2ZhODA3
MmEwNDFlNzQiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke3ZlcnNp
b259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBh
dGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEtV0FSTklORy13
aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCwgZGlzY3Vz
c2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVy
L2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KKyAgICAgIDxwYXRjaCBmaWxl
PSJnc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0
Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC0xMjUsNCAr
MTM1LDg5IEBACiAgICAgICAgICAgIGNoZWNrb3V0ZGlyPSJsaWJ2YS0ke3ZlcnNpb259IiByZXBv
PSJnaXRodWItdGFyYmFsbCIvPgogICA8L21lc29uPgogCisgIDxjbWFrZSBpZD0idGh1bmRlciIK
KyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtRFBPUlQ9
ODA4MQorICAgICAgICAgICAgICAgICAgICAtREJJTkRJTkc9MC4wLjAuMCAtRElETEVfVElNRT0x
ODAKKyAgICAgICAgICAgICAgICAgICAgLURQRVJTSVNURU5UX1BBVEg9L3RtcC90aHVuZGVyL3Bl
cnNpc3RlbnQKKyAgICAgICAgICAgICAgICAgICAgLURWT0xBVElMRV9QQVRIPS90bXAvdGh1bmRl
ci92b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAtRERBVEFfUEFUSD0ke3ByZWZpeH0vc2hh
cmUvV1BFRnJhbWV3b3JrCisgICAgICAgICAgICAgICAgICAgIC1EU1lTVEVNX1BBVEg9JHtwcmVm
aXh9L2xpYi93cGVmcmFtZXdvcmsvcGx1Z2lucworICAgICAgICAgICAgICAgICAgICAtRFBST1hZ
U1RVQl9QQVRIPSR7cHJlZml4fS9saWIvd3BlZnJhbWV3b3JrL3Byb3h5c3R1YnMKKyAgICAgICAg
ICAgICAgICAgICAgLURPT01BREpVU1Q9IC1EQlVJTERfVFlQRT1SZWxlYXNlU3ltYm9scworICAg
ICAgICAgICAgICAgICAgICAtREJMVUVUT09USF9TVVBQT1JUPU9GRiAtRFZJUlRVQUxJTlBVVD1P
RkYKKyAgICAgICAgICAgICAgICAgICAgLURDT01QT1NJVE9SQ0xJRU5UPU9GRiAtRENPTVBPU0lU
T1JDTElFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQlJPQURDQVNUPU9GRiAtRENETUk9
T04gLURDRE1JX0JDTV9ORVhVU19TVlA9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQ0RNSV9B
REFQVEVSX0lNUExFTUVOVEFUSU9OPWdzdHJlYW1lcgorICAgICAgICAgICAgICAgICAgICAtREdT
VFJFQU1FUkNMSUVOVD1PRkYgLURQUk9WSVNJT05QUk9YWT1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURTRUNVUklUWUFHRU5UPU9GRiAtRENPTVBPU0lUT1JTRVJWRVJQTFVHSU49T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX1dFQktJVEJST1dTRVI9T0ZGIC1EUExVR0lOX1dFQlNF
UlZFUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRVNQSUFMPU9GRiAtRE5FVFdP
UktDT05UUk9MPU9GRiI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIgbW9kdWxl
PSJyZGtjZW50cmFsL1RodW5kZXIvdGFyYmFsbC8ke3ZlcnNpb259IiB2ZXJzaW9uPSI2YWRlZWUw
MDZmZWNkZDFiMmJjNDliZDM2MGQ0OWZjNTcxOGRlYjYxIiBjaGVja291dGRpcj0idGh1bmRlciIv
PgorICA8L2NtYWtlPgorCisgIDxhdXRvdG9vbHMgaWQ9IndpZGV2aW5lIiBzdXBwb3J0cy1ub24t
c3JjZGlyLWJ1aWxkcz0ibm8iCisgICAgICAgICAgICAgYXV0b2dlbi1zaD0iYnVpbGQucHkiIGF1
dG9nZW5hcmdzPSJ4ODYtNjQgLXIgLURPRU1DUllQVE9fS0VZQk9YX1BBVEhfUFJFRklYPSR7cHJl
Zml4fSIKKyAgICAgICAgICAgICBtYWtlYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIgorICAg
ICAgICAgICAgIG1ha2VpbnN0YWxsYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIC1mIE1ha2Vm
aWxlLmluc3RhbGwiID4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0
aHVuZGVyIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWIt
c3NoIiBtb2R1bGU9Ik1ldHJvbG9naWNhbC93aWRldmluZS5naXQiIGNoZWNrb3V0ZGlyPSJ3aWRl
dmluZSIgdGFnPSIyNjRjMTM3NTAxYjI4OWUzNTZiMTFkYWNjMzI5YjA1NjM2ZWE5Mzk2Ii8+Cisg
IDwvYXV0b3Rvb2xzPgorCisgIDxjbWFrZSBpZD0idGh1bmRlci1jZG1pLXdpZGV2aW5lIiBjbWFr
ZWFyZ3M9Ii1EQ01BS0VfQlVJTERfVFlQRT1SZWxXaXRoRGViSW5mbyI+CisgICAgPGJyYW5jaCBy
ZXBvPSJnaXRodWItdGFyYmFsbCIKKyAgICAgICAgICAgIG1vZHVsZT0iV2ViUGxhdGZvcm1Gb3JF
bWJlZGRlZC9PQ0RNLVdpZGV2aW5lL3RhcmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAgICAgICAgIHZl
cnNpb249IjlkYzM5NjRiMDMzOWFiYjcwZDY2ZTRmOTMxNjMyMzI0YTA3NWQ2ZDQiIGNoZWNrb3V0
ZGlyPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAg
PGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+
CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIDwvY21ha2U+CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVy
LW5hbm9zZXJ2aWNlcyIKKyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2
ZXJzaW9ufSAtREJVSUxEX1RZUEU9UmVsZWFzZVN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAg
LURQTFVHSU5fQ09CQUxUPU9GRiAtRFBMVUdJTl9DT01NQU5ERVI9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX0RFVklDRUlORk89T0ZGIC1EUExVR0lOX0RJU1BMQVlJTkZPPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ERVZJQ0VJREVOVElGSUNBVElPTj1PRkYKKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRFNSRVNPTFVUSU9OPU9GRiAtRFBMVUdJTl9ESENQ
U0VSVkVSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ESUFMU0VSVkVSPU9GRiAt
RFBMVUdJTl9ESUNUSU9OQVJZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9JT0NP
Tk5FQ1RPUj1PRkYgLURQTFVHSU5fRUdMVEVTVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fRlJPTlRQQU5FTD1PRkYgLURQTFVHSU5fTE9DQVRJT05TWU5DPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRFBMVUdJTl9NT05JVE9SPU9GRiAtRFBMVUdJTl9ORVRXT1JLQ09OVFJPTD1P
RkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUk9T04KKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQVVUT1NUQVJUPXRydWUKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fT1BFTkNETUlfT09QPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fT1BFTkNETUlfV0lERVZJTkU9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5f
T1BFTkNETUlfQ0xFQVJLRVk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5D
RE1JX1BMQVlSRUFEWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlf
TkFHUkE9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX05DQVM9T0ZG
IC1EUExVR0lOX0JMVUVUT09USD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQkxV
RVRPT1RIUkVNT1RFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUkVN
T1RFQ09OVFJPTD1PRkYgLURQTFVHSU5fU05BUFNIT1Q9T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EUExVR0lOX1NZU1RFTUNPTU1BTkRTPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9GSUxFVFJBTlNGRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RFU1RDT05U
Uk9MTEVSPU9GRiAtRFBMVUdJTl9KU09OUlBDPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9URVNUVVRJTElUWT1PRkYgLURQTFVHSU5fVElNRVNZTkM9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX1RSQUNFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fVk9MVU1FQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VC
S0lUQlJPV1NFUj1PRkYgLURQTFVHSU5fUlRTUENMSUVOVD1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURQTFVHSU5fV0VCUEE9T0ZGIC1EUExVR0lOX1dFQlBST1hZPU9GRgorICAgICAgICAgICAg
ICAgICAgICAtRFBMVUdJTl9XRUJTRVJWRVI9T0ZGIC1EUExVR0lOX1dFQlNIRUxMPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XSUZJQ09OVFJPTD1PRkYgLURQTFVHSU5fUEFDS0FH
RVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1BMQVlFUklORk89T0ZGIC1EUExV
R0lOX1BPV0VSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9QUk9DRVNTTU9OSVRP
Uj1PRkYgLURQTFVHSU5fU1RSRUFNRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X1NQQVJLPU9GRiAtRFBMQVRGT1JNX0xJTlVYPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX01FU1NFTkdFUj1PRkYgLURQTFVHSU5fU0VDVVJJVFlBR0VOVD1PRkYKKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fUlBDTElOSz1PRkYgLURQTFVHSU5fQ09NUE9TSVRPUj1PRkYiPgor
ICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRhcmJhbGwiCisgICAgICAgICAgICBtb2R1bGU9InJk
a2NlbnRyYWwvVGh1bmRlck5hbm9TZXJ2aWNlcy90YXJiYWxsLyR7dmVyc2lvbn0iCisgICAgICAg
ICAgICB2ZXJzaW9uPSJkZTlmM2Q0MGQ4NDA4ZWU4MTFjNDhmNDg2YzliMTRmNzUyYzk3MzQ1Igor
ICAgICAgICAgICAgY2hlY2tvdXRkaXI9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgPGRl
cGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRlciIvPgorICAgICAgPGRlcCBw
YWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAg
PC9jbWFrZT4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0
Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEu
cGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3Nk
ZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44Zjk5NDZmMGU5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9n
c3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90
ZWN0aW9uLWRhdGEucGF0Y2gKQEAgLTAsMCArMSwyNDcgQEAKK0Zyb20gMDA1MmYzZDgzMTVlOGNl
ZmIwNGE2MmE2NGNhYzE3Y2JmYmM2YjhiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206
IENoYXJsaWUgVHVybmVyIDxjaHR1cm5lQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjUgTWF5IDIw
MTggMDk6NDM6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUGFyc2UgcGxheXJlYWR5IHBheWxv
YWQuCisKK0xvb2sgYXQgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBkYXRhIHBheWxvYWQgdG8gZXh0
cmFjdCBkZWZhdWx0IGtleSBpZHMKK2ZvciBkZWNyeXB0aW5nIHNhbXBsZXMuIFRoZSBmb3JtYXQg
b2YgdGhpcyBwYXlsb2FkIHNlZW1zIHRvIGJlCitwcm9wcmlldGFyeS4KKworU2lnbmVkLW9mZi1i
eTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CistLS0KKyBl
eHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMgICAgfCAgMTQgKystCisgZXh0L3Ntb290
aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIHwgMTM4ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKworIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaCB8ICAgMSArCisgMyBm
aWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0t
Z2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVh
bWluZy9nc3Rtc3NkZW11eC5jCitpbmRleCBiY2VhOGNhLi40ZmE5NWI5IDEwMDY0NAorLS0tIGEv
ZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCisrKysgYi9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc2RlbXV4LmMKK0BAIC00OTUsNyArNDk1LDE5IEBAIGdzdF9tc3NfZGVtdXhfc2V0
dXBfc3RyZWFtcyAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4KQorICAgICAgICAgICBnc3RfZXZl
bnRfbmV3X3Byb3RlY3Rpb24gKHByb3RlY3Rpb25fc3lzdGVtX2lkLCBwcm90ZWN0aW9uX2J1ZmZl
ciwKKyAgICAgICAgICAgInNtb290aC1zdHJlYW1pbmciKTsKKyAKKy0gICAgICBHU1RfTE9HX09C
SkVDVCAoc3RyZWFtLCAiUXVldWVpbmcgUHJvdGVjdGlvbiBldmVudCBvbiBzb3VyY2UgcGFkIik7
CisrICAgICAgR3N0QnVmZmVyICprZXlfaWQgPSBnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQg
KG1zc2RlbXV4LT5tYW5pZmVzdCk7CisrICAgICAgaWYgKCFnc3RfYnVmZmVyX2dldF9zaXplIChr
ZXlfaWQpKSB7CisrICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAg
ICAgICAicHJvdGVjdGVkIG1hbmlmZXN0LCBidXQgbm8ga2V5IGlkcyBhdmFpbGFibGUiKTsKKysg
ICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAg
ICAgICAiQWRkaW5nIGtleSBpZCB0byB0aGUgcHJvdGVjdGlvbiBldmVudCBvZiBzaXplICVsdSIs
CisrICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoa2V5X2lkKSk7CisrICAgICAgICBH
c3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2
ZW50KTsKKysgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBH
U1RfVFlQRV9CVUZGRVIsIGtleV9pZCwgTlVMTCk7CisrICAgICAgfQorKworKyAgICAgIEdTVF9M
T0dfT0JKRUNUIChzdHJlYW0sICJRdWV1aW5nIFByb3RlY3Rpb24gZXZlbnQgb24gc291cmNlIHBh
ZCIpOworICAgICAgIGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fcXVldWVfZXZlbnQgKChHc3RB
ZGFwdGl2ZURlbXV4U3RyZWFtICopIHN0cmVhbSwKKyAgICAgICAgICAgZXZlbnQpOworICAgICAg
IGdzdF9idWZmZXJfdW5yZWYgKHByb3RlY3Rpb25fYnVmZmVyKTsKK2RpZmYgLS1naXQgYS9leHQv
c21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dz
dG1zc21hbmlmZXN0LmMKK2luZGV4IGM4NTVjYjMuLmRmMzEzMzAgMTAwNjQ0CistLS0gYS9leHQv
c21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1p
bmcvZ3N0bXNzbWFuaWZlc3QuYworQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSA8Y3R5cGUu
aD4KKyAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5o
PgorKyNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KKysjaW5jbHVkZSA8bGlieG1sL3hwYXRoSW50
ZXJuYWxzLmg+CisgCisgLyogZm9yIHBhcnNpbmcgaDI2NCBjb2RlYyBkYXRhICovCisgI2luY2x1
ZGUgPGdzdC9jb2RlY3BhcnNlcnMvZ3N0aDI2NHBhcnNlci5oPgorQEAgLTEwOSw2ICsxMTEsMTAg
QEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVzdAorICAgR1N0cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1f
aWQ7CisgICBnY2hhciAqcHJvdGVjdGlvbl9kYXRhOworIAorKyAgLy8gRklYTUU6IFRoZXJlIGNh
biBiZSBtdWx0aXBsZSBrZXkgaWRzIHByZXNlbnQgaW4gcHJvdGVjdGVkIG1hbmlmZXN0cy4KKysg
IGdjaGFyICprZXlfaWQ7CisrICBnc2l6ZSBrZXlfaWRfbGVuOworKworICAgR1NMaXN0ICpzdHJl
YW1zOworIH07CisgCitAQCAtMzAwLDYgKzMwNiwxMjIgQEAgX2dzdF9tc3Nfc3RyZWFtX2luaXQg
KEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwKKyAgIGdz
dF9tc3NfZnJhZ21lbnRfcGFyc2VyX2luaXQgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7Cisg
fQorIAorK3N0YXRpYyB2b2lkCisrX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorK3sKKysgIGd1Y2hhciAqZGVjb2RlZF9wcm90ZWN0aW9u
X2RhdGEgPSBOVUxMOworKyAgZ3NpemUgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuID0gMDsK
KysgIHhtbENoYXIgKnByb3RlY3Rpb25fZGF0YV90ZXh0ID0gTlVMTDsKKysgIGludCBwcm90ZWN0
aW9uX2RhdGFfdGV4dF9sZW4gPSAwOworKyAgeG1sRG9jUHRyIHByb3RlY3Rpb25fZGF0YV94bWwg
PSBOVUxMOworKyAgLy8gTm90ZSwgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGZyZWUnZCwgZnJlZWlu
ZyB0aGUgZG9jIHB0ciB3aWxsIGZyZWUgdGhpcy4KKysgIHhtbE5vZGUgKnByb3RlY3Rpb25fZGF0
YV9yb290X2VsZW1lbnQgPSBOVUxMOworKyAgY29uc3QgeG1sQ2hhciAqcHJvdGVjdGlvbl9kYXRh
X25hbWVzcGFjZSA9IE5VTEw7CisrICB4bWxYUGF0aENvbnRleHRQdHIgeHBhdGhfY3R4ID0gTlVM
TDsKKysgIHhtbFhQYXRoT2JqZWN0UHRyIHhwYXRoX29iaiA9IE5VTEw7CisrICB4bWxOb2RlU2V0
UHRyIGtleV9pZF9ub2RlID0gTlVMTDsKKysgIGdzaXplIHByb3RlY3Rpb25fZGF0YV94bWxfbGVu
ID0gMDsKKysgIGd1Y2hhciAqc3RhcnRfdGFnID0gTlVMTDsKKysKKysgIGRlY29kZWRfcHJvdGVj
dGlvbl9kYXRhID0KKysgICAgICBnX2Jhc2U2NF9kZWNvZGUgKG1hbmlmZXN0LT5wcm90ZWN0aW9u
X2RhdGEsICZkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YV9sZW4pOworKworKyAgc3RhcnRfdGFnID0g
ZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGE7CisrCisrICAvLyBUaGUgcHJvdGVjdGlvbiBkYXRhIHN0
YXJ0cyB3aXRoIGEgMTAtYnl0ZSBQbGF5UmVhZHkgdmVyc2lvbgorKyAgLy8gaGVhZGVyIHRoYXQg
bmVlZHMgdG8gYmUgc2tpcHBlZCBvdmVyIHRvIGF2b2lkIFhNTCBwYXJzaW5nCisrICAvLyBlcnJv
cnMuCisrICB3aGlsZSAoc3RhcnRfdGFnICYmICpzdGFydF90YWcgIT0gJzwnKQorKyAgICBzdGFy
dF90YWcrKzsKKysKKysgIGlmICghc3RhcnRfdGFnKSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxl
ZCB0byBmaW5kIGEgc3RhcnQgdGFnIGluIHByb3RlY3Rpb24gZGF0YSBwYXlsb2FkIik7CisrICAg
IGdvdG8gYmVhY2g7CisrICB9CisrCisrICBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiA9CisrICAg
ICAgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuIC0gKHN0YXJ0X3RhZyAtIGRlY29kZWRfcHJv
dGVjdGlvbl9kYXRhKTsKKysgIHByb3RlY3Rpb25fZGF0YV94bWwgPQorKyAgICAgIHhtbFJlYWRN
ZW1vcnkgKChjb25zdCBnY2hhciAqKSBzdGFydF90YWcsIHByb3RlY3Rpb25fZGF0YV94bWxfbGVu
LAorKyAgICAgICJwcm90ZWN0aW9uX2RhdGEiLCAidXRmLTE2IiwgMCk7CisrCisrICBpZiAoIXBy
b3RlY3Rpb25fZGF0YV94bWwpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHBhcnNlIHBy
b3RlY3Rpb24gZGF0YSBYTUwiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGlmIChn
c3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxUKSA+PSBHU1Rf
TEVWRUxfTUVNRFVNUCkgeworKyAgICB4bWxEb2NEdW1wTWVtb3J5RW5jIChwcm90ZWN0aW9uX2Rh
dGFfeG1sLCAmcHJvdGVjdGlvbl9kYXRhX3RleHQsCisrICAgICAgICAmcHJvdGVjdGlvbl9kYXRh
X3RleHRfbGVuLCAidXRmOCIpOworKyAgICBHU1RfTUVNRFVNUCAoInByb3RlY3Rpb24gZGF0YSBY
TUwiLCBwcm90ZWN0aW9uX2RhdGFfdGV4dCwKKysgICAgICAgIHByb3RlY3Rpb25fZGF0YV90ZXh0
X2xlbik7CisrICAgIHhtbEZyZWUgKHByb3RlY3Rpb25fZGF0YV90ZXh0KTsKKysgIH0KKysKKysg
IHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudCAocHJv
dGVjdGlvbl9kYXRhX3htbCk7CisrICBpZiAocHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+
dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFIHx8CisrICAgICAgeG1sU3RyY21wIChwcm90ZWN0aW9u
X2RhdGFfcm9vdF9lbGVtZW50LT5uYW1lLAorKyAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqKSAi
V1JNSEVBREVSIikgfHwgIXByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zKSB7CisrICAg
IEdTVF9FUlJPUiAoImludmFsaWQgcHJvdGVjdGlvbiBkYXRhIFhNTCIpOworKyAgICBnb3RvIGJl
YWNoOworKyAgfQorKworKyAgeHBhdGhfY3R4ID0geG1sWFBhdGhOZXdDb250ZXh0IChwcm90ZWN0
aW9uX2RhdGFfeG1sKTsKKysgIGlmICgheHBhdGhfY3R4KSB7CisrICAgIEdTVF9FUlJPUiAoImZh
aWxlZCB0byBjcmVhdGUgeHBhdGggY29udGV4dCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQor
KworKyAgcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IHByb3RlY3Rpb25fZGF0YV9yb290X2Vs
ZW1lbnQtPm5zLT5ocmVmOworKyAgaWYgKHhtbFhQYXRoUmVnaXN0ZXJOcyAoeHBhdGhfY3R4LCAo
Y29uc3QgeG1sQ2hhciAqKSAicHJoZHIiLAorKyAgICAgICAgICBwcm90ZWN0aW9uX2RhdGFfbmFt
ZXNwYWNlKSA8IDApIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHJlZ2lzdGVyIFhNTCBu
YW1lc3BhY2UiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIHhwYXRoX29iaiA9Cisr
ICAgICAgeG1sWFBhdGhFdmFsRXhwcmVzc2lvbiAoKGNvbnN0IHhtbENoYXIgKikgIi8vcHJoZHI6
S0lEIiwgeHBhdGhfY3R4KTsKKysgIGlmICgheHBhdGhfb2JqKSB7CisrICAgIEdTVF9ERUJVRyAo
ImZhaWxlZCB0byBldmFsIFhQYXRoIGV4cHJlc3Npb24iKTsKKysgICAgZ290byBiZWFjaDsKKysg
IH0KKysKKysgIGtleV9pZF9ub2RlID0geHBhdGhfb2JqLT5ub2Rlc2V0dmFsOworKyAgaW50IG51
bV9rZXlfaWRzID0ga2V5X2lkX25vZGUgPyBrZXlfaWRfbm9kZS0+bm9kZU5yIDogMDsKKysKKysg
IEdTVF9ERUJVRyAoImZvdW5kICVkIGtleSBpZHMiLCBudW1fa2V5X2lkcyk7CisrCisrICBpZiAo
bnVtX2tleV9pZHMgIT0gMCAmJiAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0tPnR5cGUgPT0gWE1M
X0VMRU1FTlRfTk9ERSkpIHsKKysgICAgeG1sQ2hhciAqZW5jb2RlZF9rZXlfaWQgPSB4bWxOb2Rl
R2V0Q29udGVudCAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0pOworKyAgICBnc2l6ZSBkZWNvZGVk
X2tleV9pZF9sZW47CisrICAgIGd1Y2hhciAqZGVjb2RlZF9rZXlfaWQgPQorKyAgICAgICAgZ19i
YXNlNjRfZGVjb2RlICgoY29uc3QgZ2NoYXIgKikgZW5jb2RlZF9rZXlfaWQsICZkZWNvZGVkX2tl
eV9pZF9sZW4pOworKworKyAgICBHU1RfTUVNRFVNUCAoImtleSByZXRyaWV2ZWQiLCBkZWNvZGVk
X2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysKKysgICAgbWFuaWZlc3QtPmtleV9pZCA9
IGdfcmVhbGxvYyAobWFuaWZlc3QtPmtleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAg
bWVtY3B5IChtYW5pZmVzdC0+a2V5X2lkLCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRf
bGVuKTsKKysgICAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSBkZWNvZGVkX2tleV9pZF9sZW47Cisr
CisrICAgIHhtbEZyZWUgKGVuY29kZWRfa2V5X2lkKTsKKysgICAgZ19mcmVlIChkZWNvZGVkX2tl
eV9pZCk7CisrICB9IGVsc2UgeworKyAgICBHU1RfRVJST1IgKCJpbnZhbGlkIFhNTCBwYXlsb2Fk
Iik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrYmVhY2g6CisrICBpZiAoZGVjb2RlZF9w
cm90ZWN0aW9uX2RhdGEpCisrICAgIGdfZnJlZSAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpOwor
KyAgaWYgKHhwYXRoX2N0eCkKKysgICAgeG1sWFBhdGhGcmVlQ29udGV4dCAoeHBhdGhfY3R4KTsK
KysgIGlmICh4cGF0aF9vYmopCisrICAgIHhtbFhQYXRoRnJlZU9iamVjdCAoeHBhdGhfb2JqKTsK
KysgIGlmIChwcm90ZWN0aW9uX2RhdGFfeG1sKQorKyAgICB4bWxGcmVlRG9jIChwcm90ZWN0aW9u
X2RhdGFfeG1sKTsKKysKKysgIHJldHVybjsKKyt9CisgCisgc3RhdGljIHZvaWQKKyBfZ3N0X21z
c19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorQEAgLTMyOSw2
ICs0NTEsNyBAQCBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0LAorIAorICAgICAgIG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCA9IHN5c3Rl
bV9pZDsKKyAgICAgICBtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhID0gKGdjaGFyICopIHhtbE5v
ZGVHZXRDb250ZW50IChub2RlaXRlcik7CisrICAgICAgX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlv
bl9kYXRhIChtYW5pZmVzdCk7CisgICAgICAgeG1sRnJlZSAoc3lzdGVtX2lkX2F0dHJpYnV0ZSk7
CisgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0zOTQsNiArNTE3LDkgQEAgZ3N0X21zc19tYW5p
ZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCisgICAgIH0KKyAgIH0KKyAKKysgIG1hbmlmZXN0
LT5rZXlfaWQgPSBOVUxMOworKyAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSAwOworKworICAgZm9y
IChub2RlaXRlciA9IHJvb3QtPmNoaWxkcmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRl
ci0+bmV4dCkgeworICAgICBpZiAobm9kZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQor
ICAgICAgICAgJiYgKHN0cmNtcCAoKGNvbnN0IGNoYXIgKikgbm9kZWl0ZXItPm5hbWUsICJTdHJl
YW1JbmRleCIpID09IDApKSB7CitAQCAtNDQwLDYgKzU2Niw5IEBAIGdzdF9tc3NfbWFuaWZlc3Rf
ZnJlZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkKKyAKKyAgIGdfc2xpc3RfZnJlZV9mdWxs
IChtYW5pZmVzdC0+c3RyZWFtcywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfbXNzX3N0cmVhbV9mcmVl
KTsKKyAKKysgIGlmIChtYW5pZmVzdC0+a2V5X2lkKQorKyAgICBnX2ZyZWUgKG1hbmlmZXN0LT5r
ZXlfaWQpOworKworICAgaWYgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCAhPSBOVUxM
KQorICAgICBnX3N0cmluZ19mcmVlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQsIFRS
VUUpOworICAgeG1sRnJlZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSk7CitAQCAtNDYyLDYg
KzU5MSwxNSBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01h
bmlmZXN0ICogbWFuaWZlc3QpCisgICByZXR1cm4gbWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YTsK
KyB9CisgCisrR3N0QnVmZmVyICoKKytnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKEdzdE1z
c01hbmlmZXN0ICogbWFuaWZlc3QpCisreworKyAgR3N0QnVmZmVyICprZXlfaWRfYnVmZmVyID0K
KysgICAgICBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbWFuaWZlc3QtPmtleV9pZF9s
ZW4sIE5VTEwpOworKyAgZ3N0X2J1ZmZlcl9maWxsIChrZXlfaWRfYnVmZmVyLCAwLCBtYW5pZmVz
dC0+a2V5X2lkLCBtYW5pZmVzdC0+a2V5X2lkX2xlbik7CisrICByZXR1cm4ga2V5X2lkX2J1ZmZl
cjsKKyt9CisrCisgR1NMaXN0ICoKKyBnc3RfbXNzX21hbmlmZXN0X2dldF9zdHJlYW1zIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorIHsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc21hbmlmZXN0LmggYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0
LmgKK2luZGV4IDAzYjA2NmEuLjRlNmFkNzMgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc21hbmlmZXN0LmgKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFu
aWZlc3QuaAorQEAgLTU2LDYgKzU2LDcgQEAgR3N0Q2xvY2tUaW1lIGdzdF9tc3NfbWFuaWZlc3Rf
Z2V0X21pbl9mcmFnbWVudF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmUKKyBjb25z
dCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fc3lzdGVtX2lkIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3Rf
Z2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7CisgZ2Jvb2xl
YW4gZ3N0X21zc19tYW5pZmVzdF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RNc3NNYW5pZmVzdCAq
IG1hbmlmZXN0LCBnaW50NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCk7CisrR3N0QnVmZmVyICog
Z3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsK
KyAKKyBHc3RNc3NTdHJlYW1UeXBlIGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChHc3RNc3NTdHJl
YW0gKnN0cmVhbSk7CisgR3N0Q2FwcyAqIGdzdF9tc3Nfc3RyZWFtX2dldF9jYXBzIChHc3RNc3NT
dHJlYW0gKiBzdHJlYW0pOworLS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVh
bWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRl
bXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaCBiL1Rvb2xzL2dzdHJlYW1lci9wYXRj
aGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXBy
b3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi4xNWY1YmIzNDhhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFt
ZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVt
dXhlci1wcm92aWRlZC1hLWRlZmF1bHQta2lkLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9t
IGE4MTZkOGRhYjZiYjMzNzcwMTUwMjg5YTRhZWRlNDNlMmY3YWU0NzggTW9uIFNlcCAxNyAwMDow
MDowMCAyMDAxCitGcm9tOiBDaGFybGllIFR1cm5lciA8Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRl
OiBGcmksIDEwIE1heSAyMDE5IDIzOjM0OjQzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNr
IGlmIGFuIHVwc3RyZWFtIGRlbXV4ZXIgcHJvdmlkZWQgYSBkZWZhdWx0IGtpZC4KKworU21vb3Ro
IHN0cmVhbWluZyBkZW11eGVycyBkbyBub3Qgc2VuZCBib3hlcyBjb250YWluaW5nIG1ldGFkYXRh
IGFib3V0Cit0aGUgc3RyZWFtLiBUaGV5IGhhdmUgdG8gc2VuZCBtZXRhZGF0YSAib3V0LW9mLWJh
bmQiLgorCitGb3IgcGlmZiBlbmNvZGVkIHN0cmVhbXMsIGlmIG5vIGJveCBoYXMgYmVlbiBmb3Vu
ZCBjb250YWluaW5nIGEgZGVmYXVsdAora2lkIGZvciB0aGUgc2FtcGxlLCBjaGVjayBpZiBhbiB1
cHN0cmVhbSBkZW11eGVyIGhhcyBwcm92aWRlZCBvbmUgdmlhIGEKK3Byb3RlY3Rpb24gZXZlbnQs
IGFuZCB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrLgorCitTaWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKy0tLQorIGdzdC9pc29tcDQvcXRk
ZW11eC5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwor
IDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QvaXNv
bXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitpbmRleCBjZjE1ZmFkNDYuLmU0
NDliNDgwYyAxMDA2NDQKKy0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5jCisrKysgYi9nc3QvaXNv
bXA0L3F0ZGVtdXguYworQEAgLTQ1MSw2ICs0NTEsNyBAQCBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0K
KyAgIGd1aW50MzIgcHJvdGVjdGlvbl9zY2hlbWVfdmVyc2lvbjsKKyAgIGdwb2ludGVyIHByb3Rl
Y3Rpb25fc2NoZW1lX2luZm87ICAgICAgLyogc3BlY2lmaWMgdG8gdGhlIHByb3RlY3Rpb24gc2No
ZW1lICovCisgICBHUXVldWUgcHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWU7CisrICBHc3RC
dWZmZXIgKmRlZmF1bHRfa2lkOworIAorICAgZ2ludCByZWZfY291bnQ7ICAgICAgICAgICAgICAg
LyogYXRvbWljICovCisgfTsKK0BAIC0yMDA4LDYgKzIwMDksNyBAQCBfY3JlYXRlX3N0cmVhbSAo
R3N0UVREZW11eCAqIGRlbXV4LCBndWludDMyIHRyYWNrX2lkKQorICAgc3RyZWFtLT5zdHJlYW1f
dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7CisgICBnc3RfdGFnX2xpc3Rfc2V0X3Nj
b3BlIChzdHJlYW0tPnN0cmVhbV90YWdzLCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7CisgICBnX3F1
ZXVlX2luaXQgKCZzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlKTsKKysgIHN0
cmVhbS0+ZGVmYXVsdF9raWQgPSBOVUxMOworICAgc3RyZWFtLT5yZWZfY291bnQgPSAxOworICAg
LyogY29uc2lzdGVudCBkZWZhdWx0IGZvciBwdXNoIGJhc2VkIG1vZGUgKi8KKyAgIGdzdF9zZWdt
ZW50X2luaXQgKCZzdHJlYW0tPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CitAQCAtMjQ3Niw2
ICsyNDc4LDMyIEBAIGdzdF9xdGRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBzaW5r
cGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046
CisgICAgIHsKKyAgICAgICBjb25zdCBnY2hhciAqc3lzdGVtX2lkID0gTlVMTDsKKysgICAgICBH
c3RCdWZmZXIgKmRlZmF1bHRfa2V5X2lkID0gTlVMTDsKKysgICAgICBjb25zdCBHc3RTdHJ1Y3R1
cmUgKnN0cnVjdHVyZTsKKysgICAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBOVUxMOworKyAg
ICAgIEdzdE1hcEluZm8gbWFwOworKworKyAgICAgIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRf
c3RydWN0dXJlIChldmVudCk7CisrICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5
cGVkIChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIpKSB7CisrICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldCAoc3RydWN0dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVSLAor
KyAgICAgICAgICAgICZkZWZhdWx0X2tleV9pZCwgTlVMTCk7CisrICAgICAgICBHU1RfREVCVUdf
T0JKRUNUIChkZW11eCwKKysgICAgICAgICAgICAicmVjZWl2ZWQgYSBkZWZhdWx0IGtleSBpZCBv
ZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAorKyAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3Np
emUgKGRlZmF1bHRfa2V5X2lkKSk7CisrCisrICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5
X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkgPj0KKysgICAgICAgICAgICBHU1RfTEVW
RUxfTUVNRFVNUCkgeworKyAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoZGVmYXVsdF9rZXlfaWQs
ICZtYXAsIEdTVF9NQVBfUkVBRCk7CisrICAgICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAoZGVt
dXgsICJkZWZhdWx0IGtleSBpZCIsIChndWludDggKikgbWFwLmRhdGEsCisrICAgICAgICAgICAg
ICBtYXAuc2l6ZSk7CisrICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGRlZmF1bHRfa2V5X2lk
LCAmbWFwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChRVERFTVVYX05fU1RSRUFNUyAo
ZGVtdXgpKSB7CisrICAgICAgICAgIHN0cmVhbSA9IFFUREVNVVhfTlRIX1NUUkVBTSAoZGVtdXgs
IDApOworKyAgICAgICAgICBzdHJlYW0tPmRlZmF1bHRfa2lkID0gZGVmYXVsdF9rZXlfaWQ7Cisr
ICAgICAgICB9CisrICAgICAgfQorIAorICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9u
IChldmVudCwgJnN5c3RlbV9pZCwgTlVMTCwgTlVMTCk7CisgICAgICAgR1NUX0RFQlVHX09CSkVD
VCAoZGVtdXgsICJSZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50IGZvciBzeXN0ZW0gSUQgJXMiLAor
QEAgLTI2ODgsNiArMjcxNiw4IEBAIGdzdF9xdGRlbXV4X3N0cmVhbV9jbGVhciAoUXREZW11eFN0
cmVhbSAqIHN0cmVhbSkKKyAgIGdfcXVldWVfZm9yZWFjaCAoJnN0cmVhbS0+cHJvdGVjdGlvbl9z
Y2hlbWVfZXZlbnRfcXVldWUsCisgICAgICAgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwp
OworICAgZ19xdWV1ZV9jbGVhciAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVl
dWUpOworKyAgaWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpCisrICAgIGdzdF9idWZmZXJfdW5yZWYg
KHN0cmVhbS0+ZGVmYXVsdF9raWQpOworICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21l
bnRzX2RhdGEgKHN0cmVhbSk7CisgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19k
YXRhIChzdHJlYW0pOworIH0KK0BAIC0yOTU0LDYgKzI5ODQsMTkgQEAgcXRkZW11eF9wYXJzZV9w
aWZmIChHc3RRVERlbXV4ICogcXRkZW11eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBnaW50IGxl
bmd0aCwKKyAgICAgdXNlc19zdWJfc2FtcGxlX2VuY3J5cHRpb24gPSBUUlVFOworICAgfQorIAor
KyAgLy8gSW4gdGhlIGNhc2Ugb2Ygc21vb3RoIHN0cmVhbWluZywgd2UgbmV2ZXIgZ2V0IG1vb3Yg
Ym94ZXMgYW5kIHRoZWlyCisrICAvLyBkZWZhdWx0IGVuY3J5cHRpb24gbWV0YWRhdGEuIEluc3Rl
YWQsIHRoZSBkZW11eGVyIGhhcyB0byBwYXJzZSB0aGlzCisrICAvLyBpbmZvcm1hdGlvbiBvdXQg
b2YgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBwYXlsb2FkcyBhbmQgbWFrZSBpdCBhdmFpbGJsZQor
KyAgLy8gc29tZWhvdyB0byB1cy4KKysgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHNz
X2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgImtpZCIpKSB7CisrICAgIGlmICghc3RyZWFtLT5k
ZWZhdWx0X2tpZCkgeworKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIk5vIGF2
YWlsYWJsZSBrZXkgaWQgZm9yIHNhbXBsZSIpOworKyAgICB9IGVsc2UgeworKyAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0IChzc19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMsICJraWQiLCBHU1RfVFlQ
RV9CVUZGRVIsCisrICAgICAgICAgIHN0cmVhbS0+ZGVmYXVsdF9raWQsIE5VTEwpOworKyAgICB9
CisrICB9CisrCisgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHNzX2luZm8tPmRlZmF1
bHRfcHJvcGVydGllcywgIml2X3NpemUiLAorICAgICAgICAgICAmaXZfc2l6ZSkpIHsKKyAgICAg
R1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgIkVycm9yIGdldHRpbmcgZW5jcnlwdGlvbiBJViBz
aXplIGZpZWxkIik7CistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvaW5zdGFs
bC1kZXBlbmRlbmNpZXMgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKaW5kZXggNjEz
NjdiNTAwY2EzLi45ZmJlM2U0ZDk4Y2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRl
cGVuZGVuY2llcworKysgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKQEAgLTE5MCw2
ICsxOTAsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aEFwdCB7CiAgICAgICAg
IGdpdCBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5n
cy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1p
bmctdXRpbHMgXAogICAgICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGliY3VwczItZGV2
IFwKQEAgLTM3OCw2ICszNzksNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aFBh
Y21hbiB7CiAgICAgICAgIGdudXRscyBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBc
CiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgICAgICBneXAgXAogICAg
ICAgICBpY29uLW5hbWluZy11dGlscyBcCiAgICAgICAgIGxpYmNyb2NvIFwKICAgICAgICAgbGli
Y3VwcyBcCkBAIC01NjEsNiArNTYzLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dp
dGhEbmYgewogICAgICAgICBnbnV0bHMtZGV2ZWwgXAogICAgICAgICBnb2JqZWN0LWludHJvc3Bl
Y3Rpb24gXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAg
ICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBpdHN0b29sIFwK
ICAgICAgICAgbGliWGZvbnQyLWRldmVsIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL2poYnVpbGQvamhi
dWlsZHJjX2NvbW1vbi5weSBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQppbmRl
eCBiYmJkYmYzNjAzOWYuLjNlMjYxZTcyZDdiYSAxMDA2NDQKLS0tIGEvVG9vbHMvamhidWlsZC9q
aGJ1aWxkcmNfY29tbW9uLnB5CisrKyBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5w
eQpAQCAtODMsMyArODMsOCBAQCBkZWYgaW5pdChqaGJ1aWxkcmNfZ2xvYmFscywgamhidWlsZF9w
bGF0Zm9ybSk6CiAKICAgICBpZiAneDg2XzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5lKCk6CiAgICAg
ICAgIGpoYnVpbGRyY19nbG9iYWxzWydjb25kaXRpb25zJ10uYWRkKCd4ODZfNjQnKQorCisgICAg
aWYgJ0pIQlVJTERfRU5BQkxFX09QRU5DRE0nIGluIG9zLmVudmlyb246CisgICAgICAgIGpoYnVp
bGRfZW5hYmxlX29wZW5jZG0gPSBvcy5lbnZpcm9uWydKSEJVSUxEX0VOQUJMRV9PUEVOQ0RNJ10u
bG93ZXIoKQorICAgICAgICBpZiBqaGJ1aWxkX2VuYWJsZV9vcGVuY2RtID09ICd5ZXMnIG9yIGpo
YnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJzEnIG9yIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0g
J3RydWUnOgorICAgICAgICAgICAgamhidWlsZHJjX2dsb2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQo
J09wZW5DRE0nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzIGIv
VG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCmluZGV4IGFkODI2MjEzNWU5ZC4uMWUyYWVk
MzY0M2M3IDEwMDc1NQotLS0gYS9Ub29scy93cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIv
VG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCkBAIC0xMjAsNiArMTIwLDcgQEAgZnVuY3Rp
b24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQgewogICAgIHBhY2thZ2VzPSIkcGFja2FnZXMg
XAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldiBc
CisgICAgICAgIGd5cCBcCiAgICAgICAgIGxpYmVnbDEtbWVzYS1kZXYgXAogICAgICAgICBsaWJl
eHBhdDEtZGV2IFwKICAgICAgICAgbGliZmRrLWFhYy1kZXYgXApAQCAtMjM5LDYgKzI0MCw3IEBA
IGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFuIHsKICAgICAgICAgZXhwYXQg
XAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAg
ICAgICAgZ3lwIFwKICAgICAgICAgbGliZmRrLWFhYyBcCiAgICAgICAgIGxpYnByb3h5IFwKICAg
ICAgICAgbGlicHNsIFwKQEAgLTM1OSw2ICszNjEsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5k
ZW5jaWVzV2l0aERuZiB7CiAgICAgICAgIGZkay1hYWMtZGV2ZWwgXAogICAgICAgICBnaXQgXAog
ICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwK
ICAgICAgICAgbGlibW91bnQtZGV2ZWwgXAogICAgICAgICBsaWJwcm94eS1kZXZlbCBcCiAgICAg
ICAgIGxpYnBzbC1kZXZlbCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403689</attachid>
            <date>2020-07-07 08:05:42 -0700</date>
            <delta_ts>2020-07-10 04:29:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>150841</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZDJhOTUyYWU2ZWEuLjE1
Mzc4NTBjZmY2ZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA3LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIE1hYyBDTWFrZSBidWlsZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA1Mzg2Y2Y5MGMzYzUuLmM4OTIxOWUwZGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAy
MC0wNy0wMyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHU3RyZWFtZXJdW0VNRV1bT3BlbkNETV0gSW1wbGVtZW50IE9wZW5DRE0gc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
NTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm1FbmFibGUuaDogRGlzYWJsZSBPUEVOQ0RNIGJ5IGRlZmF1bHQuCisKIDIwMjAt
MDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAiLVds
aXRlcmFsLWNvbnZlcnNpb24iIHdhcm5pbmcgdG8gWGNvZGUgYmFzZWQgYnVpbGRzIGFuZCBmaXgg
dGhlIGlzc3VlcyBpdCBmaW5kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKaW5kZXggMWIzNDkzMDA0
YzgwLi5lMmNkOTBjNjY1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaApAQCAtNDAxLDYgKzQw
MSwxMCBAQAogI2RlZmluZSBFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAwCiAjZW5kaWYKIAorI2lm
ICFkZWZpbmVkKEVOQUJMRV9PUEVOQ0RNKQorI2RlZmluZSBFTkFCTEVfT1BFTkNETSAwCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMpCiAjZGVmaW5lIEVO
QUJMRV9PUklFTlRBVElPTl9FVkVOVFMgMAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBmMTk4YTlj
ZWJkLi5mYmI1NzczM2Q1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzMgQEAKKzIwMjAtMDct
MDMgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dGVkIHRoZSBPcGVuQ0RNIHN1cHBvcnQgaW4gdGhlIENETU9wZW5DRE0gYW5kCisgICAgICAgIENE
TVByb3h5T3BlbkNETSByZWxhdGVkIGNsYXNzZXMuIENETU9wZW5DRE0gY2xhc3NlcyBjaGVjayBm
b3IKKyAgICAgICAgV2lkZXZpbmUgc3VwcG9ydCBpbiBPcGVuQ0RNIGFuZCBnbHVlcyB0aGUgSmF2
YVNjcmlwdCBBUEkgdG8gdGhlCisgICAgICAgIE9wZW5DRE0vVGh1bmRlciBmcmFtZXdvcmsuIEJ1
aWxkaW5nIHRoaXMgaXMgb3B0aW9uYWwgYW5kIC0tb3BlbmNkbQorICAgICAgICBwYXJhbWV0ZXIg
bmVlZHMgdG8gYmUgcGFzc2VkIHRvIGJ1aWxkLXdlYmtpdCB0byBnZXQgaXQuCisKKyAgICAgICAg
Q0RNUHJveHkgcmVsYXRlZCBuZWVkZWQgY2hhbmdlcyBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29u
cy4gRmlyc3QKKyAgICAgICAgaXMgdGhhdCBLZXkgd2FzIGNvbnNpZGVyaW5nIG9ubHkgYSBWZWN0
b3I8dWludDhfdD4gYXMgYSB0eXBlIGFuZAorICAgICAgICBPcGVuQ0RNIGhhcyBzZXNzaW9uIG9i
amVjdHMuIEtleSBpcyBhbHNvIHJlbmFtZWQgdG8gS2V5SGFuZGxlIGFzCisgICAgICAgIHRoaXMg
bmFtZSByZWZsZWN0cyBpbiBhIGJldHRlciB3YXkgdGhlIHB1cnBvc2Ugb2YgdGhlIGNsYXNzLiBU
aGlzCisgICAgICAgIGJsZWVkcyBvdXQgdG8gYWxsIENETVByb3h5IHJlbGF0ZWQgY2xhc3Nlcy4g
Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkKKyAgICAgICAgZ2V0cyBzdXBwb3J0IHRvIHJlbW92ZSBp
dHNlbGYgZnJvbSB0aGUgQ0RNU2Vzc2lvblByb3h5LgorCisgICAgICAgIFJlZ2FyZGluZyBDbGVh
cktleSwgd2UgYWRhcHQgdGhlIGNoYW5nZXMgdG8gdGhlIENETVByb3h5IGNsYXNzZXMKKyAgICAg
ICAgYW5kIGRlLWNhYmxlIHByb3RlY3Rpb24gc3lzdGVtIGZyb20gdGhlIGRlY3J5cHRvcnMgYXMg
dGhlIE9wZW5DRE0KKyAgICAgICAgZGVjcnlwdG9yIGNvdWxkIGhhbmRsZSBtb3JlIHRoYW4gb25l
IHN5c3RlbS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFlvdVR1YmUgVFYgMjAxOSB0ZXN0cyBh
cmUgZ3JlZW4uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YUFzVUludDhQdHIgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3Bl
bkNETVR5cGVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6dGFr
ZVZhbHVlSWZEaWZmZXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnRhaW5z
S2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om1lcmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OmFkZEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjprZXlIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZv
cktleUhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxh
YmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWls
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5
SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JL
ZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94
eTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uUHJveHk6OnJlbW92ZUZyb21JbnN0YW5jZVByb3h5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleUhhbmRsZTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjppc1N0
YXR1c0N1cnJlbnRseVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Om9wZXJhdG9yPCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlIYW5kbGU6OktleUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6aW5zdGFu
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OnJl
bGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpjZG1JbnN0YW5jZVByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OnJlbW92ZVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVV0aWxpdGllcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJl
YW1lci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVDbGVhcktleTo6c3VwcG9ydHNJbml0RGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OnNhbml0aXplUmVzcG9u
c2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpwYXJlbnRJbnN0YW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzT3BlbkNETVJhbmtlZCk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplR1N0
cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZVZlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0
dGFjaG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
RmFjdG9yeUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5OjpwbGF0
Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKG9wZW5DRE1MaWNlbnNl
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0RGF0YU1ENSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXNzaW9uTG9hZEZhaWx1cmVGcm9tT3BlbkNETSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVu
Q0RNOjpkZXN0cnVjdE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DRE06
OmNyZWF0ZVNoYXJlZE9wZW5DRE1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3Rv
cnlPcGVuQ0RNOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OmNyZWF0ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3BlbkNETTo6Y3Jl
YXRlQ0RNUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5DRE06OnN1cHBv
cnRlZEtleVN5c3RlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5D
RE06OnN1cHBvcnRzS2V5U3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0ZWRJbml0RGF0YVR5cGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0c0NvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRlZFJvYnVzdG5lc3NlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlm
aWVyc1JlcXVpcmVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9y
aWdpbkFuZENsZWFyYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3Bl
bkNETTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5D
RE06OmxvYWRBbmRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVu
Q0RNOjpzdXBwb3J0c1NlcnZlckNlcnRpZmljYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNTZXNzaW9ucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c3VwcG9ydHNJbml0RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVTZXNzaW9uSWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpDRE1JbnN0YW5j
ZU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjppbml0aWFs
aXplV2l0aENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNOjpzZXRTZXJ2ZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZU9wZW5DRE06OnNldFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETSk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNQYXlsb2FkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6cGF5bG9hZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnBheWxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpoYXNUeXBlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6dHlwZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnR5cGVPciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5l
cmF0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjp0b1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdGF0dXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6a2V5VXBkYXRlZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRh
dGVEb25lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETTo6ZXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNOjpyZXF1ZXN0TGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25PcGVuQ0RNOjpzZXNzaW9uRmFpbHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmxvYWRTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpzdG9yZVJlY29yZE9m
S2V5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU3lzdGVtRGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0RNOjpPcGVuQ0RNU2Vzc2lvbkRlbGV0ZXI6Om9wZXJh
dG9yKCkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5
OjpjZW5jU2V0RGVjcnlwdGlvbktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5T3BlbkNETTo6Z2V0RGVjcnlwdGlvblNlc3Npb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJveHlPcGVuQ0RNOjpkZWNyeXB0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5T3BlbkNETS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3Ry
ZWFtZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdERhdGE6OnBheWxvYWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjppc1dpZGV2aW5lS2V5U3lzdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jbGVhcl9r
ZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHByb3RlY3Rpb25TeXN0ZW1JZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHRyYW5zZm9ybUNhcHMpOgor
ICAgICAgICAodHJhbnNmb3JtSW5QbGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RN
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX29wZW5jZG1f
ZGVjcnlwdF9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKHByb3RlY3Rpb25T
eXN0ZW1JZCk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNE
TURlY3J5cHRvckdTdHJlYW1lci5oOiBBZGRlZC4KKwogMjAyMC0wNy0wMyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQ29yZS9Tb3VyY2VzLnR4dDogUmVtb3Zl
ICNpZiBFTkFCTEVfR0FNRVBBRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWRkOWY4YjNmMTUxLi5m
ZmFkM2Y5YTc0MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA3MSw2ICsxMDcxLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVJlcXVpcmVtZW50LmgKICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1S
ZXN0cmljdGlvbnMuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25UeXBl
LmgKKyAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaAogCiAgICAgcGxh
dGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuaAogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2Ft
ZXBhZFByb3ZpZGVyQ2xpZW50LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGFiYzBmNTUyODEuLjVhZDhlNjYwODM5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDIxOSw2ICs0MjE5LDggQEAKIAkJQ0RFM0E4NTQxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlv
VHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREUzQTg1MjE3RjVGQ0U2MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYu
aCAqLzsgfTsKIAkJQ0RFM0E4NTcxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERTNBODU1MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0g
Ki87IH07CiAJCUNERTNBODU4MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFW
Rk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
RTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLzsg
fTsKKwkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFM0FFMTAyNEI0OTE2OTAw
MTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovOyB9OworCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhF
N0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3Bw
ICovOyB9OwogCQlDREU1NTUyNDI0MDVDQ0YyMDA4QTNEREIgLyogTGVnYWN5Q0RNLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE5OEUwQTE2MDNDRDU5
MDBGRUEzQjEgLyogTGVnYWN5Q0RNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQ0RFNTU1MjUyNDA1Q0NGMjAwOEEzRERCIC8qIExlZ2FjeUNETVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QTk4RTBDMTYwM0NGM0MwMEZFQTNCMSAvKiBMZWdhY3lDRE1Qcml2YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RFNTk1OTUxQkYxNkRGMzAw
QTFDQkU4IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTk1OTMxQkYxNjZBRDAwQTFDQkU4
IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tICovOyB9OwpAQCAtMTQzMDUsNiAr
MTQzMDcsOCBAQAogCQlDREUzQTg1MjE3RjVGQ0U2MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZh
dGVBVkYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9UcmFja1ByaXZh
dGVBVkYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFM0E4NTUxN0Y2MDIwNDAw
QzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFM0E4NTYxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlv
VHJhY2tQcml2YXRlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RFM0FFMTAyNEI0OTE2OTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDRE1VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0RFM0FFMTMyNEI0OTM2RjAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1VdGlsaXRpZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREU1OTU5MzFCRjE2NkFEMDBBMUNCRTggLyogQ0RN
U2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNTk1OTQxQkYxNjZEMTAwQTFDQkU4IC8qIENETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNERTU5NTk2MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODYzLDYg
KzI2ODY3LDcgQEAKIAkJQ0Q5NEE1Q0IxRjcxQ0I0NjAwRjUyNUM1IC8qIGVuY3J5cHRlZG1lZGlh
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDREUzQUUx
MzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlDRDk0QTVEOTFG
NzFDQjlGMDBGNTI1QzUgLyogY2xlYXJrZXkgKi8sCiAJCQkJQ0RGNzU2OUIyMTVDMjNBNDAwRUZD
QjUwIC8qIENETUVuY3J5cHRpb25TY2hlbWUuaCAqLywKIAkJCQlDRDk0QTVEMTFGNzFDQjZCMDBG
NTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8sCkBAIC0yNjg3Nyw2ICsyNjg4Miw3IEBACiAJCQkJ
Q0Q5NEE1RDYxRjcxQ0I2RDAwRjUyNUM1IC8qIENETU1lc3NhZ2VUeXBlLmggKi8sCiAJCQkJQ0Qz
Q0UxMUMyNDA0NTFBRjAwNEJBMDFEIC8qIENETVByaXZhdGUuY3BwICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0RFM0FFMTAyNEI0OTE2
OTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1
MjVENSAvKiBDRE1Qcm94eS5jcHAgKi8sCiAJCQkJQ0Q5NEE1Q0YxRjcxQ0I2MTAwRjUyNUM1IC8q
IENETVByb3h5LmggKi8sCiAJCQkJQ0Q5NEE1Q0MxRjcxQ0I2OTAwRjUyNUM1IC8qIENETVJlcXVp
cmVtZW50LmggKi8sCkBAIC0zMTE4OCw2ICszMTE5NCw3IEBACiAJCQkJRjM0NEM3NTMxMTI5NEQ5
RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBMEU3NzBGMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdBNTQ4NTgwMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0
b3JIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREUzQUUxMjI0QjQ5MTZBMDAxMjhFN0Ug
LyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUI4MUNBRTFGQUE0NDYyMDAz
N0QxRTYgLyogSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTIw
RDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1ODYwRTZEMjMwREUzMDMwMDQ2MUFBRSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25QdWJsaWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3NjgsNiArMzQ3NzUsNyBA
QAogCQkJCURFQ0E3REI3MUY5RTY3QjYwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTY3LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCURFQ0E3REI4MUY5RTY3QjYwMEUzQjY2MSAvKiBVbmlmaWVkU291
cmNlMTY4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQ0E3REI5MUY5RTY3QjYwMEUzQjY2MSAv
KiBVbmlmaWVkU291cmNlMTY5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNERTNBRTE0MjRCNDkz
NzAwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREVDQTdE
QkExRjlFNjdCNjAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNzAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREVDQTdERkIxRjlFQjM2NDAwRTNCNjYxIC8qIFVuaWZpZWRTb3VyY2UxNzEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJREVDQTdERkMxRjlFQjM2NDAwRTNCNjYxIC8qIFVuaWZpZWRTb3Vy
Y2UxNzIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKaW5kZXggNzk1NDdjYmFmMGQ1Li5mNmRmMDcwYmNlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTE2OCw2ICsxNjgsNyBAQCBpZiAoRU5BQkxFX0VO
Q1JZUFRFRF9NRURJQSkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAg
ICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKyAgICAgICAgcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0xODAsNiAr
MTgxLDIzIEBAIGlmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQogICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7TElCR0NSWVBUX0xJQlJBUklFU30gLWxncGctZXJy
b3IKICAgICApCisKKyAgICBpZiAoRU5BQkxFX09QRU5DRE0pCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7T1BFTkNE
TV9JTkNMVURFX0RJUlN9CisgICAgICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgJHtPUEVOQ0RNX0xJQlJBUklFU30KKyAgICAgICAgKQor
CisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNwcAorICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uY3BwCisgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCisgICAgICAgICkKKyAgICBlbmRpZiAoKQorCiBlbmRpZiAoKQogCiBp
ZiAoVVNFX0NBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5k
ZXggMjRkMjBiNjQ2OGJhLi5kZGY3YTA0ZmRjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcApAQCAtMTIzLDYgKzEyMywxMSBAQCBjb25zdCBjaGFyKiBTaGFyZWRC
dWZmZXI6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPmRh
dGEoKTsKIH0KIAorY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpkYXRhQXNVSW50OFB0cigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEoKSk7Cit9CisKIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURh
dGEoc2l6ZV90IHBvc2l0aW9uKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKHBvc2l0aW9u
IDwgbV9zaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGE4
ZmU3MDFiMTliLi41MWVlNmQ0ZmMxNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCkBAIC0xMDYsNiArMTA2LDcgQEAgcHVibGljOgogICAgIC8vIEl0ZXJhdGUgdGhlIHNl
Z21lbnRzIHVzaW5nIGJlZ2luKCkgYW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1
ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7Cisg
ICAgY29uc3QgdWludDhfdCogZGF0YUFzVUludDhQdHIoKSBjb25zdDsKIAogICAgIC8vIENyZWF0
ZXMgYW4gQXJyYXlCdWZmZXIgYW5kIGNvcGllcyB0aGlzIFNoYXJlZEJ1ZmZlcidzIGNvbnRlbnRz
IHRvIHRoYXQKICAgICAvLyBBcnJheUJ1ZmZlciB3aXRob3V0IG1lcmdpbmcgc2VnbWVudGVkIGJ1
ZmZlcnMgaW50byBhIGZsYXQgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKaW5kZXggMzUxNzhlZjM2MDZmLi44NzZj
ZDY2YWQxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtNzUsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIENs
ZWFyS2V5LAogICAgICAgICBGYWlyUGxheVN0cmVhbWluZywKICAgICAgICAgUmVtb3RlLAorI2lm
IEVOQUJMRShPUEVOQ0RNKQorICAgICAgICBPcGVuQ0RNLAorI2VuZGlmCiAgICAgfTsKICAgICB2
aXJ0dWFsIEltcGxlbWVudGF0aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVBy
b3h5LmNwcAppbmRleCAxYzQ2MmYwYjY1NDMuLmYyYTVmMzE3NjZhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC05MSwzNSArOTIsNDIgQEAgc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0
cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKIAogfSAvLyBuYW1lc3BhY2Uge30KIAot
U3RyaW5nIEtleTo6aWRBc1N0cmluZygpIGNvbnN0CitTdHJpbmcgS2V5SGFuZGxlOjppZEFzU3Ry
aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3Ry
aW5nKG1faWQpLCAiXSIpOwogfQogCi1TdHJpbmcgS2V5Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QK
K2Jvb2wgS2V5SGFuZGxlOjp0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQmJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3Ry
aW5nKG1fdmFsdWUpLCAiXSIpOworICAgIGlmIChtX3ZhbHVlICE9IHZhbHVlKSB7CisgICAgICAg
IG1fdmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNL
ZXlJRChjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewotICAgIHJldHVybiBtX2tleXMu
ZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgcmV0
dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9y
ZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7CiAgICAgfSkgIT0g
V1RGOjpub3RGb3VuZDsKIH0KIAogdm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUm
IG90aGVyKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1
IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBrZXkgOiBvdGhlcikgewogICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2ls
bCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKICAgICAgICAgLy8gaW4g
dGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/
IFdoaWNoIGlzICJuZXdlciI/CiAgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBl
eHRyYSBjb21wbGV4aXR5LgotICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNv
bnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsg
fSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgc2l6ZV90IGtleVdpdGhNYXRjaGluZ0tleUlE
SW5kZXggPSBtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4m
IHN0b3JlZEtleSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KTsKKyAgICAgICAgaWYg
KGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAg
IG1fa2V5cy5hcHBlbmQoa2V5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgLy8gTk9URTog
VGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8g
aWdub3JlIGl0LgotICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3Jl
ZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleXMgd2l0aCB0
aGUgc2FtZSBJRCEiKTsKKyAgICAgICAgICAgIEFTU0VSVChrZXktPnZhbHVlKCkgPT0gbV9rZXlz
W2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdLT52YWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
IAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTEyOSwxNSArMTM3LDE1IEBAIHZvaWQgS2V5U3RvcmU6
Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECiB9
CiAKLUNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlz
QXNSZWxlYXNlZCgpIGNvbnN0CitDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBL
ZXlTdG9yZTo6YWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1cykg
Y29uc3QKIHsKICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0
dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgIGZvciAoYXV0byYg
a2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQotICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkOworICAgICAgICBrZXlTdGF0
dXMuc2Vjb25kID0gc3RhdHVzOwogICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7CiB9CiAKLWJv
b2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCitib29s
IEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJiBuZXdLZXlzKQog
ewogICAgIGJvb2wgZGlkS2V5U3RvcmVDaGFuZ2UgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGtl
eSA6IG5ld0tleXMpIHsKQEAgLTE0NywxNiArMTU1LDE4IEBAIGJvb2wgS2V5U3RvcmU6OmFkZEtl
eXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCiAgICAgcmV0dXJuIGRpZEtleVN0b3Jl
Q2hhbmdlOwogfQogCi1ib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCitib29s
IEtleVN0b3JlOjphZGQoUmVmUHRyPEtleUhhbmRsZT4mJiBrZXkpCiB7CiAgICAgYm9vbCBkaWRT
dG9yZUNoYW5nZSA9IGZhbHNlOwotICAgIHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4
ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkp
IHsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0
Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7CiAgICAgICAg
IHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CiAgICAgfSk7CiAKICAgICBpZiAoa2V5V2l0aE1h
dGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CiAgICAgICAgIGF1dG8mIGtleVdp
dGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXkt
PnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgICAgICBkaWRTdG9yZUNo
YW5nZSA9IGtleVdpdGhNYXRjaGluZ0tleUlEID09IGtleTsKKyAgICAgICAgaWYgKGRpZFN0b3Jl
Q2hhbmdlKQorICAgICAgICAgICAga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBrZXk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElE
ICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOyAgICAgIAogICAgICAgICBtX2tleXMuYXBwZW5kKGtleSk7CkBAIC0xNjgsNyAr
MTc4LDcgQEAgYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQogICAgICAgICAv
LyBOT1RFOiBUaGlzIGlzIG5vdCBhcyBwYXRob2xvZ2ljYWwgYXMgaXQgbWF5IHNlZW0sIGZvciBh
bGwKICAgICAgICAgLy8gcHJhY3RpY2FsIHB1cnBvc2VzIHRoZSBzdG9yZSBoYXMgYSBtYXhpbXVt
IG9mIDIga2V5cy4KICAgICAgICAgc3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5k
KCksCi0gICAgICAgICAgICBbXShjb25zdCBSZWZQdHI8S2V5PiYgYSwgY29uc3QgUmVmUHRyPEtl
eT4mIGIpIHsKKyAgICAgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBhLCBjb25z
dCBSZWZQdHI8S2V5SGFuZGxlPiYgYikgewogICAgICAgICAgICAgICAgIHJldHVybiAqYSA8ICpi
OwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTgzLDcgKzE5Myw3IEBAIHZvaWQgS2V5U3Rv
cmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKICAgICAgICAgcmVt
b3ZlKGtleSk7CiB9CiAKLWJvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYg
a2V5KQorYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXkp
CiB7CiAgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKIApAQCAtMjA0LDExICsyMTQsMTEg
QEAgYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCiAgICAgcmV0
dXJuIHN0b3JlQ2hhbmdlZDsKIH0KIAotY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6
a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2NvbnN0IFJlZlB0
cjxLZXlIYW5kbGU+JiBLZXlTdG9yZTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQp
IGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKICAgICAgICAg
aWYgKCprZXkgPT0ga2V5SUQpCi0gICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgpOworICAg
ICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoZmFs
c2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKQEAgLTIzOCwxMSAr
MjQ4LDExIEBAIHZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGlu
c3RhbmNlKQogICAgIG1faW5zdGFuY2UgPSBpbnN0YW5jZTsKIH0KIAotVmVjdG9yPHVpbnQ4X3Q+
IENETVByb3h5OjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
UmVmUHRyPEtleUhhbmRsZT4gQ0RNUHJveHk6OmtleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtl
eUlEKSBjb25zdAogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwog
ICAgIEFTU0VSVChtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpKTsKLSAgICByZXR1cm4g
bV9rZXlTdG9yZS5rZXlWYWx1ZShrZXlJRCk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5SGFu
ZGxlKGtleUlEKTsKIH0KIAogdm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBj
b25zdApAQCAtMjYxLDcgKzI3MSw3IEBAIHZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KCkgY29uc3QKICAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOwogfQog
Ci1PcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4g
Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29u
c3QKIHsKICAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOwogICAgIC8vIFVuY29uZGl0aW9uYWxs
eSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVj
cnlwdG9ycyBvbmx5IGdldApAQCAtMjgxLDMyICsyOTEsNDEgQEAgT3B0aW9uYWw8VmVjdG9yPHVp
bnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKQogCiAgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRv
SGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1
ZShrZXlJRCk7CisgICAgICAgIFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtleUhhbmRsZShr
ZXlJRCk7CisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFuZGxlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIH0KICAgICAKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgSUQg
JXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotYm9vbCBDRE1Qcm94eTo6a2V5QXZh
aWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK2Jvb2wg
Q0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7CiB9CiAK
LWJvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAorYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYga2V5
SUQpIGNvbnN0CiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAg
ICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKIH0KIAotT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0CitPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgewogICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleUhhbmRsZShrZXlJRCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICBSZWZQdHI8S2V5SGFuZGxl
PiBoYW5kbGUgPSBrZXlIYW5kbGUoa2V5SUQpOworICAgIHJldHVybiBtYWtlT3B0aW9uYWwoaGFu
ZGxlLnJlbGVhc2VOb25OdWxsKCkpOworfQorCitPcHRpb25hbDxLZXlIYW5kbGVWYWx1ZVZhcmlh
bnQ+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXlWYWx1ZShjb25zdCBLZXlJRFR5cGUmIGtleUlE
KSBjb25zdAoreworICAgIGlmIChhdXRvIGtleUhhbmRsZSA9IGdldE9yV2FpdEZvcktleUhhbmRs
ZShrZXlJRCkpCisgICAgICAgIHJldHVybiBtYWtlT3B0aW9uYWwoKCprZXlIYW5kbGUpLT52YWx1
ZSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIENETUluc3RhbmNlUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkKQEAgLTM2MCw2ICszNzksMTggQEAgdm9pZCBDRE1J
bnN0YW5jZVByb3h5Ojp0cmFja1Nlc3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkm
IHNlc3Npb24pCiAgICAgbV9zZXNzaW9ucy5hZGQoc2Vzc2lvbik7CiB9CiAKK0NETUluc3RhbmNl
U2Vzc2lvblByb3h5OjpDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5JiBp
bnN0YW5jZSkKKyAgICA6IG1faW5zdGFuY2UobWFrZVdlYWtQdHIoaW5zdGFuY2UpKQoreworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpyZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgp
Cit7CisgICAgaWYgKCFtX2luc3RhbmNlKQorICAgICAgICByZXR1cm47CisgICAgbV9pbnN0YW5j
ZS0+cmVtb3ZlU2Vzc2lvbigqdGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaAppbmRleCBhOWU3YmNkOTExYjEuLjk2
MjVlN2IzYTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Qcm94eS5oCkBAIC0zOCwzMSArMzgsNTEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogCisjaWYgRU5BQkxFKE9QRU5D
RE0pCisjaW5jbHVkZSA8bWVtb3J5PgorCitzdHJ1Y3QgT3BlbkNETVNlc3Npb247CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxL
ZXk+IHsKK3VzaW5nIEtleUlEVHlwZSA9IFZlY3Rvcjx1aW50OF90PjsKK3VzaW5nIEtleUhhbmRs
ZVZhbHVlVmFyaWFudCA9IFZhcmlhbnQ8CisgICAgVmVjdG9yPHVpbnQ4X3Q+CisjaWYgRU5BQkxF
KE9QRU5DRE0pCisgICAgLCBzdGQ6OnNoYXJlZF9wdHI8T3BlbkNETVNlc3Npb24+CisjZW5kaWYK
Kz47CisKK2NsYXNzIEtleUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxLZXlI
YW5kbGU+IHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1czsKIAotICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5U3RhdHVz
IHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZh
bHVlKQorICAgIHN0YXRpYyBSZWZQdHI8S2V5SGFuZGxlPiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1
cywgS2V5SURUeXBlJiYga2V5SUQsIEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIGtleUhhbmRsZVZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1cywgV1RG
TW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEtleUhhbmRsZShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleUhhbmRs
ZVZhbHVlKSkpOwogICAgIH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1faWQu
c2l6ZSgpKTsgfQogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQotICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CisgICAgYm9vbCB0YWtlVmFsdWVJZkRpZmZlcmVudChLZXlIYW5kbGVWYWx1ZVZh
cmlhbnQmJik7CisKKyAgICBjb25zdCBLZXlJRFR5cGUmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQorICAgIGNvbnN0IEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiB2YWx1ZSgpIHsgcmV0
dXJuIG1fdmFsdWU7IH0KICAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KKyAgICBib29sIGlzU3RhdHVzQ3VycmVudGx5VmFsaWQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2Fi
bGUgfHwgbV9zdGF0dXMgPT0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6Ok91dHB1dFJl
c3RyaWN0ZWQKKyAgICAgICAgICAgIHx8IG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOworICAgIH0KIAogICAgIFN0cmluZyBpZEFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAogICAgIC8v
IFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtl
eSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9Ci0gICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQotICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJl
dHVybiBrID09IGtleUlEOyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSYg
azEsIGNvbnN0IEtleSYgazIpCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlI
YW5kbGUgJmsxLCBjb25zdCBLZXlIYW5kbGUgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1f
aWQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUhhbmRsZSAmaywgY29u
c3QgS2V5SURUeXBlJiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlJRFR5cGUmIGtleUlELCBjb25zdCBLZXlIYW5k
bGUgJmspIHsgcmV0dXJuIGsgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgS2V5SGFuZGxlJiBrMSwgY29uc3QgS2V5SGFuZGxlJiBrMikKICAgICB7CiAgICAgICAg
IC8vIEtleSBJRHMgYXJlIGNvbXBhcmVkIGFzIGZvbGxvd3M6IEZvciBrZXkgSURzIEEgb2YgbGVu
Z3RoIG0gYW5kCiAgICAgICAgIC8vIEIgb2YgbGVuZ3RoIG4sIGFzc2lnbmVkIHN1Y2ggdGhhdCBt
IDw9IG4sIGxldCBBIDwgQiBpZiBhbmQgb25seQpAQCAtODQsMTIgKzEwNCwxMiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG51bVNlc3Npb25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNlczsgfQogICAgIGZyaWVu
ZCBjbGFzcyBLZXlTdG9yZTsKIAotICAgIEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWlu
dDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUpCi0gICAgICAgIDogbV9z
dGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlW
YWx1ZSkpIHsgfQorICAgIEtleUhhbmRsZShLZXlTdGF0dXMgc3RhdHVzLCBLZXlJRFR5cGUmJiBr
ZXlJRCwgS2V5SGFuZGxlVmFsdWVWYXJpYW50JiYga2V5SGFuZGxlVmFsdWUpCisgICAgICAgIDog
bV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShr
ZXlIYW5kbGVWYWx1ZSkpIHsgfQogCiAgICAgS2V5U3RhdHVzIG1fc3RhdHVzOwotICAgIFZlY3Rv
cjx1aW50OF90PiBtX2lkOwotICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIEtleUlE
VHlwZSBtX2lkOworICAgIEtleUhhbmRsZVZhbHVlVmFyaWFudCBtX3ZhbHVlOwogICAgIHVuc2ln
bmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07CiB9OwogCkBAIC05NywxOCArMTE3LDIx
IEBAIGNsYXNzIEtleVN0b3JlIHsKIHB1YmxpYzoKICAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3Ig
PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvcjsKIAotICAgIGJvb2wgY29udGFp
bnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICB2b2lkIG1l
cmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Ci0gICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShj
b25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIEtleVN0b3JlKCkgPSBkZWZhdWx0OworCisgICAg
Ym9vbCBjb250YWluc0tleUlEKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgbWVy
Z2UoY29uc3QgS2V5U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJik7CiAgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQot
ICAgIGJvb2wgYWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOwotICAgIGJvb2wgYWRkKFJl
ZlB0cjxLZXk+JiYpOwotICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAg
Ym9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4mJik7CisgICAgYm9vbCBhZGQo
UmVmUHRyPEtleUhhbmRsZT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleUhh
bmRsZT4mKTsKICAgICBib29sIGhhc0tleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgp
OyB9CiAgICAgdW5zaWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0OwotICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNl
ZCgpIGNvbnN0OworICAgIGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBrZXlIYW5kbGUoY29uc3Qg
S2V5SURUeXBlJikgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBcyhDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1cykgY29uc3Q7CiAgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlzLmlzRW1wdHkoKTsgfQogCiAgICAgYXV0byBiZWdpbigpIHsgcmV0dXJu
IG1fa2V5cy5iZWdpbigpOyB9CiAgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
cy5iZWdpbigpOyB9CkBAIC0xMjAsNyArMTQzLDcgQEAgcHVibGljOgogICAgIGF1dG8gcmVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
UmVmUHRyPEtleT4+IG1fa2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IG1fa2V5
czsKIH07CiAKIGNsYXNzIENETUluc3RhbmNlUHJveHk7CkBAIC0xMjksNyArMTUyLDcgQEAgY2xh
c3MgQ0RNSW5zdGFuY2VQcm94eTsKIC8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRl
Y3J5cHRvcnMpLgogY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q0RNUHJveHk+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4S2V5
V2FpdFRpbWVTZWNvbmRzID0gNV9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhL
ZXlXYWl0VGltZVNlY29uZHMgPSA3X3M7CiAKICAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVm
YXVsdDsKIApAQCAtMTQzLDEzICsxNjYsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVk
OgotICAgIFZlY3Rvcjx1aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdDsKLSAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKLSAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OwotICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBSZWZQdHI8S2V5SGFuZGxlPiBrZXlIYW5kbGUoY29u
c3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgS2V5SURU
eXBlJikgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBLZXlJRFR5
cGUmKSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxlPj4gdHJ5V2FpdEZvcktleUhh
bmRsZShjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBPcHRpb25hbDxSZWY8S2V5SGFuZGxl
Pj4gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYpIGNvbnN0OworICAgIE9w
dGlvbmFsPEtleUhhbmRsZVZhbHVlVmFyaWFudD4gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoY29uc3Qg
S2V5SURUeXBlJikgY29uc3Q7CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0
OwogICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKyAgICBjb25zdCBDRE1J
bnN0YW5jZVByb3h5KiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAog
cHJpdmF0ZToKICAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OwpAQCAtMTg0LDE0ICsy
MDksMjQgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPENETVBy
b3h5RmFjdG9yeSo+JiByZWdpc3RlcmVkRmFjdG9yaWVzKCk7CiB9OwogCitjbGFzcyBDRE1JbnN0
YW5jZVByb3h5OworCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSA6IHB1YmxpYyBDRE1J
bnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25Q
cm94eSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZURlY3J5cHRpb25SZXNvdXJjZXMoKSB7IG1faW5zdGFuY2UuY2xlYXIo
KTsgfQorICAgIHZvaWQgcmVtb3ZlRnJvbUluc3RhbmNlUHJveHkoKTsKKworcHJvdGVjdGVkOgor
ICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmKTsKKyAgICBjb25z
dCBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+JiBjZG1JbnN0YW5jZVByb3h5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0YW5jZTsgfQorCitwcml2YXRlOgorICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VQ
cm94eT4gbV9pbnN0YW5jZTsKIH07CiAKIC8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9u
IG1hbmFnZW1lbnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKIC8vIGZyb20g
InJlYWwgQ0RNIiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgotY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6
IHB1YmxpYyBDRE1JbnN0YW5jZSB7CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENE
TUluc3RhbmNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VQcm94eT4gewogcHVi
bGljOgogICAgIGV4cGxpY2l0IENETUluc3RhbmNlUHJveHkoY29uc3QgU3RyaW5nJiBrZXlTeXN0
ZW0pCiAgICAgewpAQCAtMjA3LDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFs
bEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CiAKICAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkg
bWV0aG9kcyAtIG1haW4gdGhyZWFkIG9ubHkuCi0gICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgp
IGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAg
ICBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5n
Rm9yS2V5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1EZWNy
eXB0b3JzV2FpdGluZ0ZvcktleSA+IDA7IH0KICAgICB2b2lkIHNldFBsYXllcihNZWRpYVBsYXll
ciogcGxheWVyKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fcGxheWVyID0gcGxheWVyOyB9
CiAKQEAgLTIxNSw2ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zv
cktleSgpOwogICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKIAorICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvbihjb25zdCBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikgeyBtX3Nl
c3Npb25zLnJlbW92ZShzZXNzaW9uKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlRGVjcnlw
dGlvblJlc291cmNlcygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0
aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZTg4
NWFkNmU1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBD
RE1VdGlsaXRpZXMgeworCitSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29u
c3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJz
IHdob3NlIHNpemUgZG9lc24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgor
ICAgIHNpemVfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUg
cm9vdCBvYmplY3QgKGlmIGFueSkuCisgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIUpTT046OlZh
bHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCit9Owor
Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43NGY1MTViMGJkMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGls
aXRpZXMuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEJ1
ZmZlcjsKKworbmFtZXNwYWNlIENETVV0aWxpdGllcyB7CisKK1JlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImKTsKKworfTsKKworfTsKKworI2Vu
ZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHAKaW5kZXggNjUzMjJlZDk5ZTk3Li5lNmNjMjJkOTBjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1D
bGVhcktleS5jcHAKQEAgLTM0LDM2ICszNCwxOSBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNv
bmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJD
RE1TZXNzaW9uVHlwZS5oIgorI2luY2x1ZGUgIkNETVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIklu
aXREYXRhUmVnaXN0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAgIC8vIEZh
aWwgb24gbGFyZ2UgYnVmZmVycyB3aG9zZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQg
dW5zaWduZWQgaW50ZWdlci4KLSAgICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7Ci0gICAg
aWYgKHNpemUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBK
U09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgotICAgIFN0cmluZyBqc29u
IHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IG9iamVjdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNl
TGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
Ok9iamVjdCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGlu
IHRoZSByb290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGlu
ZyB0byB0aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3JtYXQuCkBAIC03Niw3ICs1OSw3IEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29u
c3QgSlNPTjo6T2JqZWN0JiByb290CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0Fy
cmF5KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8
S2V5Pj4gZGVjb2RlZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBkZWNvZGVk
S2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdp
bigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0
byYgdmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsK
QEAgLTkxLDExICs3NCwxMiBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdAogICAgICAgICAgICAg
aWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdl
dFN0cmluZygiayIsIGtleVZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKLSAg
ICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0p
IHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCisg
ICAgICAgICAgICBLZXlJRFR5cGUga2V5SUREYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGtleUhhbmRsZVZhbHVlRGF0YTsKKyAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxE
ZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlW
YWx1ZSwgeyBrZXlIYW5kbGVWYWx1ZURhdGEgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZN
b3ZlKGtleVZhbHVlRGF0YSkpKTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXlI
YW5kbGU6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZN
b3ZlKGtleUlERGF0YSksIFdURk1vdmUoa2V5SGFuZGxlVmFsdWVEYXRhKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC00
MDEsNyArMzg1LDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzU2Vzc2lvbnMo
KSBjb25zdAogYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3Qg
QXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIGluaXREYXRhKSBj
b25zdAogewogICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgYW4gSlNPTiBv
YmplY3QgaW4ga2V5aWRzIGNhc2UuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGluaXREYXRhVHlwZSwgImtleWlkcyIpICYmIHBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkp
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImtl
eWlkcyIpICYmIENETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KGluaXREYXRhKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFz
IENFTkMgaW5pdERhdGEuCkBAIC00MTgsNyArNDAyLDcgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJL
ZXk6OnN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBjb25z
dAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3Bv
bnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UpIGNvbnN0CiB7CiAgICAgLy8gVmFsaWRh
dGUgdGhlIHJlc3BvbnNlIGJ1ZmZlciBhcyBhbiBKU09OIG9iamVjdC4KLSAgICBpZiAoIXBhcnNl
SlNPTk9iamVjdChyZXNwb25zZSkpCisgICAgaWYgKCFDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9i
amVjdChyZXNwb25zZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHJl
c3BvbnNlLmNvcHkoKTsKQEAgLTUwNyw3ICs0OTEsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNl
VAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9OwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7CisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcm9vdCA9IENETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsK
ICAgICBpZiAoIXJvb3QpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vz
c2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9w
dCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwpAQCAtNTI0LDcgKzUwOCw3IEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9u
SWQsIExpY2Vuc2VUCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtl
eXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9t
KG1fa2V5U3RvcmUpOworICAgICAgICAgICAgcGFyZW50SW5zdGFuY2UoKS5tZXJnZUtleXNGcm9t
KG1fa2V5U3RvcmUpOwogICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIApAQCAtNTM0LDcgKzUxOCw3IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFj
a25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtu
b3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGFyZW50SW5z
dGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIHBhcmVudEluc3Rh
bmNlKCkucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CiAgICAgICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVs
bG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CkBAIC01OTIs
NyArNTc2LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lv
bkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0
aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFu
ZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0Fz
UmVsZWFzZWQoKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlT
dG9yZS5hbGxLZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkKTsK
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsKICAgICAgICAgLy8gQ29u
c3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQs
IGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CkBAIC02MjEsNiArNjA1LDEzIEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcm
KQogewogfQogCitDRE1JbnN0YW5jZUNsZWFyS2V5JiBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6cGFyZW50SW5zdGFuY2UoKSBjb25zdAoreworICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0
YW5jZVByb3h5KCk7CisgICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q0RNSW5zdGFuY2VDbGVhcktleSY+KCppbnN0YW5jZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuaAppbmRleCA4YmYzNjI3MmFkYjYuLjEwNzkwODYwODBmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5oCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBPcHRpb25h
bDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwog
fTsKIAotY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5j
ZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xh
c3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5IHsK
IHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5z
dGFuY2VDbGVhcktleSgpOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIGNsYXNzIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvblBy
b3h5IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5j
ZUNsZWFyS2V5JiBwYXJlbnQpCi0gICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsg
fQorICAgICAgICA6IENETUluc3RhbmNlU2Vzc2lvblByb3h5KHBhcmVudCkgeyB9CiAgICAgdm9p
ZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFU
eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmlu
YWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
dm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKQEAgLTExNiw4ICsxMTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlw
ZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVj
b3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKIHByaXZhdGU6CisgICAgQ0RNSW5z
dGFuY2VDbGVhcktleSYgcGFyZW50SW5zdGFuY2UoKSBjb25zdDsKKwogICAgIFN0cmluZyBtX3Nl
c3Npb25JRDsKLSAgICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOwogICAg
IEtleVN0b3JlIG1fa2V5U3RvcmU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmlu
ZGV4IDhhYzlhYjMxOGU2Zi4uZmVjM2QyMzkyYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcApAQCAtNTAsNiArNTAsOSBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNp
bmNsdWRlICJXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIgorI2lmIEVOQUJMRShP
UEVOQ0RNKQorI2luY2x1ZGUgIldlYktpdE9wZW5DRE1EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNl
bmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yNzUsNiArMjc4LDIyIEBAIGJv
b2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4mJiBvcHRpb25z
KQogICAgIHJldHVybiBpc0dTdHJlYW1lckluaXRpYWxpemVkOwogfQogCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pCisvLyBXZWJNIGRvZXMgbm90IHNwZWNp
ZnkgYSBwcm90ZWN0aW9uIHN5c3RlbSBJRCBzbyBpdCBjYW4gaGFwcGVuIHRoYXQKKy8vIHRoZSBD
bGVhcktleSBkZWNyeXB0b3IgaXMgY2hvc2VuIGluc3RlYWQgb2YgdGhlIE9wZW5DRE0gb25lIGZv
cgorLy8gV2lkZXZpbmUgKGFuZCB2aWNldmVyc2EpIHdoaWNoIGNhbiBjYW4gY3JlYXRlIGNoYW9z
LiBUaGlzIGlzIGFuCisvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgaW4gcnVuIHRpbWUg
aWYgd2UgcHJlZmVyIHRvIHJhbmsgaGlnaGVyCisvLyBPcGVuQ0RNIG9yIENsZWFyS2V5LiBJZiB3
ZSB3YW50IHRvIHJ1biB0ZXN0cyB3aXRoIE9wZW5DRE0sIHdlIG5lZWQKKy8vIHRvIHNldCB0aGlz
IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIE9wZW5DRE0gYW5kIHRoYXQgZGVjcnlwdG9yIHdpbGwK
Ky8vIGJlIHJhbmtlZCBoaWdoZXIgd2hlbiB0aGVyZSBpcyBubyBwcm90ZWN0aW9uIHN5c3RlbSBz
ZXQgKGFzIGluCisvLyBXZWJNKS4KK2Jvb2wgaXNPcGVuQ0RNUmFua2VkKCkKK3sKKyAgICBjb25z
dCBjaGFyKiB2YWx1ZSA9IGdfZ2V0ZW52KCJXRUJLSVRfRU1FX1JBTktfUFJJT1JJVFkiKTsKKyAg
ICByZXR1cm4gdmFsdWUgJiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgIk9wZW5DRE0i
KTsKK30KKyNlbmRpZgorCiBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktp
dEVsZW1lbnRzKCkKIHsKICAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKQEAgLTI4Myw3
ICszMDIsMTEgQEAgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVt
ZW50cygpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAg
ICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JB
TktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisgICAgICAg
IGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5L
X1BSSU1BUlkgKyAyMDAsIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworI2lmIEVOQUJM
RShPUEVOQ0RNKQorICAgICAgICB1bnNpZ25lZCBvcGVuQ0RNUmFuayA9IGlzT3BlbkNETVJhbmtl
ZCgpID8gMzAwIDogMTAwOworICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAi
d2Via2l0b3BlbmNkbSIsIEdTVF9SQU5LX1BSSU1BUlkgKyBvcGVuQ0RNUmFuaywgV0VCS0lUX1RZ
UEVfTUVESUFfT1BFTkNETV9ERUNSWVBUKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQpAQCAtMzgyLDYgKzQwNSwxMyBAQCBSZWY8U2hhcmVkQnVmZmVyPiBHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZVNoYXJlZEJ1ZmZlcigpCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCp0aGlzKTsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IEdzdE1hcHBlZEJ1ZmZlcjo6
Y3JlYXRlVmVjdG9yKCkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rv
ci5hcHBlbmQoZGF0YSgpLCBzaXplKCkpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKIGJvb2wg
aXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBHUmVm
UHRyPEdzdFBsdWdpbj4gcGx1Z2luID0gYWRvcHRHUmVmKGdzdF9yZWdpc3RyeV9maW5kX3BsdWdp
bihnc3RfcmVnaXN0cnlfZ2V0KCksIG5hbWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRl
eCBhMWU1NjI0NGIxN2UuLjAyYTAyYzA1Nzc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApA
QCAtNzMsNiArNzMsOSBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9y
PFN0cmluZz4+JiYgPSBXVEY6Om51bGxvcHQpOwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5k
UmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3Qg
Y2hhciogbmljayk7CiB1aW50NjRfdCB0b0dzdFVuc2lnbmVkNjRUaW1lKGNvbnN0IE1lZGlhVGlt
ZSYpOworI2lmIEVOQUJMRShPUEVOQ0RNKQorYm9vbCBpc09wZW5DRE1SYW5rZWQoKTsKKyNlbmRp
ZgogCiBpbmxpbmUgR3N0Q2xvY2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAm
bWVkaWFUaW1lKQogewpAQCAtODEsNiArODQsMTEgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dz
dENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIAogY2xhc3MgR3N0TWFwcGVk
QnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1ZmZlcj4gewog
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoY29uc3Qg
R1JlZlB0cjxHc3RCdWZmZXI+JiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIuZ2V0KCksIGZsYWdzKTsKKyAgICB9CisKICAgICBz
dGF0aWMgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVyLCBH
c3RNYXBGbGFncyBmbGFncykKICAgICB7CiAgICAgICAgIEdzdE1hcEluZm8gaW5mbzsKQEAgLTEw
Niw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXplKTsgfQogICAgIGJvb2wgaXNTaGFyYWJsZSgp
IGNvbnN0IHsgcmV0dXJuICEobV9pbmZvLmZsYWdzICYgR1NUX01BUF9XUklURSk7IH0KICAgICBS
ZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gY3JlYXRlVmVjdG9yKCk7CiAKIHByaXZhdGU6CiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1
ZmZlciogYnVmZmVyLCBHc3RNYXBJbmZvJiYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYTM0YzU1MjJhY2UxLi5jNzkzNjQ3NTJh
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
CkBAIC0zMDIsNiArMzAyLDExIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAKICAgICBtX3BsYXllciA9IG51bGxwdHI7CiAgICAg
bV9ub3RpZmllci0+aW52YWxpZGF0ZSgpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkg
JiYgRU5BQkxFKE9QRU5DRE0pCisgICAgaWYgKG1fY2RtSW5zdGFuY2UpCisgICAgICAgIG1fY2Rt
SW5zdGFuY2UtPnJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCk7CisjZW5kaWYKIH0KIAogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKQEAgLTM1MTgsNyAr
MzUyMyw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlv
bkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmIGluaXRECiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEu
cGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQgJXMgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5w
YXlsb2FkQ29udGFpbmVyVHlwZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICBpbml0RGF0
YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFzIiwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5kYXRh
KCkpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CiAgICAgICAgIHdlYWtUaGlzLT5tX3Bs
YXllci0+aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENvbnRh
aW5lclR5cGUoKSwgaW5pdERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCmluZGV4
IDBmOWE2OGQyY2Q2ZC4uMzdlODQ3MDZlMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFj
dG9yeUdTdHJlYW1lci5jcHAKQEAgLTMzLDE3ICszMywyOSBAQAogCiAjaW5jbHVkZSAiQ0RNUHJv
eHlDbGVhcktleS5oIgogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisjaW5jbHVkZSAiQ0RNT3BlbkNE
TS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBDRE1GYWN0b3J5Ojpw
bGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykK
IHsKICAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigp
KTsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBmYWN0b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5
T3BlbkNETTo6c2luZ2xldG9uKCkpOworI2VuZGlmCiB9CiAKIFZlY3RvcjxDRE1Qcm94eUZhY3Rv
cnkqPiBDRE1Qcm94eUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoKQogewogICAg
IFZlY3RvcjxDRE1Qcm94eUZhY3RvcnkqPiBmYWN0b3JpZXM7CisjaWYgRU5BQkxFKE9QRU5DRE0p
CisgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgZmFjdG9yaWVz
LnVuY2hlY2tlZEFwcGVuZCgmQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpKTsKKyNlbHNl
CiAgICAgZmFjdG9yaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisjZW5kaWYKICAgICBm
YWN0b3JpZXMudW5jaGVja2VkQXBwZW5kKCZDRE1Qcm94eUZhY3RvcnlDbGVhcktleTo6c2luZ2xl
dG9uKCkpOwogICAgIHJldHVybiBmYWN0b3JpZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkyYmFmMmUzZTEzMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvQ0RNT3BlbkNETS5jcHAKQEAgLTAsMCArMSw2NTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKworI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkNETVByb3h5T3BlbkNETS5oIgorI2luY2x1ZGUgIkNE
TVJlc3RyaWN0aW9ucy5oIgorI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVkZSAi
Q0RNVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhS2V5TWVzc2FnZVR5cGUuaCIKKyNpbmNs
dWRlICJNZWRpYUtleVN0YXR1cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0
ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiAoIWRlZmlu
ZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSkKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Vi
a2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0TWVkaWFPcGVuQ0RNRGVjcnlwdERlYnVnQ2F0ZWdvcnkKKyNlbmRpZgorCitu
YW1lc3BhY2UgeworCisvLyBXZSBhcmUgZG9pbmcgdGhpcyB0byBhdm9pZCBjb25mbGljdCB3aXRo
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzLgordXNpbmcgT3BlbkNETUtleVN0YXR1cyA9
IEtleVN0YXR1czsKKworfQorCitzdGF0aWMgTGljZW5zZVR5cGUgb3BlbkNETUxpY2Vuc2VUeXBl
KFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TGljZW5zZVR5cGUgbGljZW5zZVR5cGUpCit7
CisgICAgc3dpdGNoIChsaWNlbnNlVHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6VGVtcG9yYXJ5OgorICAgICAgICByZXR1cm4gVGVtcG9y
YXJ5OworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6
UGVyc2lzdGVudFVzYWdlUmVjb3JkOgorICAgICAgICByZXR1cm4gUGVyc2lzdGVudFVzYWdlUmVj
b3JkOworICAgIGNhc2UgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZTo6
UGVyc2lzdGVudExpY2Vuc2U6CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50TGljZW5zZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFRlbXBvcmFyeTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENE
TUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlIHNlc3Npb25Mb2FkRmFpbHVyZUZy
b21PcGVuQ0RNKGNvbnN0IFN0cmluZ1ZpZXcmIGxvYWRTdGF0dXMpCit7CisgICAgaWYgKGxvYWRT
dGF0dXMgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNz
aW9uTG9hZEZhaWx1cmU6Ok5vbmU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0gIlNlc3Npb25Ob3RG
b3VuZCIpCisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFp
bHVyZTo6Tm9TZXNzaW9uRGF0YTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiTWlzbWF0Y2hlZFNl
c3Npb25UeXBlIikKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxv
YWRGYWlsdXJlOjpNaXNtYXRjaGVkU2Vzc2lvblR5cGU7CisgICAgaWYgKGxvYWRTdGF0dXMgPT0g
IlF1b3RhRXhjZWVkZWQiKQorICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNz
aW9uTG9hZEZhaWx1cmU6OlF1b3RhRXhjZWVkZWQ7CisgICAgcmV0dXJuIENETUluc3RhbmNlU2Vz
c2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpPdGhlcjsKK30KKworCit2b2lkIE9wZW5DRE06OmRl
c3RydWN0T3BlbkNETVNlc3Npb24oT3BlbkNETVNlc3Npb24qIHNlc3Npb24pCit7CisgICAgaWYg
KCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisgICAgb3BlbmNkbV9kZXN0cnVjdF9zZXNzaW9u
KHNlc3Npb24pOworfQorCitPcGVuQ0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBPcGVuQ0RNOjpj
cmVhdGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbihPcGVuQ0RNU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAg
ICByZXR1cm4gT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24oc2Vzc2lvbiwgT3BlbkNETTo6
ZGVzdHJ1Y3RPcGVuQ0RNU2Vzc2lvbik7Cit9CisKK0NETUZhY3RvcnlPcGVuQ0RNJiBDRE1GYWN0
b3J5T3BlbkNETTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RN
RmFjdG9yeU9wZW5DRE0+IHNfZmFjdG9yeTsKKyAgICByZXR1cm4gc19mYWN0b3J5OworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNETShj
b25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0o
a2V5U3lzdGVtKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q0RNUHJpdmF0ZU9wZW5DRE0+KGtl
eVN5c3RlbSk7Cit9CisKK1JlZlB0cjxDRE1Qcm94eT4gQ0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0
ZUNETVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0
c0tleVN5c3RlbShrZXlTeXN0ZW0pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5
T3BlbkNETShrZXlTeXN0ZW0pKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3Rv
cnlPcGVuQ0RNOjpzdXBwb3J0ZWRLZXlTeXN0ZW1zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRl
ZEtleVN5c3RlbXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAg
c3RkOjpzdHJpbmcgZW1wdHlTdHJpbmc7CisgICAgICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwg
MCBtZWFucyBzdXBwb3J0ZWQsIGhlbmNlIHNvbWV0aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0
ZWQuCisgICAgICAgIGlmICghb3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVV
dGlsaXRpZXM6OnNfV2lkZXZpbmVLZXlTeXN0ZW0sIGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAg
ICAgICAgICAgc3VwcG9ydGVkS2V5U3lzdGVtcy5hcHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVz
OjpzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBw
b3J0ZWRLZXlTeXN0ZW1zLmlzRW1wdHkoKSAmJiBpc09wZW5DRE1SYW5rZWQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiT3BlbkNETSBpcyB1cC1yYW5r
ZWQgYXMgcHJlZmVycmVkIGRlY3J5cHRvciBidXQgT3BlbkNETSBpcyBub3Qgc3VwcG9ydGluZyBh
bnkgZW5jcnlwdGlvbiBzeXN0ZW0uIElzICIKKyAgICAgICAgICAgICAgICAiVGh1bmRlciBydW5u
aW5nPyBBcmUgdGhlIHBsdWdpbnMgYnVpbHQ/Iik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0p
OworICAgIHJldHVybiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworfQorCitib29sIENETUZhY3RvcnlP
cGVuQ0RNOjpzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAg
ICByZXR1cm4gQ0RNRmFjdG9yeU9wZW5DRE06OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3Rl
bXMoKS5jb250YWlucyhrZXlTeXN0ZW0pOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJp
dmF0ZU9wZW5DRE06OnN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdAoreworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMgVmVjdG9yPEF0b21TdHJpbmc+
IHN1cHBvcnRlZEluaXREYXRhVHlwZXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKKyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDMpOworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9t
U3RyaW5nKCJrZXlpZHMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMudW5jaGVj
a2VkQXBwZW5kKEF0b21TdHJpbmcoImNlbmMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRh
VHlwZXMudW5jaGVja2VkQXBwZW5kKEF0b21TdHJpbmcoIndlYm0iKSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHN1cHBvcnRlZEluaXREYXRhVHlwZXM7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5D
RE06OnN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgYXVkaW9DYXBhYmlsaXR5
IDogY29uZmlndXJhdGlvbi5hdWRpb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNk
bV9pc190eXBlX3N1cHBvcnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBhdWRpb0NhcGFi
aWxpdHkuY29udGVudFR5cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGZvciAoYXV0byYgdmlkZW9DYXBhYmlsaXR5IDogY29uZmlndXJhdGlv
bi52aWRlb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9pc190eXBlX3N1cHBv
cnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCB2aWRlb0NhcGFiaWxpdHkuY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06
OnN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgZW1wdHlBdG9t
KCkgfTsKK30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZl
SWRlbnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwg
Y29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QKK3sKKyAgICByZXR1cm4gQ0RNUmVxdWlyZW1l
bnQ6Ok9wdGlvbmFsOworfQorCitDRE1SZXF1aXJlbWVudCBDRE1Qcml2YXRlT3BlbkNETTo6cGVy
c2lzdGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYs
IGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0dXJuIENETVJlcXVpcmVt
ZW50OjpPcHRpb25hbDsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6ZGlzdGluY3RpdmVJ
ZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0
cjxDRE1JbnN0YW5jZT4gQ0RNUHJpdmF0ZU9wZW5DRE06OmNyZWF0ZUluc3RhbmNlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlT3BlbkNETShtX2tleVN5c3RlbSkpOwor
fQorCit2b2lkIENETVByaXZhdGVPcGVuQ0RNOjpsb2FkQW5kSW5pdGlhbGl6ZSgpCit7CisgICAg
Ly8gTm8tb3AuCit9CisKK2Jvb2wgQ0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2VydmVyQ2Vy
dGlmaWNhdGVzKCkgY29uc3QKK3sKKyAgICAvLyBTZXJ2ZXIgY2VydGlmaWNhdGVzIGFyZSBub3Qg
c3VwcG9ydGVkLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNE
TTo6c3VwcG9ydHNTZXNzaW9ucygpIGNvbnN0Cit7CisgICAgLy8gU2Vzc2lvbnMgYXJlIHN1cHBv
cnRlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcml2YXRlT3BlbkNETTo6c3Vw
cG9ydHNJbml0RGF0YShjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgaW5pdERhdGEpIGNvbnN0Cit7CisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRh
IGJ1ZmZlciBhcyBhbiBKU09OIG9iamVjdCBpbiBrZXlpZHMgY2FzZS4KKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAia2V5aWRzIikgJiYgQ0RNVXRp
bGl0aWVzOjpwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgQ0VOQyBpbml0RGF0YS4g
RklYTUU6IFZhbGlkYXRlIGl0IGlzIGFjdHVhbGx5IENFTkMuCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSAmJiAhaW5pdERhdGEuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0
RGF0YSBidWZmZXIgYXMgV2ViTSBpbml0RGF0YS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAid2VibSIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlT3BlbkNETTo6c2FuaXRpemVSZXNwb25zZShjb25zdCBT
aGFyZWRCdWZmZXImIHJlc3BvbnNlKSBjb25zdAoreworICAgIHJldHVybiByZXNwb25zZS5jb3B5
KCk7Cit9CisKK09wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplU2Vz
c2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAoreworICAgIHJldHVybiBzZXNz
aW9uSWQ7Cit9CisKK0NETUluc3RhbmNlT3BlbkNETTo6Q0RNSW5zdGFuY2VPcGVuQ0RNKGNvbnN0
IFN0cmluZyYga2V5U3lzdGVtKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShrZXlTeXN0ZW0pCisg
ICAgLCBtX29wZW5DRE1TeXN0ZW0ob3BlbmNkbV9jcmVhdGVfc3lzdGVtKGtleVN5c3RlbS51dGY4
KCkuZGF0YSgpKSkKKyAgICAsIG1fa2V5U3lzdGVtKGtleVN5c3RlbSkKK3sKK30KKwordm9pZCBD
RE1JbnN0YW5jZU9wZW5DRE06OmluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1L
ZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxv
d1BlcnNpc3RlbnRTdGF0ZSwKKyAgICBTdWNjZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAg
ICBjYWxsYmFjayhTdWNjZWVkZWQpOworfQorCit2b2lkIENETUluc3RhbmNlT3BlbkNETTo6c2V0
U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBjZXJ0aWZpY2F0ZSwgIFN1Y2Nl
c3NDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIE9wZW5DRE1FcnJvciBlcnJvciA9IG9wZW5j
ZG1fc3lzdGVtX3NldF9zZXJ2ZXJfY2VydGlmaWNhdGUobV9vcGVuQ0RNU3lzdGVtLmdldCgpLCBj
b25zdF9jYXN0PHVpbnQ4X3QqPihjZXJ0aWZpY2F0ZS0+ZGF0YUFzVUludDhQdHIoKSksCisgICAg
ICAgIGNlcnRpZmljYXRlLT5zaXplKCkpOworICAgIGNhbGxiYWNrKCFlcnJvciA/IFN1Y2NlZWRl
ZCA6IEZhaWxlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VPcGVuQ0RNOjpzZXRTdG9yYWdlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ0RN
SW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETShDRE1JbnN0
YW5jZU9wZW5DRE0mIGluc3RhbmNlKQorICAgIDogQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoaW5z
dGFuY2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX29wZW5DRE1TZXNz
aW9uQ2FsbGJhY2tzLnByb2Nlc3NfY2hhbGxlbmdlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Np
b24qLCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhcltdLCBjb25zdCB1aW50OF90IGNoYWxsZW5n
ZVtdLAorICAgICAgICBjb25zdCB1aW50MTZfdCBjaGFsbGVuZ2VMZW5ndGgpIHsKKyAgICAgICAg
R1NUX0RFQlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBub3RpZmljYXRpb24iKTsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUlu
c3RhbmNlU2Vzc2lvbk9wZW5DRE0qPih1c2VyRGF0YSkpLCBidWZmZXIgPSBXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShjaGFsbGVuZ2UsCisgICAgICAgICAgICBjaGFsbGVuZ2VMZW5ndGgp
XSgpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNr
KFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV9vcGVuQ0RNU2Vz
c2lvbkNhbGxiYWNrcy5rZXlfdXBkYXRlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24qLCB2
b2lkKiB1c2VyRGF0YSwgY29uc3QgdWludDhfdCBrZXlJRERhdGFbXSwgY29uc3QgdWludDhfdCBr
ZXlJRExlbmd0aCkgeworICAgICAgICBHU1RfREVCVUcoIkdvdCAna2V5IHVwZGF0ZWQnIE9DRE0g
bm90aWZpY2F0aW9uIik7CisgICAgICAgIEtleUlEVHlwZSBrZXlJRDsKKyAgICAgICAga2V5SUQu
YXBwZW5kKGtleUlERGF0YSwga2V5SURMZW5ndGgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtzZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETSo+KHVzZXJEYXRhKSksIGtleUlEID0gV1RGTW92ZShrZXlJRCldKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2Vzc2lvbi0+a2V5VXBkYXRlZENhbGxiYWNrKFdURk1vdmUoa2V5SUQpKTsKKyAgICAg
ICAgfSk7CisgICAgfTsKKyAgICBtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLmtleXNfdXBkYXRl
ZF9jYWxsYmFjayA9IFtdKGNvbnN0IE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEpIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJHb3QgJ2FsbCBrZXlzIHVwZGF0ZWQnIE9DRE0gbm90aWZpY2F0
aW9uIik7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihz
dGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEpKV0oKSB7Cisg
ICAgICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2Vzc2lvbi0+a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAg
ICB9OworICAgIG1fb3BlbkNETVNlc3Npb25DYWxsYmFja3MuZXJyb3JfbWVzc2FnZV9jYWxsYmFj
ayA9IFtdKE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIgbWVzc2Fn
ZVtdKSB7CisgICAgICAgIEdTVF9FUlJPUigiR290ICdlcnJvcicgT0NETSBub3RpZmljYXRpb246
ICVzIiwgbWVzc2FnZSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtl
V2Vha1B0cihzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNKj4odXNlckRhdGEp
KSwgYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZSwKKyAgICAg
ICAgICAgIHN0cmxlbihtZXNzYWdlKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNl
c3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+ZXJy
b3JDYWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworfQorCitS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZU9wZW5DRE06OmNyZWF0ZVNlc3Np
b24oKQoreworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNPiBuZXdTZXNzaW9u
ID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0oKnRoaXMpKTsKKyAgICBB
U1NFUlQobmV3U2Vzc2lvbik7CisgICAgdHJhY2tTZXNzaW9uKCpuZXdTZXNzaW9uKTsKKyAgICBy
ZXR1cm4gbmV3U2Vzc2lvbjsKK30KKworY2xhc3MgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHsKKwor
cHVibGljOgorICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZShjb25zdCBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgU3RyaW5nVmlldyBwYXlsb2FkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgc2l6
ZV90IHR5cGVQb3NpdGlvbiA9IHBheWxvYWQuZmluZCgiOlR5cGU6Iik7CisgICAgICAgIFN0cmlu
Z1ZpZXcgcmVxdWVzdFR5cGUocGF5bG9hZC5jaGFyYWN0ZXJzOCgpLCB0eXBlUG9zaXRpb24gIT0g
bm90Rm91bmQgPyB0eXBlUG9zaXRpb24gOiAwKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
MHU7CisgICAgICAgIGlmICghcmVxdWVzdFR5cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxl
bmd0aCgpICE9IHBheWxvYWQubGVuZ3RoKCkpCisgICAgICAgICAgICBvZmZzZXQgPSB0eXBlUG9z
aXRpb24gKyA2OworCisgICAgICAgIGlmIChyZXF1ZXN0VHlwZS5sZW5ndGgoKSA9PSAxKQorICAg
ICAgICAgICAgbV90eXBlID0gbWFrZU9wdGlvbmFsKHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlh
S2V5TWVzc2FnZVR5cGU+KHJlcXVlc3RUeXBlLnRvSW50KCkpKTsKKworICAgICAgICBtX3BheWxv
YWQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwYXlsb2FkLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQs
IHBheWxvYWQubGVuZ3RoKCkgLSBvZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaGFzUGF5bG9h
ZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fcGF5bG9hZCk7IH0KKyAgICBj
b25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9hZCgpIGNvbnN0JiB7IEFTU0VSVChtX3BheWxv
YWQpOyByZXR1cm4gbV9wYXlsb2FkLnZhbHVlKCk7IH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiYg
cGF5bG9hZCgpICYgeyBBU1NFUlQobV9wYXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgp
OyB9CisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4o
bV90eXBlKTsgfQorICAgIFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZSgpIGNvbnN0
IHsgQVNTRVJUKG1fdHlwZSk7IHJldHVybiBtX3R5cGUudmFsdWUoKTsgfQorICAgIFdlYkNvcmU6
Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZU9yKFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUg
YWx0ZXJuYXRlKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPyBtX3R5cGUudmFsdWUoKSA6IGFsdGVy
bmF0ZTsgfQorCitwcml2YXRlOgorICAgIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiBtX3Bh
eWxvYWQ7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4gbV90eXBl
OworfTsKKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjaGFsbGVuZ2VHZW5lcmF0
ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBQYXJzZWRS
ZXNwb25zZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisKKyAgICBpZiAo
IW1fY2hhbGxlbmdlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lc3NhZ2UgPSBX
VEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICBtX25lZWRz
SW5kaXZpZHVhbGl6YXRpb24gPSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZSgpID09IENETUlu
c3RhbmNlU2Vzc2lvbjo6TWVzc2FnZVR5cGU6OkluZGl2aWR1YWxpemF0aW9uUmVxdWVzdDsKKwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFsbGVuZ2VD
YWxsYmFja3MpCisgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgICAgICBtX2No
YWxsZW5nZUNhbGxiYWNrcy5jbGVhcigpOworICAgIH0gZWxzZSBpZiAoIW1fc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgICAgICBzZXNz
aW9uQ2hhbmdlZENhbGxiYWNrKHRydWUsIHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCku
Y29weVJlZigpKTsKKyAgICAgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBwYXJzZWRSZXNwb25zZU1lc3Nh
Z2UuaGFzVHlwZSgpKSB7CisgICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2Uoc3RhdGlj
X2Nhc3Q8Q0RNTWVzc2FnZVR5cGU+KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS50eXBlKCkpLAorICAg
ICAgICAgICAgICAgIFdURk1vdmUocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSkpOwor
ICAgICAgICB9CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVH
KSB8fCAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmco
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3Rh
dHVzKSB7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOgor
ICAgICAgICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBpcmVkIjsKKyAgICBjYXNlIENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuICJS
ZWxlYXNlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0
UmVzdHJpY3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0cmljdGVkIjsKKyAgICBjYXNl
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOgorICAgICAg
ICByZXR1cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiAiU3RhdHVzUGVuZGlu
ZyI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJv
cjoKKyAgICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9
Cit9CisjZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgQ0RNSW5zdGFuY2VT
ZXNzaW9uT3BlbkNETTo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgT3BlbkNETUtleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlz
RW1wdHkoKSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNzaW9uLmdldCgpLCBrZXlJRC5k
YXRhKCksIGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOworCisgICAgc3dpdGNoIChzdGF0
dXMpIHsKKyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVkOgorICAgICAgICByZXR1cm4g
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7CisgICAgY2FzZSBSZWxlYXNl
ZDoKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNl
ZDsKKyAgICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsKKyAgICBjYXNlIE91dHB1dERv
d25zY2FsZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6
T3V0cHV0RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVy
biBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVzUGVuZGluZzsKKyAgICBjYXNl
IEludGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpJ
bnRlcm5hbEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RN
OjprZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQpCit7CisgICAgR1NUX01FTURV
TVAoInVwZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpOworCisgICAgYXV0
byBrZXlTdGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9ERUJVRygidXBkYXRlZCB3aXRo
IHdpdGgga2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1cykpOworICAgIG1fZG9lc0tl
eVN0b3JlTmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5SGFuZGxlOjpjcmVhdGUoa2V5
U3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgT3BlbkNETTo6Y3JlYXRlU2hhcmVkT3BlbkNETVNlc3Np
b24oKSkpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleXNVcGRhdGVE
b25lQ2FsbGJhY2soKQoreworICAgIEdTVF9ERUJVRygidXBkYXRlIGRvbmUiKTsKKyAgICBpZiAo
bV9kb2VzS2V5U3RvcmVOZWVkTWVyZ2luZykgeworICAgICAgICBtX2RvZXNLZXlTdG9yZU5lZWRN
ZXJnaW5nID0gZmFsc2U7CisgICAgICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZU9wZW5D
RE0oKTsKKyAgICAgICAgaWYgKGluc3RhbmNlKQorICAgICAgICAgICAgaW5zdGFuY2UtPm1lcmdl
S2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgfQorCisgICAgaWYgKG1fc2Vzc2lvbkNoYW5nZWRD
YWxsYmFja3MuaXNFbXB0eSgpICYmIG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT51cGRh
dGVLZXlTdGF0dXNlcyhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChhdXRvJiBzZXNzaW9uQ2hhbmdlZENh
bGxiYWNrIDogbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcykKKyAgICAgICAgc2Vzc2lvbkNoYW5n
ZWRDYWxsYmFjayh0cnVlLCBudWxscHRyKTsKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6ZXJyb3JDYWxs
YmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIG1lc3NhZ2UpCit7CisgICAgR1NUX0VSUk9SKCJD
RE0gZXJyb3IiKTsKKyAgICBHU1RfTUVNRFVNUCgiZXJyb3IgZHVtcCIsIG1lc3NhZ2UtPmRhdGFB
c1VJbnQ4UHRyKCksIG1lc3NhZ2UtPnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFs
bGVuZ2VDYWxsYmFjayA6IG1fY2hhbGxlbmdlQ2FsbGJhY2tzKQorICAgICAgICBjaGFsbGVuZ2VD
YWxsYmFjaygpOworICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CisKKyAgICBmb3Ig
KGF1dG8mIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tz
KQorICAgICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBtZXNzYWdlLmNvcHlSZWYo
KSk7CisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworfQorCit2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlIGxpY2Vu
c2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+
JiYgaW5pdERhdGFTaGFyZWRCdWZmZXIsCisgICAgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBVVUlEIG9y
IHN5c3RlbSBJRD8KKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VPcGVuQ0RNKCk7Cisg
ICAgQVNTRVJUKGluc3RhbmNlKTsKKyAgICBtX2luaXREYXRhID0gSW5pdERhdGEoaW5zdGFuY2Ut
PmtleVN5c3RlbSgpLCBXVEZNb3ZlKGluaXREYXRhU2hhcmVkQnVmZmVyKSk7CisKKyAgICBHU1Rf
VFJBQ0UoIkdvaW5nIHRvIHJlcXVlc3QgYSBuZXcgc2Vzc2lvbiBpZCwgaW5pdCBkYXRhIHNpemUg
JWx1IiwgbV9pbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CisgICAgR1NUX01FTURVTVAoImlu
aXQgZGF0YSIsIG1faW5pdERhdGEucGF5bG9hZCgpLT5kYXRhQXNVSW50OFB0cigpLCBtX2luaXRE
YXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKworICAgIE9wZW5DRE1TZXNzaW9uKiBzZXNzaW9uID0g
bnVsbHB0cjsKKyAgICBvcGVuY2RtX2NvbnN0cnVjdF9zZXNzaW9uKCZpbnN0YW5jZS0+b3BlbkNE
TVN5c3RlbSgpLCBvcGVuQ0RNTGljZW5zZVR5cGUobGljZW5zZVR5cGUpLCBpbml0RGF0YVR5cGUu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9pbml0RGF0YS5wYXlsb2FkKCktPmRh
dGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCksIG51bGxwdHIsIDAs
ICZtX29wZW5DRE1TZXNzaW9uQ2FsbGJhY2tzLCB0aGlzLCAmc2Vzc2lvbik7CisgICAgaWYgKCFz
ZXNzaW9uKSB7CisgICAgICAgIEdTVF9FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBzZXNzaW9uIik7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXls
b2FkKCk7CisgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwg
ZmFsc2UsIEZhaWxlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zZXNzaW9uLnJl
c2V0KHNlc3Npb24pOworICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpmcm9tVVRGOChvcGVuY2Rt
X3Nlc3Npb25faWQobV9zZXNzaW9uLmdldCgpKSk7CisKKyAgICBhdXRvIGdlbmVyYXRlQ2hhbGxl
bmdlID0gW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGluaXREYXRhID0gbV9pbml0RGF0YS5wYXlsb2FkKCk7CisgICAgICAgIGlmIChtX3Nlc3Np
b25JRC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigiY291bGQgbm90IGNyZWF0
ZSBzZXNzaW9uIGlkIik7CisgICAgICAgICAgICBjYWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9u
TnVsbCgpLCB7IH0sIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJjcmVhdGVkIGludmFsaWQgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lvbklELnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgY2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgbV9zZXNz
aW9uSUQsIGZhbHNlLCBGYWlsZWQpOworICAgICAgICAgICAgcmVtb3ZlRnJvbUluc3RhbmNlUHJv
eHkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9ERUJV
RygiY3JlYXRlZCB2YWxpZCBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGNhbGxiYWNrKG1fbWVzc2FnZS5jb3B5UmVmKCkucmVsZWFzZU5vbk51bGwoKSwg
bV9zZXNzaW9uSUQsIG1fbmVlZHNJbmRpdmlkdWFsaXphdGlvbiwgU3VjY2VlZGVkKTsKKyAgICB9
OworCisgICAgaWYgKG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBpc1ZhbGlkKCkpCisgICAgICAg
IGdlbmVyYXRlQ2hhbGxlbmdlKCk7CisgICAgZWxzZQorICAgICAgICBtX2NoYWxsZW5nZUNhbGxi
YWNrcy5hcHBlbmQoV1RGTW92ZShnZW5lcmF0ZUNoYWxsZW5nZSkpOworfQorCit2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbk9wZW5DRE06OnNlc3Npb25GYWlsdXJlKCkKK3sKKyAgICBmb3IgKGF1dG8m
IHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzKQorICAg
ICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKGZhbHNlLCBudWxscHRyKTsKKyAgICBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
T3BlbkNETTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGljZW5zZVR5
cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2UsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYm
IGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vzc2lvbklELCBzZXNzaW9uSUQgPT0g
bV9zZXNzaW9uSUQpOworCisgICAgR1NUX1RSQUNFKCJVcGRhdGluZyBzZXNzaW9uICVzIiwgc2Vz
c2lvbklELnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5h
cHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJvb2wgc3VjY2Vzcywg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiByZXNwb25zZU1lc3NhZ2UpIG11dGFibGUgeworICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAg
ICAgICAgaWYgKCFyZXNwb25zZU1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1f
a2V5U3RvcmUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgbV9r
ZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNpbmcgSlNPTiByZXBvbnNlIG1lc3NhZ2VzIGlz
IG11Y2ggY2xlYW5lciB0aGFuIHVzaW5nIHN0cmluZyBwcmVmaXhlcywgSSBiZWxpZXZlIHRoZXJl
CisgICAgICAgICAgICAgICAgLy8gd2lsbCBldmVuIGJlIG90aGVyIHBhcnRzIG9mIHRoZSBzcGVj
IHdoZXJlIG5vdCBoYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpbGwgYmUgYmFkLgorICAgICAgICAg
ICAgICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UocmVzcG9u
c2VNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2VNZXNzYWdlLmhh
c1BheWxvYWQoKSkgeworICAgICAgICAgICAgICAgICAgICBSZWY8U2hhcmVkQnVmZmVyPiBtZXNz
YWdlID0gV1RGTW92ZShwYXJzZWRSZXNwb25zZU1lc3NhZ2UucGF5bG9hZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHKCJnb3QgbWVzc2FnZSBvZiBzaXplICVsdSIsIG1lc3NhZ2Ut
PnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9NRU1EVU1QKCJtZXNzYWdlIiwgbWVz
c2FnZS0+ZGF0YUFzVUludDhQdHIoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnR5
cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV1RGTW92ZShtZXNzYWdlKSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBHU1RfRVJS
T1IoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIiwgcmVzcG9uc2VN
ZXNzYWdlID8gcmVzcG9uc2VNZXNzYWdlLT5zaXplKCkgOiAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1IoInVwZGF0ZSBsaWNl
bnNlIHJlcG9ydGVkIGVycm9yIHN0YXRlIik7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwgbV9zZXNz
aW9uSUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl91cGRhdGUobV9zZXNzaW9uLmdldCgp
LCByZXNwb25zZS0+ZGF0YUFzVUludDhQdHIoKSwgcmVzcG9uc2UtPnNpemUoKSkpCisgICAgICAg
IHNlc3Npb25GYWlsdXJlKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6
bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUX1VO
VVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7CisKKyAgICBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlTWVzc2Fn
ZSkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3BvbnNlTWVzc2FnZSkKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCks
IFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCwgU2Vz
c2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBVc2luZyBKU09OIHJlcG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBjbGVhbmVy
IHRoYW4gdXNpbmcgc3RyaW5nIHByZWZpeGVzLCBJIGJlbGlldmUgdGhlcmUKKyAgICAgICAgICAg
ICAgICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIgcGFydHMgb2YgdGhlIHNwZWMgd2hlcmUgbm90IGhh
dmluZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBiZSBiYWQuCisgICAgICAgICAgICAgICAgUGFyc2Vk
UmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFzUGF5bG9hZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2UgPSBXVEZNb3Zl
KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICAgICAgICAgICAgICBH
U1RfREVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlLT5kYXRhQXNV
SW50OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgc3RkOjptYWtlX3BhaXIocGFyc2VkUmVzcG9u
c2VNZXNzYWdlLnR5cGVPcihNZWRpYUtleU1lc3NhZ2VUeXBlOjpMaWNlbnNlUmVxdWVzdCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKG1lc3NhZ2UpKSwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJtZXNzYWdlIG9mIHNpemUgJWx1
IGluY29ycmVjdGx5IGZvcm1hdHRlZCIsIHJlc3BvbnNlTWVzc2FnZSA/IHJlc3BvbnNlTWVzc2Fn
ZS0+c2l6ZSgpIDogMCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkLCBTZXNz
aW9uTG9hZEZhaWx1cmU6Ok90aGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2FnZURhdGEg
PSByZXNwb25zZU1lc3NhZ2UgPyByZXNwb25zZU1lc3NhZ2UtPmRhdGEoKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICBhdXRvIHJlc3BvbnNlTWVzc2FnZVNpemUgPSByZXNwb25zZU1lc3NhZ2UgPyBy
ZXNwb25zZU1lc3NhZ2UtPnNpemUoKSA6IDA7CisgICAgICAgICAgICBTdHJpbmdWaWV3IHJlc3Bv
bnNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXNwb25zZU1lc3NhZ2VEYXRhKSwg
cmVzcG9uc2VNZXNzYWdlU2l6ZSk7CisgICAgICAgICAgICBHU1RfRVJST1IoInNlc3Npb24gJXMg
bm90IGxvYWRlZCwgcmVhc29uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwgcmVzcG9u
c2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCwgc2Vzc2lvbkxv
YWRGYWlsdXJlRnJvbU9wZW5DRE0ocmVzcG9uc2UpKTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IGlmICghbV9zZXNzaW9uIHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Np
b25fbG9hZChtX3Nlc3Npb24uZ2V0KCkpKQorICAgICAgICBzZXNzaW9uRmFpbHVyZSgpOworfQor
Cit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJp
bmcmIHNlc3Npb25JRCwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKKworICAg
IGlmIChtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1wdHkoKSkKKyAgICAgICAgb3BlbmNk
bV9zZXNzaW9uX2Nsb3NlKG1fc2Vzc2lvbi5nZXQoKSk7CisKKyAgICByZW1vdmVGcm9tSW5zdGFu
Y2VQcm94eSgpOworCisgICAgY2FsbGJhY2soKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25PcGVuQ0RNOjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JRCwgTGlj
ZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKHNlc3Npb25JRCwgbV9zZXNzaW9uSUQgPT0gc2Vzc2lvbklEKTsKKworICAg
IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShib29sIHN1Y2Nlc3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
KSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgICAgIGNh
bGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVzOjpSZWxlYXNlZCksIFdU
Rjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVz
c2FnZShidWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2Uu
aGFzUGF5bG9hZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1l
c3NhZ2UgPSBXVEZNb3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAg
ICAgICAgICAgICAgICBHU1RfREVCVUcoInNlc3Npb24gJXMgcmVtb3ZlZCwgbWVzc2FnZSBsZW5n
dGggJWx1IiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlT
dGF0dXM6OlJlbGVhc2VkKSwgV1RGTW92ZShtZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVk
ZWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJtZXNzYWdlIG9mIHNpemUgJWx1IGluY29ycmVjdGx5IGZvcm1hdHRlZCBhcyBzZXNz
aW9uICVzIHJlbW92YWwgYW5zd2VyIiwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKG1fa2V5U3RvcmUuYWxsS2V5c0FzKE1lZGlhS2V5U3RhdHVz
OjpJbnRlcm5hbEVycm9yKSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoImNvdWxkIG5vdCByZW1vdmUgc2Vzc2lvbiAlcyIsIG1fc2Vzc2lv
bklELnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9yZS5hbGxL
ZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJyb3IpLCBXVEY6Om51bGxvcHQsIFN1Y2Nl
c3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGlmICghbV9zZXNzaW9u
IHx8IG1fc2Vzc2lvbklELmlzRW1wdHkoKSB8fCBvcGVuY2RtX3Nlc3Npb25fcmVtb3ZlKG1fc2Vz
c2lvbi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWlsdXJlKCk7CisKKyAgICByZW1vdmVGcm9t
SW5zdGFuY2VQcm94eSgpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OnN0
b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK09wdGlvbmFsPENETUluc3RhbmNlT3BlbkNETSY+IENETUluc3RhbmNlU2Vzc2lv
bk9wZW5DRE06OmNkbUluc3RhbmNlT3BlbkNETSgpIGNvbnN0Cit7CisgICAgYXV0byBpbnN0YW5j
ZSA9IGNkbUluc3RhbmNlUHJveHkoKTsKKyAgICBpZiAoIWluc3RhbmNlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZU9wZW5D
RE0mPigqaW5zdGFuY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNT3BlbkNE
TS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1P
cGVuQ0RNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZWViNzU5
YWExNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETU9wZW5DRE0uaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RN
KQorCisjaW5jbHVkZSAiQ0RNRmFjdG9yeS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIkNETVByaXZhdGUuaCIKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPG9wZW5fY2RtLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgT3BlbkNETSB7CisKK3N0cnVjdCBPcGVuQ0RN
U3lzdGVtRGVsZXRlciB7CisgICAgT3BlbkNETUVycm9yIG9wZXJhdG9yKCkoT3BlbkNETVN5c3Rl
bSogcHRyKSBjb25zdCB7IHJldHVybiBvcGVuY2RtX2Rlc3RydWN0X3N5c3RlbShwdHIpOyB9Cit9
OwordXNpbmcgVW5pcXVlT3BlbkNETVN5c3RlbSA9IHN0ZDo6dW5pcXVlX3B0cjxPcGVuQ0RNU3lz
dGVtLCBPcGVuQ0RNU3lzdGVtRGVsZXRlcj47CisKK3ZvaWQgZGVzdHJ1Y3RPcGVuQ0RNU2Vzc2lv
bihPcGVuQ0RNU2Vzc2lvbiopOworc3RydWN0IE9wZW5DRE1TZXNzaW9uRGVsZXRlciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKE9wZW5DRE1TZXNzaW9uKiBwdHIpIGNvbnN0IHsgZGVzdHJ1Y3RPcGVu
Q0RNU2Vzc2lvbihwdHIpOyB9Cit9OwordXNpbmcgVW5pcXVlT3BlbkNETVNlc3Npb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8T3BlbkNETVNlc3Npb24sIE9wZW5DRE1TZXNzaW9uRGVsZXRlcj47Cit1c2lu
ZyBTaGFyZWRPcGVuQ0RNU2Vzc2lvbiA9IHN0ZDo6c2hhcmVkX3B0cjxPcGVuQ0RNU2Vzc2lvbj47
CitTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBjcmVhdGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbihPcGVuQ0RN
U2Vzc2lvbiogPSBudWxscHRyKTsKKworfSAvLyBuYW1lc3BhY2UgT3BlbkNETQorCitjbGFzcyBD
RE1GYWN0b3J5T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5LCBwdWJsaWMgQ0RNUHJv
eHlGYWN0b3J5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgQ0RNRmFjdG9yeU9wZW5DRE0mIHNpbmdsZXRvbigpOworCisgICAgdmlydHVhbCB+Q0RN
RmFjdG9yeU9wZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNUHJp
dmF0ZT4gY3JlYXRlQ0RNKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIFJlZlB0cjxDRE1Qcm94
eT4gY3JlYXRlQ0RNUHJveHkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0
c0tleVN5c3RlbShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3VwcG9ydGVkS2V5U3lzdGVtcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBOZXZlckRlc3Ryb3llZDxDRE1GYWN0b3J5T3BlbkNETT47CisgICAgQ0RNRmFjdG9yeU9w
ZW5DRE0oKSA9IGRlZmF1bHQ7Cit9OworCitjbGFzcyBDRE1Qcml2YXRlT3BlbkNETSBmaW5hbCA6
IHB1YmxpYyBDRE1Qcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBDRE1Qcml2YXRlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkgOiBtX2tl
eVN5c3RlbShrZXlTeXN0ZW0pIHsgfTsKKyAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlT3BlbkNETSgp
ID0gZGVmYXVsdDsKKworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBzdXBwb3J0ZWRJbml0RGF0YVR5
cGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRpb24oY29uc3Qg
Q0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc3VwcG9y
dHNDb25maWd1cmF0aW9uV2l0aFJlc3RyaWN0aW9ucyhjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiBjb25maWd1cmF0aW9uLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0
aW9uKTsKKyAgICB9CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25UeXBlV2l0aENvbmZpZ3VyYXRp
b24oY29uc3QgQ0RNU2Vzc2lvblR5cGUmLCBjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBv
cnRzQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgVmVjdG9yPEF0b21T
dHJpbmc+IHN1cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0IGZpbmFsOworICAgIENETVJlcXVp
cmVtZW50IGRpc3RpbmN0aXZlSWRlbnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0
ZW1Db25maWd1cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmluYWw7Cisg
ICAgQ0RNUmVxdWlyZW1lbnQgcGVyc2lzdGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5
U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgZGlzdGluY3RpdmVJZGVudGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENs
ZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgY29uc3QgZmluYWw7Cisg
ICAgUmVmUHRyPENETUluc3RhbmNlPiBjcmVhdGVJbnN0YW5jZSgpIGZpbmFsOworICAgIHZvaWQg
bG9hZEFuZEluaXRpYWxpemUoKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzU2VydmVyQ2VydGlm
aWNhdGVzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25zKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcmLCBjb25z
dCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBz
YW5pdGl6ZVJlc3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYpIGNvbnN0IGZpbmFsOworICAgIE9w
dGlvbmFsPFN0cmluZz4gc2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJikgY29uc3QgZmlu
YWw7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsKKworY2xhc3MgQ0RN
SW5zdGFuY2VPcGVuQ0RNIGZpbmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHkgeworcHVibGlj
OgorICAgIENETUluc3RhbmNlT3BlbkNETShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7CisgICAg
dmlydHVhbCB+Q0RNSW5zdGFuY2VPcGVuQ0RNKCkgPSBkZWZhdWx0OworCisgICAgLy8gQ0RNSW5z
dGFuY2UKKyAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpPcGVuQ0RNOyB9CisgICAgdm9pZCBp
bml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlv
biYsIEFsbG93RGlzdGluY3RpdmVJZGVudGlmaWVycywgQWxsb3dQZXJzaXN0ZW50U3RhdGUsIFN1
Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlcnZlckNlcnRpZmljYXRlKFJl
ZjxTaGFyZWRCdWZmZXI+JiYsIFN1Y2Nlc3NDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHNl
dFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgY29uc3QgU3RyaW5n
JiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2tleVN5c3RlbTsgfQorICAgIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKKworICAgIE9w
ZW5DRE1TeXN0ZW0mIG9wZW5DRE1TeXN0ZW0oKSBjb25zdCB7IHJldHVybiAqbV9vcGVuQ0RNU3lz
dGVtLmdldCgpOyB9OworCisgICAgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpIGZp
bmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBDRE1J
bnN0YW5jZVByb3h5OjpyZWxlYXNlRGVjcnlwdGlvblJlc291cmNlcygpOworICAgICAgICBtX29w
ZW5DRE1TeXN0ZW0ucmVzZXQobnVsbHB0cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE9wZW5D
RE06OlVuaXF1ZU9wZW5DRE1TeXN0ZW0gbV9vcGVuQ0RNU3lzdGVtOworICAgIFN0cmluZyBtX2tl
eVN5c3RlbTsKK307CisKK2NsYXNzIENETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0gZmluYWwgOiBw
dWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgeworcHVibGljOgorICAgIENETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE0oQ0RNSW5zdGFuY2VPcGVuQ0RNJik7CisKKyAgICB2b2lkIHJlcXVlc3RM
aWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2
b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxTaGFyZWRC
dWZmZXI+JiYsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRT
ZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vz
c2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmlu
ZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lv
bkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJh
Y2smJikgZmluYWw7CisgICAgdm9pZCBzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5n
JikgZmluYWw7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24g
JiYgbV9tZXNzYWdlICYmICFtX21lc3NhZ2UtPmlzRW1wdHkoKTsgfQorCisgICAgdm9pZCBzZXRD
bGllbnQoV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGllbnQ+JiYgY2xpZW50KSBmaW5hbCB7
IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBjbGVhckNsaWVudCgpIGZp
bmFsIHsgbV9jbGllbnQuY2xlYXIoKTsgfQorCisgICAgdm9pZCByZWxlYXNlRGVjcnlwdGlvblJl
c291cmNlcygpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKKyAgICAgICAgbV9zZXNzaW9uLnJl
c2V0KG51bGxwdHIpOworICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eTo6cmVsZWFzZURl
Y3J5cHRpb25SZXNvdXJjZXMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8Q0RN
SW5zdGFuY2VPcGVuQ0RNJj4gY2RtSW5zdGFuY2VPcGVuQ0RNKCkgY29uc3Q7CisKKyAgICB1c2lu
ZyBOb3RpZmljYXRpb24gPSB2b2lkIChDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjoqKShSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB1c2luZyBDaGFsbGVuZ2VHZW5lcmF0
ZWRDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoKT47CisgICAgdXNpbmcgU2Vzc2lvbkNoYW5nZWRD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoYm9vbCwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJik+Owor
CisgICAgdm9pZCBjaGFsbGVuZ2VHZW5lcmF0ZWRDYWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVy
PiYmKTsKKyAgICB2b2lkIGtleVVwZGF0ZWRDYWxsYmFjayhLZXlJRFR5cGUmJik7CisgICAgdm9p
ZCBrZXlzVXBkYXRlRG9uZUNhbGxiYWNrKCk7CisgICAgdm9pZCBlcnJvckNhbGxiYWNrKFJlZlB0
cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0
YXR1cyhjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIHNlc3Npb25GYWlsdXJlKCk7
CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgYWxsIG9yaWdpbmFsIHVzZXMgb2YgdGhlc2UgYXR0cmli
dXRlcy4KKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsK
KyAgICBib29sIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgeyBmYWxzZSB9OworICAgIEluaXRE
YXRhIG1faW5pdERhdGE7CisgICAgT3BlbkNETVNlc3Npb25DYWxsYmFja3MgbV9vcGVuQ0RNU2Vz
c2lvbkNhbGxiYWNrcyB7IH07CisgICAgT3BlbkNETTo6VW5pcXVlT3BlbkNETVNlc3Npb24gbV9z
ZXNzaW9uOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWVzc2FnZTsKKyAgICBib29sIG1f
bmVlZHNJbmRpdmlkdWFsaXphdGlvbiB7IGZhbHNlIH07CisgICAgVmVjdG9yPENoYWxsZW5nZUdl
bmVyYXRlZENhbGxiYWNrPiBtX2NoYWxsZW5nZUNhbGxiYWNrczsKKyAgICBWZWN0b3I8U2Vzc2lv
bkNoYW5nZWRDYWxsYmFjaz4gbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrczsKKyAgICBXZWFrUHRy
PENETUluc3RhbmNlU2Vzc2lvbkNsaWVudD4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0RNX0lOU1RBTkNFKFdlYkNvcmU6
OkNETUluc3RhbmNlT3BlbkNETSwgV2ViQ29yZTo6Q0RNSW5zdGFuY2U6OkltcGxlbWVudGF0aW9u
VHlwZTo6T3BlbkNETSk7CisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBF
TkFCTEUoT1BFTkNETSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCmluZGV4
IGU3NzMyYWI5NGU3YS4uY2ZlNGM3YWE1MTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5jcHAKQEAgLTEyMSwxMSArMTIxLDE0IEBAIGJvb2wgQ0RNUHJveHlDbGVhcktleTo6
Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKICAgICBW
ZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CiAgICAga2V5SURWZWMuYXBwZW5kKGluLmtleUlELCBp
bi5rZXlJRFNpemVJbkJ5dGVzKTsKIAotICAgIGF1dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZvcktl
eShrZXlJRFZlYyk7CisgICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5VmFsdWUoa2V5
SURWZWMpOwogICAgIGlmICgha2V5RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShnQ3J5cHRI
YW5kbGUoKSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHVpbnQ4X3Q+PihrZXlEYXRhLnZhbHVlKCkp
KTsKKyAgICBhdXRvJiBrZXlEYXRhVmFsdWUgPSBXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGtl
eURhdGEudmFsdWUoKSk7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2Ny
eV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRsZSgpLCBrZXlEYXRhVmFsdWUuZGF0YSgpLCBrZXlE
YXRhVmFsdWUuc2l6ZSgpKSkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRrZXkpOiAlcyIs
IGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJv
eHlPcGVuQ0RNLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBj
MTBhOWY1OGZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNwcApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eU9wZW5DRE0uaCIK
KworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKQorCisjaW5j
bHVkZSAiQ0RNT3BlbkNETS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxvcGVu
X2NkbV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCitHU1RfREVCVUdf
Q0FURUdPUllfRVhURVJOKHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0NhdGVnb3J5KTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhT3BlbkNETURlY3J5cHREZWJ1Z0Nh
dGVnb3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTk9URTogWW91VHViZSAyMDE5IEVN
RSBjb25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhpcyB0byBiZSA+PTVzLgorY29uc3QgV1RGOjpT
ZWNvbmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dCA9IFdURjo6U2Vjb25kcyg2KTsKKwor
T3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24gQ0RNUHJveHlPcGVuQ0RNOjpnZXREZWNyeXB0
aW9uU2Vzc2lvbihjb25zdCBEZWNyeXB0aW9uQ29udGV4dCYgaW4pIGNvbnN0Cit7CisgICAgYXV0
byBtYXBwZWRLZXlJRCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGluLmtleUlEQnVmZmVyLCBH
U1RfTUFQX1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5SUQpIHsKKyAgICAgICAgR1NUX0VSUk9S
KCJGYWlsZWQgdG8gbWFwIGtleSBJRCBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgYXV0byBrZXlJRCA9IG1hcHBlZEtleUlELT5jcmVhdGVWZWN0b3IoKTsK
KworICAgIGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGtleUlEKTsKKyAg
ICBpZiAoIWtleUhhbmRsZS5oYXNWYWx1ZSgpIHx8ICFrZXlIYW5kbGUudmFsdWUoKS0+aXNTdGF0
dXNDdXJyZW50bHlWYWxpZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEtleUhh
bmRsZVZhbHVlVmFyaWFudCYga2V5RGF0YSA9IGtleUhhbmRsZS52YWx1ZSgpLT52YWx1ZSgpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE9wZW5DRE06OlNoYXJlZE9wZW5DRE1T
ZXNzaW9uPihrZXlEYXRhKSk7CisKKyAgICBhdXRvJiBrZXlWYWx1ZSA9IFdURjo6Z2V0PE9wZW5D
RE06OlNoYXJlZE9wZW5DRE1TZXNzaW9uPihrZXlEYXRhKTsKKworICAgIGlmICgha2V5VmFsdWUp
IHsKKyAgICAgICAgYXV0byBuZXdLZXlWYWx1ZSA9IE9wZW5DRE06OmNyZWF0ZVNoYXJlZE9wZW5D
RE1TZXNzaW9uKG9wZW5jZG1fZ2V0X3N5c3RlbV9zZXNzaW9uKCZzdGF0aWNfY2FzdDxjb25zdCBD
RE1JbnN0YW5jZU9wZW5DRE0qPihpbnN0YW5jZSgpKS0+b3BlbkNETVN5c3RlbSgpLAorICAgICAg
ICAgICAga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCksIHNfbGljZW5zZUtleVJlc3BvbnNlVGlt
ZW91dC5taWxsaXNlY29uZHNBczx1aW50MzJfdD4oKSkpOworICAgICAgICBBU1NFUlQobmV3S2V5
VmFsdWUpOworICAgICAgICBrZXlIYW5kbGUudmFsdWUoKS0+dGFrZVZhbHVlSWZEaWZmZXJlbnQo
V1RGTW92ZShuZXdLZXlWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZTsKK30K
KworYm9vbCBDRE1Qcm94eU9wZW5DRE06OmRlY3J5cHQoQ0RNUHJveHlPcGVuQ0RNOjpEZWNyeXB0
aW9uQ29udGV4dCYgaW5wdXQpCit7CisgICAgT3BlbkNETTo6U2hhcmVkT3BlbkNETVNlc3Npb24g
c2Vzc2lvbiA9IGdldERlY3J5cHRpb25TZXNzaW9uKGlucHV0KTsKKyAgICBpZiAoIXNlc3Npb24p
IHsKKyAgICAgICAgR1NUX0VSUk9SKCJ0aGVyZSBpcyBubyB2YWxpZCBzZXNzaW9uIHRvIGRlY3J5
cHQgZm9yIHRoZSBwcm92aWRlZCBrZXkgSUQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEdTVF9UUkFDRSgiZGVjcnlwdGluZyIpOworICAgIC8vIERlY3J5cHQgY2lwaGVy
LgorICAgIE9wZW5DRE1FcnJvciBlcnJvckNvZGUgPSBvcGVuY2RtX2dzdHJlYW1lcl9zZXNzaW9u
X2RlY3J5cHQoc2Vzc2lvbi5nZXQoKSwgaW5wdXQuZGF0YUJ1ZmZlciwgaW5wdXQuc3Vic2FtcGxl
c0J1ZmZlciwgaW5wdXQubnVtU3Vic2FtcGxlcywKKyAgICAgICAgaW5wdXQuaXZCdWZmZXIsIGlu
cHV0LmtleUlEQnVmZmVyLCAwKTsKKyAgICBpZiAoZXJyb3JDb2RlKSB7CisgICAgICAgIEdTVF9F
UlJPUigiZGVjcnlwdGlvbiBmYWlsZWQsIGVycm9yIGNvZGUgJVgiLCBlcnJvckNvZGUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYm
IEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yYmZiMDhiZGRlOGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5T3BlbkNETS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAg
ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoT1BFTkNETSkKKworI2luY2x1ZGUg
IkNETUluc3RhbmNlU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkNETU9wZW5DRE0uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBzaG91bGQg
dXNlIHRvIG1ha2UgdXNlIG9mIGEgcGxhdGZvcm0gQ0RNIG1vZHVsZS4KK2NsYXNzIENETVByb3h5
T3BlbkNETSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENE
TVByb3h5T3BlbkNETSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKK3B1
YmxpYzoKKyAgICBDRE1Qcm94eU9wZW5DRE0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCisgICAg
ICAgIDogbV9rZXlTeXN0ZW0oa2V5U3lzdGVtKSB7IH0KKyAgICB2aXJ0dWFsIH5DRE1Qcm94eU9w
ZW5DRE0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdHJ1Y3QgRGVjcnlwdGlvbkNvbnRleHQgeworICAg
ICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyOworICAgICAgICBHc3RCdWZmZXIqIGl2QnVmZmVy
OworICAgICAgICBHc3RCdWZmZXIqIGRhdGFCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciogc3Vi
c2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisgICAgfTsKKwor
ICAgIGJvb2wgZGVjcnlwdChEZWNyeXB0aW9uQ29udGV4dCYpOworICAgIGNvbnN0IFN0cmluZyYg
a2V5U3lzdGVtKCkgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KKworcHJpdmF0ZToKKyAgICBPcGVu
Q0RNOjpTaGFyZWRPcGVuQ0RNU2Vzc2lvbiBnZXREZWNyeXB0aW9uU2Vzc2lvbihjb25zdCBEZWNy
eXB0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIFN0cmluZyBtX2tleVN5c3RlbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEp
ICYmIEVOQUJMRShPUEVOQ0RNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0
aWVzLmgKaW5kZXggOGE5MmNhM2IxZWE4Li4yMWUyZDU1ZWRmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9V
VElMSVRJRVNfQ0xFQVJLRVlfVVVJRCAiMTA3N2VmZWMtYzBiMi00ZDAyLWFjZTMtM2MxZTUyZTJm
YjRiIgorI2lmIEVOQUJMRShPUEVOQ0RNKQorI2RlZmluZSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVf
VVRJTElUSUVTX1dJREVWSU5FX1VVSUQgImVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFk
MjFlZCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbml0RGF0YSB7CkBA
IC00OCw2ICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGF5bG9hZCA9IG1hcHBlZEluaXRE
YXRhLT5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKICAgICB9CiAKKyAgICBJbml0RGF0YShjb25zdCBT
dHJpbmcmIHN5c3RlbUlkLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHBheWxvYWQpCisgICAgICAg
IDogbV9zeXN0ZW1JZChzeXN0ZW1JZCkKKyAgICAgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXls
b2FkKSkKKyAgICB7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEmJiBpbml0RGF0
YSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBzb21lIGNvbmZ1c2lvbiBoZXJl
IGFib3V0IGhvdyB0byBkZXRlY3QgdGhlCkBAIC02NCw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9wYXlsb2FkLT5hcHBlbmQoKmluaXREYXRhLnBheWxvYWQoKSk7CiAgICAgfQogCi0gICAg
Y29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5
bG9hZDsgfQorICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBwYXlsb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXlsb2FkOyB9CiAgICAgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3lzdGVtSWQ7IH0KICAgICBTdHJpbmcgcGF5bG9hZENvbnRhaW5lclR5cGUo
KSBjb25zdAogICAgIHsKQEAgLTExNSwxNyArMTI0LDMzIEBAIGNsYXNzIEdTdHJlYW1lckVNRVV0
aWxpdGllcyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX0Ns
ZWFyS2V5VVVJRCA9IFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJ
RDsKICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlLZXlTeXN0ZW0g
PSAib3JnLnczLmNsZWFya2V5IjsKKyNpZiBFTkFCTEUoT1BFTkNETSkKKyAgICBzdGF0aWMgY29u
c3RleHByIGNoYXIgY29uc3QqIHNfV2lkZXZpbmVVVUlEID0gV0VCQ09SRV9HU1RSRUFNRVJfRU1F
X1VUSUxJVElFU19XSURFVklORV9VVUlEOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBjb25z
dCogc19XaWRldmluZUtleVN5c3RlbSA9ICJjb20ud2lkZXZpbmUuYWxwaGEiOworI2VuZGlmCiAK
ICAgICBzdGF0aWMgYm9vbCBpc0NsZWFyS2V5S2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lz
dGVtLCBzX0NsZWFyS2V5S2V5U3lzdGVtKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoT1BFTkNETSkK
KyAgICBzdGF0aWMgYm9vbCBpc1dpZGV2aW5lS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lz
dGVtLCBzX1dpZGV2aW5lS2V5U3lzdGVtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBrZXlTeXN0ZW1Ub1V1aWQoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAg
ewogICAgICAgICBpZiAoaXNDbGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pKQogICAgICAgICAg
ICAgcmV0dXJuIHNfQ2xlYXJLZXlVVUlEOwogCisjaWYgRU5BQkxFKE9QRU5DRE0pCisgICAgICAg
IGlmIChpc1dpZGV2aW5lS2V5U3lzdGVtKGtleVN5c3RlbSkpCisgICAgICAgICAgICByZXR1cm4g
c19XaWRldmluZVVVSUQ7CisjZW5kaWYKKwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDg2YjdjNjZmYWQ0
Zi4uNTEwM2Q0Y2I5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3Qg
X1dlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7CiB9OwogCiBzdGF0aWMgdm9pZCBm
aW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyBib29sIGNkbVBy
b3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29u
c3QgUmVmUHRyPENETVByb3h5PiYpOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwg
R3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzKTsKIApAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAog
ICAgICAgICAid2Via2l0Y2xlYXJrZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CiAKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwotICAgIGNlbmNDbGFzcy0+cHJv
dGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
KyAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRSKHBy
b3RlY3Rpb25TeXN0ZW1JZCk7CiAgICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NU
X0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2VuY0NsYXNzLT5kZWNyeXB0
ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKQEAgLTEwNiw2ICsxMDcsMTEgQEAgc3Rh
dGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIEdTVF9DQUxMX1BBUkVOVChH
X09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNo
YXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KikKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
K30KKwogc3RhdGljIGJvb2wgY2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmLCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKIHsK
ICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCA0N2I1NjBmNzM5MjAuLjE1ZTEzYWJm
YmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0xMzQsMTQgKzEzNCwxNCBA
QCBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBH
c3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAogICAgICAgICAgICAgLy8gY2FuIGNhdXNlIGNhcHMg
bmVnb3RpYXRpb24gZmFpbHVyZXMgd2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVhbXMuCiAgICAg
ICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0
KCksICJiYXNlLXByb2ZpbGUiLCAiY29kZWNfZGF0YSIsICJoZWlnaHQiLCAiZnJhbWVyYXRlIiwg
ImxldmVsIiwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICJwcm9maWxlIiwgInJhdGUiLCAid2lkdGgi
LCBudWxscHRyKTsKIAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29pbmdTdHJ1
Y3R1cmUuZ2V0KCksICJwcm90ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNzLT5w
cm90ZWN0aW9uU3lzdGVtSWQsCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXRnb2lu
Z1N0cnVjdHVyZS5nZXQoKSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklORywga2xh
c3MtPnByb3RlY3Rpb25TeXN0ZW1JZChzZWxmKSwKICAgICAgICAgICAgICAgICAib3JpZ2luYWwt
bWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoaW5jb21p
bmdTdHJ1Y3R1cmUpLCBudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gR1NUX1BST1RFQ1RJT05f
VU5TUEVDSUZJRURfU1lTVEVNX0lEIHdhcyBhZGRlZCBpbiB0aGUgR1N0cmVhbWVyCiAgICAgICAg
ICAgICAvLyBkZXZlbG9wZW1lbnQgZ2l0IG1hc3RlciB3aGljaCB3aWxsIHNoaXAgYXMgdmVyc2lv
biAxLjE2LjAuCiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dGdvaW5nU3Ry
dWN0dXJlLmdldCgpLAogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQotICAgICAgICAg
ICAgICAgICFnX3N0cmNtcDAoa2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwgR1NUX1BST1RFQ1RJ
T05fVU5TUEVDSUZJRURfU1lTVEVNX0lEKSA/ICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIiA6Cisg
ICAgICAgICAgICAgICAgIWdfc3RyY21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKHNlbGYp
LCBHU1RfUFJPVEVDVElPTl9VTlNQRUNJRklFRF9TWVNURU1fSUQpID8gImFwcGxpY2F0aW9uL3gt
d2VibS1lbmMiIDoKICNlbmRpZgogICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LWNlbmMi
KTsKICAgICAgICAgfQpAQCAtMTc3LDYgKzE3NywxMiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0
cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVy
KQogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShzZWxmKTsKIAorICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0
aW9uX21ldGEoYnVmZmVyKSk7CisgICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJCdWZmZXIgJXAgZG9lcyBub3QgY29udGFpbiBwcm90ZWN0
aW9uIG1ldGEsIG5vdCBkZWNyeXB0aW5nIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOworICAgIH0KKwogICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1l
bnRNdXRleCk7CiAKICAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0
ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgpAQCAtMTkxLDEyICsxOTcsNiBAQCBz
dGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJh
c2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB9CiAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVBy
b3h5LmdldCgpKTsKICAgICB9Ci0KLSAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1l
dGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRf
cHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwotICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKLSAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9u
IG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgfQogICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFP
blJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKICAgICAg
ICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0
YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmlu
ZGV4IGJiMTE2NmQzODAzMy4uYTA0NjVmZjUzZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aApAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQgewogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mg
ewogICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAotICAgIGNvbnN0IGNo
YXIqIHByb3RlY3Rpb25TeXN0ZW1JZDsKKyAgICBjb25zdCBjaGFyKiAoKnByb3RlY3Rpb25TeXN0
ZW1JZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogICAgIGJvb2wgKCpj
ZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgY29u
c3QgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5PiYpOwogICAgIGJvb2wgKCpkZWNyeXB0KShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0
QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBs
ZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5D
RE1EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAwY2Q3YzEyNmI3ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxNzIgQEAK
Ky8qIEdTdHJlYW1lciBPcGVuQ0RNIGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIp
CisKKyNpbmNsdWRlICJDRE1PcGVuQ0RNLmgiCisjaW5jbHVkZSAiQ0RNUHJveHlPcGVuQ0RNLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0
ZXJlYWRlci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFQsIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKSkK
K3N0cnVjdCBfV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdFByaXZhdGUgeworICAgIFJlZlB0cjxD
RE1Qcm94eU9wZW5DRE0+IGNkbVByb3h5OworfTsKKworc3RhdGljIHZvaWQgZmluYWxpemUoR09i
amVjdCopOworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1JZChXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBjb25zdCBSZWZQdHI8Q0RNUHJv
eHk+Jik7CitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBs
ZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LAorICAgIEdzdEJ1ZmZlciogc3ViU2FtcGxlcyk7
CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRl
Z29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0
RGVidWdDYXRlZ29yeQorCitzdGF0aWMgY29uc3QgY2hhciogY2VuY0VuY3J5cHRpb25NZWRpYVR5
cGVzW10gPSB7ICJ2aWRlby9tcDQiLCAiYXVkaW8vbXA0IiwgInZpZGVvL3gtaDI2NCIsICJhdWRp
by9tcGVnIiwgbnVsbHB0ciB9Oworc3RhdGljIGNvbnN0IGNoYXIqIHdlYm1FbmNyeXB0aW9uTWVk
aWFUeXBlc1tdID0geyAidmlkZW8vd2VibSIsICJhdWRpby93ZWJtIiwgInZpZGVvL3gtdnA5Iiwg
bnVsbHB0ciB9OworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBH
U1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1Rf
UEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMoCisgICAgICAgICJ2aWRlby93ZWJtOyAi
CisgICAgICAgICJhdWRpby93ZWJtOyAiCisgICAgICAgICJ2aWRlby9tcDQ7ICIKKyAgICAgICAg
ImF1ZGlvL21wNDsgIgorICAgICAgICAiYXVkaW8vbXBlZzsgIgorICAgICAgICAidmlkZW8veC1o
MjY0OyAiCisgICAgICAgICJ2aWRlby94LXZwOTsgIikpOworCisjZGVmaW5lIHdlYmtpdF9tZWRp
YV9vcGVuY2RtX2RlY3J5cHRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQ
RShXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0LCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0
LCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQpOworCitzdGF0aWMgR1JlZlB0cjxHc3RD
YXBzPiBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCkKK3sKKyAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworCisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXlTeXN0ZW0gOiBDRE1GYWN0b3J5T3BlbkNETTo6c2luZ2xldG9uKCkuc3VwcG9y
dGVkS2V5U3lzdGVtcygpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBjZW5jRW5jcnlwdGlv
bk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVj
dHVyZShjYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1jZW5jIiwg
Im9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgIGNl
bmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgInByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NU
UklORywgR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQoa2V5U3lzdGVtKSwg
bnVsbHB0cikpOworICAgICAgICB9CisgICAgICAgIGlmIChHU3RyZWFtZXJFTUVVdGlsaXRpZXM6
OmlzV2lkZXZpbmVLZXlTeXN0ZW0oa2V5U3lzdGVtKSkgeworICAgICAgICAgICAgLy8gTm8ga2V5
IHN5c3RlbSBVVUlEIGZvciB3ZWJtLiBJdCdzIG5vdCBzZXQgaW4gY2FwcyBmb3IgaXQgYW5kIGl0
J3MganVzdCBXaWRldmluZS4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyB3ZWJtRW5jcnlw
dGlvbk1lZGlhVHlwZXNbaV07ICsraSkgeworICAgICAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVu
ZF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gt
d2VibS1lbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsCisgICAgICAg
ICAgICAgICAgICAgIHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXSwgbnVsbHB0cikpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJzaW5rIHBhZCB0
ZW1wbGF0ZSBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKworICAgIHJldHVy
biBjYXBzOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdENsYXNzKiBrbGFzcykKK3sKKyAgICBH
U1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRNZWRpYU9wZW5DRE1EZWNyeXB0RGVidWdDYXRl
Z29yeSwgIndlYmtpdG9wZW5jZG0iLCAwLCAiT3BlbkNETSBkZWNyeXB0Iik7CisKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gZmluYWxpemU7CisKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVs
ZW1lbnRDbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBHUmVmUHRyPEdzdENh
cHM+IGdzdFNpbmtQYWRUZW1wbGF0ZUNhcHMgPSBjcmVhdGVTaW5rUGFkVGVtcGxhdGVDYXBzKCk7
CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdz
dF9wYWRfdGVtcGxhdGVfbmV3KCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywg
Z3N0U2lua1BhZFRlbXBsYXRlQ2Fwcy5nZXQoKSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2Fk
ZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQo
JnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFk
YXRhKGVsZW1lbnRDbGFzcywgIkRlY3J5cHQgZW5jcnlwdGVkIGNvbnRlbnQgdXNpbmcgT3BlbkNE
TSIsIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SLAorICAgICAgICAiRGVjcnlw
dHMgZW5jcnlwdGVkIG1lZGlhIHVzaW5nIE9wZW5DRE0uIiwgIlhhYmllciBSb2Ryw61ndWV6IENh
bHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4iKTsKKworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRDbGFzcyogY29tbW9uQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0NMQVNTKGtsYXNzKTsKKyAgICBjb21tb25DbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0g
R1NUX0RFQlVHX0ZVTkNQVFIocHJvdGVjdGlvblN5c3RlbUlkKTsKKyAgICBjb21tb25DbGFzcy0+
Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwor
ICAgIGNvbW1vbkNsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfb3Bl
bmNkbV9kZWNyeXB0X2luaXQoV2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCogc2VsZikKK3sKKyAg
ICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9P
UEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgc2VsZi0+cHJpdiA9IHByaXY7
CisgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSgpOworfQor
CitzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0TWVk
aWFPcGVuQ0RNRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2Jq
ZWN0KTsKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYt
PnByaXY7CisgICAgcHJpdi0+fldlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKCk7CisK
KyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BS
SVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisgICAgQVNTRVJUKHBy
aXYtPmNkbVByb3h5KTsKKyAgICByZXR1cm4gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0
ZW1Ub1V1aWQocHJpdi0+Y2RtUHJveHktPmtleVN5c3RlbSgpKTsKK30KKworc3RhdGljIGJvb2wg
Y2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
LCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKK3sKKyAgICBXZWJLaXRNZWRpYU9w
ZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVDUllQVChzZWxmKSk7CisgICAgcHJp
di0+Y2RtUHJveHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5T3BlbkNETSo+KGNkbVByb3h5
LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CisKK3N0YXRpYyBib29sIGRl
Y3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YnNhbXBsZUNvdW50LAorICAgIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikK
K3sKKyAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9N
RURJQV9PUEVOQ0RNX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX09QRU5DRE1fREVD
UllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVm
ZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgp
IHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzdWJzYW1wbGVDb3VudCAmJiAhc3Vic2FtcGxl
c0J1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlkIGRlY3J5
cHQoKSBzdWJzYW1wbGVzIHBhcmFtZXRlciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIENETVByb3h5T3BlbkNETTo6
RGVjcnlwdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEQnVmZmVyID0ga2V5
SURCdWZmZXI7CisgICAgY29udGV4dC5pdkJ1ZmZlciA9IGl2QnVmZmVyOworICAgIGNvbnRleHQu
ZGF0YUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBjb250ZXh0Lm51bVN1YnNhbXBsZXMgPSBzdWJzYW1w
bGVDb3VudDsKKyAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBzdWJzYW1wbGVDb3VudCA/
IHN1YnNhbXBsZXNCdWZmZXIgOiBudWxscHRyOworCisgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5
LT5kZWNyeXB0KGNvbnRleHQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgRU5BQkxFKE9QRU5DRE0pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1E
ZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5cHRvckdTdHJlYW1lci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTgzMGE3MTdjZTBhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRPcGVuQ0RNRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyogR1N0cmVh
bWVyIE9wZW5DRE0gY29tbW9uIGVuY3J5cHRpb24gZGVjcnlwdG9yCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbAorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpICYmIEVOQUJMRShPUEVOQ0RNKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5j
bHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBUICAg
ICAgICAgICh3ZWJraXRfbWVkaWFfb3BlbmNkbV9kZWNyeXB0X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9NRURJQV9PUEVOQ0RNX0RFQ1JZUFQob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX09QRU5DRE1fREVDUllQVCwg
V2ViS2l0TWVkaWFPcGVuQ0RNRGVjcnlwdCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9PUEVOQ0RN
X0RFQ1JZUFRfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfTUVESUFfT1BFTkNETV9ERUNSWVBULCBXZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNETV9ERUNSWVBUKG9iaikg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJ
QV9PUEVOQ0RNX0RFQ1JZUFQpKQorI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfT1BFTkNETV9ERUNS
WVBUX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9U
WVBFX01FRElBX09QRU5DRE1fREVDUllQVCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRp
YU9wZW5DRE1EZWNyeXB0ICAgICAgICBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdE1lZGlhT3BlbkNETURlY3J5cHRDbGFzcyAgIFdlYktpdE1lZGlhT3Bl
bkNETURlY3J5cHRDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNy
eXB0UHJpdmF0ZSBXZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0UHJpdmF0ZTsKKworR1R5cGUgd2Vi
a2l0X21lZGlhX29wZW5jZG1fZGVjcnlwdF9nZXRfdHlwZSh2b2lkKTsKKworc3RydWN0IF9XZWJL
aXRNZWRpYU9wZW5DRE1EZWNyeXB0IHsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0IHBhcmVudDsKKworICAgIFdlYktpdE1lZGlhT3BlbkNETURlY3J5cHRQcml2YXRlKiBw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYU9wZW5DRE1EZWNyeXB0Q2xhc3MgeworICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyBwYXJlbnRDbGFzczsKK307
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBF
TkFCTEUoT1BFTkNETSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9GaW5kT3BlbkNETS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZWQzODNjYzk5ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZQpAQCAtMCwwICsxLDY5
IEBACisjLnJzdAorIyBGaW5kT3BlbkNETQorIyAtLS0tLS0tLS0tLS0tCisjCisjIEZpbmRzIHRo
ZSBPcGVuQ0RNIGxpYnJhcnkuCisjCisjIFRoaXMgd2lsbCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2
YXJpYWJsZXM6CisjCisjIGBgT1BFTkNETV9GT1VORGBgCisjICAgICBUcnVlIGlmIHRoZSByZXF1
ZXN0ZWQgdmVyc2lvbiBvZiBnY3J5cHQgd2FzIGZvdW5kCisjIGBgT1BFTkNETV9WRVJTSU9OYGAK
KyMgICAgIFRoZSB2ZXJzaW9uIG9mIGdjcnlwdCB0aGF0IHdhcyBmb3VuZAorIyBgYE9QRU5DRE1f
SU5DTFVERV9ESVJTYGAKKyMgICAgIFRoZSBnY3J5cHQgaW5jbHVkZSBkaXJlY3RvcmllcworIyBg
YE9QRU5DRE1fTElCUkFSSUVTYGAKKyMgICAgIFRoZSBsaW5rZXIgbGlicmFyaWVzIG5lZWRlZCB0
byB1c2UgdGhlIGdjcnlwdCBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xv
Z2ljYWwKKyMgQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhv
ciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisjICAgIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisjIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisjIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwKKyMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ZpbmRfbGlicmFyeShPUEVOQ0RNX0xJQlJBUlkKKyAgTkFNRVMgbGlib2NkbS5z
bworKQorZmluZF9wYXRoKE9QRU5DRE1fSU5DTFVERV9ESVIKKyAgTkFNRVMgb3Blbl9jZG0uaAor
ICBQQVRIX1NVRkZJWEVTICJXUEVGcmFtZXdvcmsvb2NkbS8iCispCisKK2luY2x1ZGUoRmluZFBh
Y2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisKK2ZpbmRfcGFja2FnZV9oYW5kbGVfc3RhbmRhcmRf
YXJncyhPcGVuY2RtCisgICAgRk9VTkRfVkFSIE9QRU5DRE1fRk9VTkQKKyAgICBSRVFVSVJFRF9W
QVJTIE9QRU5DRE1fTElCUkFSWSBPUEVOQ0RNX0lOQ0xVREVfRElSCispCitpZiAoT1BFTkNETV9G
T1VORCkKKyAgICBzZXQoT1BFTkNETV9MSUJSQVJJRVMgJHtPUEVOQ0RNX0xJQlJBUll9KQorICAg
IHNldChPUEVOQ0RNX0lOQ0xVREVfRElSUyAke09QRU5DRE1fSU5DTFVERV9ESVJ9KQorZW5kaWYg
KCkKKworbWFya19hc19hZHZhbmNlZChPUEVOQ0RNX0xJQlJBUlkgT1BFTkNETV9JTkNMVURFX0RJ
UikKKworaW5jbHVkZShGZWF0dXJlU3VtbWFyeSkKK3NldF9wYWNrYWdlX3Byb3BlcnRpZXMoT3Bl
bmNkbSBQUk9QRVJUSUVTCisgICAgREVTQ1JJUFRJT04gIk9wZW5DRE0gRFJNIGZyYW1ld29yayIK
KyAgICBVUkwgImh0dHBzOi8vZ2l0aHViLmNvbS9yZGtjZW50cmFsL1RodW5kZXIiCispCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlCmluZGV4IGNkODkzNGIyMDAzZS4uY2E5YjBjNzYyMjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZQpAQCAtMTg3LDYgKzE4Nyw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JF
VkFMSURBVElPTiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSBQUklWQVRFIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMg
UFJJVkFURSAke0VOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVN9KQorV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX09QRU5DRE0gUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUEVSSU9ESUNfTUVNT1JZX01PTklUT1IgUFJJ
VkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QT0lOVEVS
X0xPQ0sgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTQyOCw2ICs0MjksMTAg
QEAgaWYgKFVTRV9TWVNURU1EKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCitpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSBBTkQgRU5BQkxFX09QRU5DRE0pCisgIGZpbmRfcGFja2FnZShPcGVu
Q0RNIFJFUVVJUkVEKQorZW5kaWYgKCkKKwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyMjQ3CiBpZiAoRU5BQkxFRF9DT01QSUxFUl9TQU5JVElaRVJTKQogICAg
IHNldChFTkFCTEVfSU5UUk9TUEVDVElPTiBPRkYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGI4
YWRiODc0NTRjOC4uNzRjZjg3ZGYzYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9u
c1dQRS5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQpAQCAtNDUsNiAr
NDUsNyBAQCBpbmNsdWRlKEdTdHJlYW1lckRlZmluaXRpb25zKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBQVUJMSUMgT0ZGKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJVFkgUFVC
TElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSBQVUJMSUMgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTfSkKK1dFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9PUEVOQ0RNIFBSSVZBVEUgT0ZGKQogV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1dFQkRSSVZFUiBQVUJMSUMgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfV0VCX0NSWVBUTyBQVUJM
SUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfWFNMVCBQVUJM
SUMgT04pCkBAIC0xOTgsNiArMTk5LDEwIEBAIGlmIChVU0VfU1lTVEVNRCkKICAgICBlbmRpZiAo
KQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJMRV9PUEVO
Q0RNKQorICBmaW5kX3BhY2thZ2UoT3BlbkNETSBSRVFVSVJFRCkKK2VuZGlmICgpCisKIGFkZF9k
ZWZpbml0aW9ucygtREJVSUxESU5HX1dQRV9fPTEpCiBhZGRfZGVmaW5pdGlvbnMoLURHRVRURVhU
X1BBQ0tBR0U9IldQRSIpCiBhZGRfZGVmaW5pdGlvbnMoLURKU0NfR0xJQl9BUElfRU5BQkxFRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCA1M2VhYTc2YWE2MjYuLjRiNmI0NTgyNWU1
YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMTgzLDYgKzE4Myw3IEBAIG1hY3Jv
KFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX05F
VFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSAiVG9vZ2xlIG5ldHdvcmsgY2FjaGUg
c3RhbGUtd2hpbGUtcmV2YWxpZGF0ZSBjYWNoaW5nIHN0cmF0ZWd5IiBQUklWQVRFIE9GRikKICAg
ICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfTk9USUZJQ0FUSU9OUyAiVG9nZ2xlIE5vdGlm
aWNhdGlvbnMgc3VwcG9ydCIgUFJJVkFURSBPTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShF
TkFCTEVfT0ZGU0NSRUVOX0NBTlZBUyAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiBQ
UklWQVRFIE9GRikKKyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfT1BFTkNETSAiVG9n
Z2xlIEVNRSBWMyBPcGVuQ0RNIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMgIlRvZ2dsZSBPcmllbnRhdGlvbiBF
dmVudHMgc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5B
QkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCAiVG9nZ2xlIGFjY2VsZXJhdGVkIHNjcm9sbGlu
ZyBzdXBwb3J0IiBQUklWQVRFIE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVf
UEFZTUVOVF9SRVFVRVNUICJUb2dnbGUgUGF5bWVudCBSZXF1ZXN0IHN1cHBvcnQiIFBSSVZBVEUg
T0ZGKQpAQCAtMjU1LDYgKzI1Niw3IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAg
V0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCBFTkFCTEVf
VklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NPVVJDRSBFTkFC
TEVfVklERU8pCiAgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX01FRElBX1NUUkVBTSBF
TkFCTEVfVklERU8pCisgICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX09QRU5DRE0gRU5B
QkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVklE
RU9fUFJFU0VOVEFUSU9OX01PREUgRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJT05fREVQ
RU5EKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiBFTkFCTEVfVklERU8pCiAg
ICAgV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1RPVUNIX1NMSURFUiBFTkFCTEVfVE9VQ0hf
RVZFTlRTKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDI2NjI0NDVjYTlmYS4uZTU0MGNiNGRhNTJkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjAtMDctMDMgIFhh
YmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1N0cmVhbWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQg
dG8gYnVpbGQgT3BlbkNETSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhlcmUgaXMgYW4KKyAgICAg
ICAgb3B0IGluIGVudiB2YXIgdG8gZ2V0IEpIQnVpbGQgYnVpbGRpbmcgVGh1bmRlciBpdHMgV2lk
ZXZpbmUKKyAgICAgICAgZGVwZW5kZW5jaWVzLiBXZSBhbHNvIGluY2x1ZGUgYSBjb3VwbGUgb2Yg
R1N0cmVhbWVyIHBhdGNoZXMgbmVlZGVkCisgICAgICAgIHRvIGdldCBrZXkgSURzIGluIHRoZSBk
ZWNyeXB0b3JzLgorCisgICAgICAgIFdpZGV2aW5lIGlzIG9idmlvdXNseSBwcm9wcmlldGFyeSBh
bmQgYXMgeW91IG5lZWQgdG8gYmUgbGljZW5zZWQKKyAgICAgICAgdG8gYWNjZXNzIGl0LCB5b3Ug
bmVlZCBjcmVkZW50aWFscyB0byBidWlsZCBpdC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbToKKyAgICAgICAgKiBnc3RyZWFtZXIvamhidWlsZC5tb2R1bGVz
OgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWJhZC0wMDA2LW1zc2Rl
bXV4LXBhcnNlLXByb3RlY3Rpb24tZGF0YS5wYXRjaDogQWRkZWQuCisgICAgICAgICogZ3N0cmVh
bWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRl
bXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaDogQWRkZWQuCisgICAgICAgICogZ3Rr
L2luc3RhbGwtZGVwZW5kZW5jaWVzOgorICAgICAgICAqIGpoYnVpbGQvamhidWlsZHJjX2NvbW1v
bi5weToKKyAgICAgICAgKGluaXQpOgorICAgICAgICAqIHdwZS9pbnN0YWxsLWRlcGVuZGVuY2ll
czoKKwogMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgU3BsaXQgY29sb3IgY29udmVyc2lvbiBmdW5jdGlvbnMgb3V0IG9mIENvbG9yVXRpbGl0aWVz
LmgvY3BwIGludG8gdGhlaXIgb3duIGZpbGUuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KaW5kZXggNDA0N2JmYmQ0YWVlLi5kNGVkYjhkMTNjN2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTEzNSw2ICsxMzUsNyBAQCBteSAoCiAgICAg
JG5ldHdvcmtDYWNoZVN0YWxlV2hpbGVSZXZhbGlkYXRlU3VwcG9ydCwKICAgICAkbm90aWZpY2F0
aW9uc1N1cHBvcnQsCiAgICAgJG9mZnNjcmVlbkNhbnZhc1N1cHBvcnQsCisgICAgJG9wZW5DRE1T
dXBwb3J0LAogICAgICRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQsCiAgICAgJG92ZXJmbG93U2Ny
b2xsaW5nVG91Y2hTdXBwb3J0LAogICAgICRwYXltZW50UmVxdWVzdFN1cHBvcnQsCkBAIC00NDgs
NiArNDQ5LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJvZmZzY3JlZW4t
Y2FudmFzIiwgZGVzYyA9PiAiVG9nZ2xlIE9mZnNjcmVlbkNhbnZhcyBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMiLCB2YWx1ZSA9PiBcJG9mZnNjcmVl
bkNhbnZhc1N1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJvcGVuY2RtIiwgZGVzYyA9PiAi
VG9nZ2xlIE9wZW5DRE0gc3VwcG9ydCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUEVOQ0RN
IiwgdmFsdWUgPT4gXCRvcGVuQ0RNU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gIm9yaWVu
dGF0aW9uLWV2ZW50cyIsIGRlc2MgPT4gIlRvZ2dsZSBPcmllbnRhdGlvbiBFdmVudHMgc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9
PiBcJG9yaWVudGF0aW9uRXZlbnRzU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9nc3Ry
ZWFtZXIvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcwpp
bmRleCA5NTZmMTI2ZDViNzUuLjBjMWE4OTRiNWM4MiAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVh
bWVyL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVz
CkBAIC0xMSw2ICsxMSwxMiBAQAogICAgICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQi
Lz4KICAgICAgIDxkZXAgcGFja2FnZT0iZ3N0LWxpYmF2Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9
ImdzdHJlYW1lci12YWFwaSIvPgorICAgICAgPGlmIGNvbmRpdGlvbi1zZXQ9Ik9wZW5DRE0iPgor
ICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXIiLz4KKyAgICAgICAgPGRlcCBwYWNrYWdlPSJ3
aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItY2RtaS13aWRldmluZSIv
PgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgICA8
L2lmPgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L21ldGFtb2R1bGU+CiAKQEAgLTE5LDYgKzI1
LDggQEAKICAgICAgIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8i
Lz4KICAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0iZ2l0aHViLXRhcmJhbGwiCiAg
ICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9Imdp
dCIgbmFtZT0iZ2l0aHViLXNzaCIKKyAgICAgIGhyZWY9ImdpdEBnaXRodWIuY29tOiIvPgogICA8
cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5hbWU9ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20iCiAg
ICAgICBocmVmPSJodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vd2VibS8iLz4KICAg
PHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBuYW1lPSJhb21lZGlhLmdvb2dsZXNvdXJjZS5jb20iCkBA
IC03OSw2ICs4Nyw3IEBACiAKICAgICA8YnJhbmNoIGhhc2g9InNoYTI1Njo0MGJiM2JhZmRhMjVj
MGI3MzljOGZjMzZlNDgzODBmY2NmNjFjNGQzZjgzNzQ3ZTk3YWMzZjliMDE3MWIxMzE5IiBtb2R1
bGU9ImdzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0ke3ZlcnNpb259LnRhci54eiIg
cmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9Imdv
b2QtMDAwMS1xdGRlbXV4LVNwZWNpZnktUkVESVJFQ1QtaW5mb3JtYXRpb24taW4tZXJyb3ItbWVz
c2FnLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCB1cHN0cmVhbSwgc2hvdWxkIGJlIHNo
aXBwZWQgaW4gMS4xNi4zIC0tPgorICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWdvb2Qt
MDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQu
cGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC05Miw2
ICsxMDEsNyBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2
OmYxY2I3YWEyMzg5NTY5YTUzNDM2NjFhYWU0NzNmMGE5NDBhOTBiODcyMDAxODI0YmM0N2ZhODA3
MmEwNDFlNzQiIG1vZHVsZT0iZ3N0LXBsdWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke3ZlcnNp
b259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBh
dGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJhZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEtV0FSTklORy13
aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNoIiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCwgZGlzY3Vz
c2luZyBiYWNrcG9ydGluZyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVy
L2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9yZXF1ZXN0cy8zODYtLT4KKyAgICAgIDxwYXRjaCBmaWxl
PSJnc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0
Y2giIHN0cmlwPSIxIiAvPgogICAgIDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC0xMjUsNCAr
MTM1LDg5IEBACiAgICAgICAgICAgIGNoZWNrb3V0ZGlyPSJsaWJ2YS0ke3ZlcnNpb259IiByZXBv
PSJnaXRodWItdGFyYmFsbCIvPgogICA8L21lc29uPgogCisgIDxjbWFrZSBpZD0idGh1bmRlciIK
KyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtRFBPUlQ9
ODA4MQorICAgICAgICAgICAgICAgICAgICAtREJJTkRJTkc9MC4wLjAuMCAtRElETEVfVElNRT0x
ODAKKyAgICAgICAgICAgICAgICAgICAgLURQRVJTSVNURU5UX1BBVEg9L3RtcC90aHVuZGVyL3Bl
cnNpc3RlbnQKKyAgICAgICAgICAgICAgICAgICAgLURWT0xBVElMRV9QQVRIPS90bXAvdGh1bmRl
ci92b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAtRERBVEFfUEFUSD0ke3ByZWZpeH0vc2hh
cmUvV1BFRnJhbWV3b3JrCisgICAgICAgICAgICAgICAgICAgIC1EU1lTVEVNX1BBVEg9JHtwcmVm
aXh9L2xpYi93cGVmcmFtZXdvcmsvcGx1Z2lucworICAgICAgICAgICAgICAgICAgICAtRFBST1hZ
U1RVQl9QQVRIPSR7cHJlZml4fS9saWIvd3BlZnJhbWV3b3JrL3Byb3h5c3R1YnMKKyAgICAgICAg
ICAgICAgICAgICAgLURPT01BREpVU1Q9IC1EQlVJTERfVFlQRT1SZWxlYXNlU3ltYm9scworICAg
ICAgICAgICAgICAgICAgICAtREJMVUVUT09USF9TVVBQT1JUPU9GRiAtRFZJUlRVQUxJTlBVVD1P
RkYKKyAgICAgICAgICAgICAgICAgICAgLURDT01QT1NJVE9SQ0xJRU5UPU9GRiAtRENPTVBPU0lU
T1JDTElFTlQ9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQlJPQURDQVNUPU9GRiAtRENETUk9
T04gLURDRE1JX0JDTV9ORVhVU19TVlA9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQ0RNSV9B
REFQVEVSX0lNUExFTUVOVEFUSU9OPWdzdHJlYW1lcgorICAgICAgICAgICAgICAgICAgICAtREdT
VFJFQU1FUkNMSUVOVD1PRkYgLURQUk9WSVNJT05QUk9YWT1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURTRUNVUklUWUFHRU5UPU9GRiAtRENPTVBPU0lUT1JTRVJWRVJQTFVHSU49T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX1dFQktJVEJST1dTRVI9T0ZGIC1EUExVR0lOX1dFQlNF
UlZFUj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRVNQSUFMPU9GRiAtRE5FVFdP
UktDT05UUk9MPU9GRiI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIgbW9kdWxl
PSJyZGtjZW50cmFsL1RodW5kZXIvdGFyYmFsbC8ke3ZlcnNpb259IiB2ZXJzaW9uPSI2YWRlZWUw
MDZmZWNkZDFiMmJjNDliZDM2MGQ0OWZjNTcxOGRlYjYxIiBjaGVja291dGRpcj0idGh1bmRlciIv
PgorICA8L2NtYWtlPgorCisgIDxhdXRvdG9vbHMgaWQ9IndpZGV2aW5lIiBzdXBwb3J0cy1ub24t
c3JjZGlyLWJ1aWxkcz0ibm8iCisgICAgICAgICAgICAgYXV0b2dlbi1zaD0iYnVpbGQucHkiIGF1
dG9nZW5hcmdzPSJ4ODYtNjQgLXIgLURPRU1DUllQVE9fS0VZQk9YX1BBVEhfUFJFRklYPSR7cHJl
Zml4fSIKKyAgICAgICAgICAgICBtYWtlYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIgorICAg
ICAgICAgICAgIG1ha2VpbnN0YWxsYXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIC1mIE1ha2Vm
aWxlLmluc3RhbGwiID4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0
aHVuZGVyIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWIt
c3NoIiBtb2R1bGU9Ik1ldHJvbG9naWNhbC93aWRldmluZS5naXQiIGNoZWNrb3V0ZGlyPSJ3aWRl
dmluZSIgdGFnPSIyNjRjMTM3NTAxYjI4OWUzNTZiMTFkYWNjMzI5YjA1NjM2ZWE5Mzk2Ii8+Cisg
IDwvYXV0b3Rvb2xzPgorCisgIDxjbWFrZSBpZD0idGh1bmRlci1jZG1pLXdpZGV2aW5lIiBjbWFr
ZWFyZ3M9Ii1EQ01BS0VfQlVJTERfVFlQRT1SZWxXaXRoRGViSW5mbyI+CisgICAgPGJyYW5jaCBy
ZXBvPSJnaXRodWItdGFyYmFsbCIKKyAgICAgICAgICAgIG1vZHVsZT0iV2ViUGxhdGZvcm1Gb3JF
bWJlZGRlZC9PQ0RNLVdpZGV2aW5lL3RhcmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAgICAgICAgIHZl
cnNpb249IjlkYzM5NjRiMDMzOWFiYjcwZDY2ZTRmOTMxNjMyMzI0YTA3NWQ2ZDQiIGNoZWNrb3V0
ZGlyPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAg
PGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+
CisgICAgPC9kZXBlbmRlbmNpZXM+CisgIDwvY21ha2U+CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVy
LW5hbm9zZXJ2aWNlcyIKKyAgICAgICAgIGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2
ZXJzaW9ufSAtREJVSUxEX1RZUEU9UmVsZWFzZVN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAg
LURQTFVHSU5fQ09CQUxUPU9GRiAtRFBMVUdJTl9DT01NQU5ERVI9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX0RFVklDRUlORk89T0ZGIC1EUExVR0lOX0RJU1BMQVlJTkZPPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ERVZJQ0VJREVOVElGSUNBVElPTj1PRkYKKyAg
ICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRFNSRVNPTFVUSU9OPU9GRiAtRFBMVUdJTl9ESENQ
U0VSVkVSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9ESUFMU0VSVkVSPU9GRiAt
RFBMVUdJTl9ESUNUSU9OQVJZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9JT0NP
Tk5FQ1RPUj1PRkYgLURQTFVHSU5fRUdMVEVTVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fRlJPTlRQQU5FTD1PRkYgLURQTFVHSU5fTE9DQVRJT05TWU5DPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRFBMVUdJTl9NT05JVE9SPU9GRiAtRFBMVUdJTl9ORVRXT1JLQ09OVFJPTD1P
RkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUk9T04KKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQVVUT1NUQVJUPXRydWUKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fT1BFTkNETUlfT09QPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fT1BFTkNETUlfV0lERVZJTkU9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5f
T1BFTkNETUlfQ0xFQVJLRVk9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5D
RE1JX1BMQVlSRUFEWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlf
TkFHUkE9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX05DQVM9T0ZG
IC1EUExVR0lOX0JMVUVUT09USD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQkxV
RVRPT1RIUkVNT1RFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUkVN
T1RFQ09OVFJPTD1PRkYgLURQTFVHSU5fU05BUFNIT1Q9T0ZGCisgICAgICAgICAgICAgICAgICAg
IC1EUExVR0lOX1NZU1RFTUNPTU1BTkRTPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9GSUxFVFJBTlNGRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RFU1RDT05U
Uk9MTEVSPU9GRiAtRFBMVUdJTl9KU09OUlBDPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9URVNUVVRJTElUWT1PRkYgLURQTFVHSU5fVElNRVNZTkM9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX1RSQUNFQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQ
TFVHSU5fVk9MVU1FQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VC
S0lUQlJPV1NFUj1PRkYgLURQTFVHSU5fUlRTUENMSUVOVD1PRkYKKyAgICAgICAgICAgICAgICAg
ICAgLURQTFVHSU5fV0VCUEE9T0ZGIC1EUExVR0lOX1dFQlBST1hZPU9GRgorICAgICAgICAgICAg
ICAgICAgICAtRFBMVUdJTl9XRUJTRVJWRVI9T0ZGIC1EUExVR0lOX1dFQlNIRUxMPU9GRgorICAg
ICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XSUZJQ09OVFJPTD1PRkYgLURQTFVHSU5fUEFDS0FH
RVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1BMQVlFUklORk89T0ZGIC1EUExV
R0lOX1BPV0VSPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9QUk9DRVNTTU9OSVRP
Uj1PRkYgLURQTFVHSU5fU1RSRUFNRVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X1NQQVJLPU9GRiAtRFBMQVRGT1JNX0xJTlVYPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExV
R0lOX01FU1NFTkdFUj1PRkYgLURQTFVHSU5fU0VDVVJJVFlBR0VOVD1PRkYKKyAgICAgICAgICAg
ICAgICAgICAgLURQTFVHSU5fUlBDTElOSz1PRkYgLURQTFVHSU5fQ09NUE9TSVRPUj1PRkYiPgor
ICAgIDxicmFuY2ggcmVwbz0iZ2l0aHViLXRhcmJhbGwiCisgICAgICAgICAgICBtb2R1bGU9InJk
a2NlbnRyYWwvVGh1bmRlck5hbm9TZXJ2aWNlcy90YXJiYWxsLyR7dmVyc2lvbn0iCisgICAgICAg
ICAgICB2ZXJzaW9uPSJkZTlmM2Q0MGQ4NDA4ZWU4MTFjNDhmNDg2YzliMTRmNzUyYzk3MzQ1Igor
ICAgICAgICAgICAgY2hlY2tvdXRkaXI9InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgPGRl
cGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0idGh1bmRlciIvPgorICAgICAgPGRlcCBw
YWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lkZXZpbmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAg
PC9jbWFrZT4KKwogPC9tb2R1bGVzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0
Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEu
cGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3Nk
ZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44Zjk5NDZmMGU5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9n
c3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90
ZWN0aW9uLWRhdGEucGF0Y2gKQEAgLTAsMCArMSwyNDcgQEAKK0Zyb20gMDA1MmYzZDgzMTVlOGNl
ZmIwNGE2MmE2NGNhYzE3Y2JmYmM2YjhiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206
IENoYXJsaWUgVHVybmVyIDxjaHR1cm5lQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjUgTWF5IDIw
MTggMDk6NDM6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gUGFyc2UgcGxheXJlYWR5IHBheWxv
YWQuCisKK0xvb2sgYXQgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBkYXRhIHBheWxvYWQgdG8gZXh0
cmFjdCBkZWZhdWx0IGtleSBpZHMKK2ZvciBkZWNyeXB0aW5nIHNhbXBsZXMuIFRoZSBmb3JtYXQg
b2YgdGhpcyBwYXlsb2FkIHNlZW1zIHRvIGJlCitwcm9wcmlldGFyeS4KKworU2lnbmVkLW9mZi1i
eTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CistLS0KKyBl
eHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMgICAgfCAgMTQgKystCisgZXh0L3Ntb290
aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVzdC5jIHwgMTM4ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKworIGV4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaCB8ICAgMSArCisgMyBm
aWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0t
Z2l0IGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVh
bWluZy9nc3Rtc3NkZW11eC5jCitpbmRleCBiY2VhOGNhLi40ZmE5NWI5IDEwMDY0NAorLS0tIGEv
ZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCisrKysgYi9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc2RlbXV4LmMKK0BAIC00OTUsNyArNDk1LDE5IEBAIGdzdF9tc3NfZGVtdXhfc2V0
dXBfc3RyZWFtcyAoR3N0QWRhcHRpdmVEZW11eCAqIGRlbXV4KQorICAgICAgICAgICBnc3RfZXZl
bnRfbmV3X3Byb3RlY3Rpb24gKHByb3RlY3Rpb25fc3lzdGVtX2lkLCBwcm90ZWN0aW9uX2J1ZmZl
ciwKKyAgICAgICAgICAgInNtb290aC1zdHJlYW1pbmciKTsKKyAKKy0gICAgICBHU1RfTE9HX09C
SkVDVCAoc3RyZWFtLCAiUXVldWVpbmcgUHJvdGVjdGlvbiBldmVudCBvbiBzb3VyY2UgcGFkIik7
CisrICAgICAgR3N0QnVmZmVyICprZXlfaWQgPSBnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQg
KG1zc2RlbXV4LT5tYW5pZmVzdCk7CisrICAgICAgaWYgKCFnc3RfYnVmZmVyX2dldF9zaXplIChr
ZXlfaWQpKSB7CisrICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAg
ICAgICAicHJvdGVjdGVkIG1hbmlmZXN0LCBidXQgbm8ga2V5IGlkcyBhdmFpbGFibGUiKTsKKysg
ICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAg
ICAgICAiQWRkaW5nIGtleSBpZCB0byB0aGUgcHJvdGVjdGlvbiBldmVudCBvZiBzaXplICVsdSIs
CisrICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoa2V5X2lkKSk7CisrICAgICAgICBH
c3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2
ZW50KTsKKysgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBH
U1RfVFlQRV9CVUZGRVIsIGtleV9pZCwgTlVMTCk7CisrICAgICAgfQorKworKyAgICAgIEdTVF9M
T0dfT0JKRUNUIChzdHJlYW0sICJRdWV1aW5nIFByb3RlY3Rpb24gZXZlbnQgb24gc291cmNlIHBh
ZCIpOworICAgICAgIGdzdF9hZGFwdGl2ZV9kZW11eF9zdHJlYW1fcXVldWVfZXZlbnQgKChHc3RB
ZGFwdGl2ZURlbXV4U3RyZWFtICopIHN0cmVhbSwKKyAgICAgICAgICAgZXZlbnQpOworICAgICAg
IGdzdF9idWZmZXJfdW5yZWYgKHByb3RlY3Rpb25fYnVmZmVyKTsKK2RpZmYgLS1naXQgYS9leHQv
c21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dz
dG1zc21hbmlmZXN0LmMKK2luZGV4IGM4NTVjYjMuLmRmMzEzMzAgMTAwNjQ0CistLS0gYS9leHQv
c21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1p
bmcvZ3N0bXNzbWFuaWZlc3QuYworQEAgLTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSA8Y3R5cGUu
aD4KKyAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5o
PgorKyNpbmNsdWRlIDxsaWJ4bWwveHBhdGguaD4KKysjaW5jbHVkZSA8bGlieG1sL3hwYXRoSW50
ZXJuYWxzLmg+CisgCisgLyogZm9yIHBhcnNpbmcgaDI2NCBjb2RlYyBkYXRhICovCisgI2luY2x1
ZGUgPGdzdC9jb2RlY3BhcnNlcnMvZ3N0aDI2NHBhcnNlci5oPgorQEAgLTEwOSw2ICsxMTEsMTAg
QEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVzdAorICAgR1N0cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1f
aWQ7CisgICBnY2hhciAqcHJvdGVjdGlvbl9kYXRhOworIAorKyAgLy8gRklYTUU6IFRoZXJlIGNh
biBiZSBtdWx0aXBsZSBrZXkgaWRzIHByZXNlbnQgaW4gcHJvdGVjdGVkIG1hbmlmZXN0cy4KKysg
IGdjaGFyICprZXlfaWQ7CisrICBnc2l6ZSBrZXlfaWRfbGVuOworKworICAgR1NMaXN0ICpzdHJl
YW1zOworIH07CisgCitAQCAtMzAwLDYgKzMwNiwxMjIgQEAgX2dzdF9tc3Nfc3RyZWFtX2luaXQg
KEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwKKyAgIGdz
dF9tc3NfZnJhZ21lbnRfcGFyc2VyX2luaXQgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7Cisg
fQorIAorK3N0YXRpYyB2b2lkCisrX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorK3sKKysgIGd1Y2hhciAqZGVjb2RlZF9wcm90ZWN0aW9u
X2RhdGEgPSBOVUxMOworKyAgZ3NpemUgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuID0gMDsK
KysgIHhtbENoYXIgKnByb3RlY3Rpb25fZGF0YV90ZXh0ID0gTlVMTDsKKysgIGludCBwcm90ZWN0
aW9uX2RhdGFfdGV4dF9sZW4gPSAwOworKyAgeG1sRG9jUHRyIHByb3RlY3Rpb25fZGF0YV94bWwg
PSBOVUxMOworKyAgLy8gTm90ZSwgdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGZyZWUnZCwgZnJlZWlu
ZyB0aGUgZG9jIHB0ciB3aWxsIGZyZWUgdGhpcy4KKysgIHhtbE5vZGUgKnByb3RlY3Rpb25fZGF0
YV9yb290X2VsZW1lbnQgPSBOVUxMOworKyAgY29uc3QgeG1sQ2hhciAqcHJvdGVjdGlvbl9kYXRh
X25hbWVzcGFjZSA9IE5VTEw7CisrICB4bWxYUGF0aENvbnRleHRQdHIgeHBhdGhfY3R4ID0gTlVM
TDsKKysgIHhtbFhQYXRoT2JqZWN0UHRyIHhwYXRoX29iaiA9IE5VTEw7CisrICB4bWxOb2RlU2V0
UHRyIGtleV9pZF9ub2RlID0gTlVMTDsKKysgIGdzaXplIHByb3RlY3Rpb25fZGF0YV94bWxfbGVu
ID0gMDsKKysgIGd1Y2hhciAqc3RhcnRfdGFnID0gTlVMTDsKKysKKysgIGRlY29kZWRfcHJvdGVj
dGlvbl9kYXRhID0KKysgICAgICBnX2Jhc2U2NF9kZWNvZGUgKG1hbmlmZXN0LT5wcm90ZWN0aW9u
X2RhdGEsICZkZWNvZGVkX3Byb3RlY3Rpb25fZGF0YV9sZW4pOworKworKyAgc3RhcnRfdGFnID0g
ZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGE7CisrCisrICAvLyBUaGUgcHJvdGVjdGlvbiBkYXRhIHN0
YXJ0cyB3aXRoIGEgMTAtYnl0ZSBQbGF5UmVhZHkgdmVyc2lvbgorKyAgLy8gaGVhZGVyIHRoYXQg
bmVlZHMgdG8gYmUgc2tpcHBlZCBvdmVyIHRvIGF2b2lkIFhNTCBwYXJzaW5nCisrICAvLyBlcnJv
cnMuCisrICB3aGlsZSAoc3RhcnRfdGFnICYmICpzdGFydF90YWcgIT0gJzwnKQorKyAgICBzdGFy
dF90YWcrKzsKKysKKysgIGlmICghc3RhcnRfdGFnKSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxl
ZCB0byBmaW5kIGEgc3RhcnQgdGFnIGluIHByb3RlY3Rpb24gZGF0YSBwYXlsb2FkIik7CisrICAg
IGdvdG8gYmVhY2g7CisrICB9CisrCisrICBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiA9CisrICAg
ICAgZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuIC0gKHN0YXJ0X3RhZyAtIGRlY29kZWRfcHJv
dGVjdGlvbl9kYXRhKTsKKysgIHByb3RlY3Rpb25fZGF0YV94bWwgPQorKyAgICAgIHhtbFJlYWRN
ZW1vcnkgKChjb25zdCBnY2hhciAqKSBzdGFydF90YWcsIHByb3RlY3Rpb25fZGF0YV94bWxfbGVu
LAorKyAgICAgICJwcm90ZWN0aW9uX2RhdGEiLCAidXRmLTE2IiwgMCk7CisrCisrICBpZiAoIXBy
b3RlY3Rpb25fZGF0YV94bWwpIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHBhcnNlIHBy
b3RlY3Rpb24gZGF0YSBYTUwiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGlmIChn
c3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxUKSA+PSBHU1Rf
TEVWRUxfTUVNRFVNUCkgeworKyAgICB4bWxEb2NEdW1wTWVtb3J5RW5jIChwcm90ZWN0aW9uX2Rh
dGFfeG1sLCAmcHJvdGVjdGlvbl9kYXRhX3RleHQsCisrICAgICAgICAmcHJvdGVjdGlvbl9kYXRh
X3RleHRfbGVuLCAidXRmOCIpOworKyAgICBHU1RfTUVNRFVNUCAoInByb3RlY3Rpb24gZGF0YSBY
TUwiLCBwcm90ZWN0aW9uX2RhdGFfdGV4dCwKKysgICAgICAgIHByb3RlY3Rpb25fZGF0YV90ZXh0
X2xlbik7CisrICAgIHhtbEZyZWUgKHByb3RlY3Rpb25fZGF0YV90ZXh0KTsKKysgIH0KKysKKysg
IHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudCAocHJv
dGVjdGlvbl9kYXRhX3htbCk7CisrICBpZiAocHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+
dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RFIHx8CisrICAgICAgeG1sU3RyY21wIChwcm90ZWN0aW9u
X2RhdGFfcm9vdF9lbGVtZW50LT5uYW1lLAorKyAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqKSAi
V1JNSEVBREVSIikgfHwgIXByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zKSB7CisrICAg
IEdTVF9FUlJPUiAoImludmFsaWQgcHJvdGVjdGlvbiBkYXRhIFhNTCIpOworKyAgICBnb3RvIGJl
YWNoOworKyAgfQorKworKyAgeHBhdGhfY3R4ID0geG1sWFBhdGhOZXdDb250ZXh0IChwcm90ZWN0
aW9uX2RhdGFfeG1sKTsKKysgIGlmICgheHBhdGhfY3R4KSB7CisrICAgIEdTVF9FUlJPUiAoImZh
aWxlZCB0byBjcmVhdGUgeHBhdGggY29udGV4dCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQor
KworKyAgcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IHByb3RlY3Rpb25fZGF0YV9yb290X2Vs
ZW1lbnQtPm5zLT5ocmVmOworKyAgaWYgKHhtbFhQYXRoUmVnaXN0ZXJOcyAoeHBhdGhfY3R4LCAo
Y29uc3QgeG1sQ2hhciAqKSAicHJoZHIiLAorKyAgICAgICAgICBwcm90ZWN0aW9uX2RhdGFfbmFt
ZXNwYWNlKSA8IDApIHsKKysgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHJlZ2lzdGVyIFhNTCBu
YW1lc3BhY2UiKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIHhwYXRoX29iaiA9Cisr
ICAgICAgeG1sWFBhdGhFdmFsRXhwcmVzc2lvbiAoKGNvbnN0IHhtbENoYXIgKikgIi8vcHJoZHI6
S0lEIiwgeHBhdGhfY3R4KTsKKysgIGlmICgheHBhdGhfb2JqKSB7CisrICAgIEdTVF9ERUJVRyAo
ImZhaWxlZCB0byBldmFsIFhQYXRoIGV4cHJlc3Npb24iKTsKKysgICAgZ290byBiZWFjaDsKKysg
IH0KKysKKysgIGtleV9pZF9ub2RlID0geHBhdGhfb2JqLT5ub2Rlc2V0dmFsOworKyAgaW50IG51
bV9rZXlfaWRzID0ga2V5X2lkX25vZGUgPyBrZXlfaWRfbm9kZS0+bm9kZU5yIDogMDsKKysKKysg
IEdTVF9ERUJVRyAoImZvdW5kICVkIGtleSBpZHMiLCBudW1fa2V5X2lkcyk7CisrCisrICBpZiAo
bnVtX2tleV9pZHMgIT0gMCAmJiAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0tPnR5cGUgPT0gWE1M
X0VMRU1FTlRfTk9ERSkpIHsKKysgICAgeG1sQ2hhciAqZW5jb2RlZF9rZXlfaWQgPSB4bWxOb2Rl
R2V0Q29udGVudCAoa2V5X2lkX25vZGUtPm5vZGVUYWJbMF0pOworKyAgICBnc2l6ZSBkZWNvZGVk
X2tleV9pZF9sZW47CisrICAgIGd1Y2hhciAqZGVjb2RlZF9rZXlfaWQgPQorKyAgICAgICAgZ19i
YXNlNjRfZGVjb2RlICgoY29uc3QgZ2NoYXIgKikgZW5jb2RlZF9rZXlfaWQsICZkZWNvZGVkX2tl
eV9pZF9sZW4pOworKworKyAgICBHU1RfTUVNRFVNUCAoImtleSByZXRyaWV2ZWQiLCBkZWNvZGVk
X2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysKKysgICAgbWFuaWZlc3QtPmtleV9pZCA9
IGdfcmVhbGxvYyAobWFuaWZlc3QtPmtleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAg
bWVtY3B5IChtYW5pZmVzdC0+a2V5X2lkLCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRf
bGVuKTsKKysgICAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSBkZWNvZGVkX2tleV9pZF9sZW47Cisr
CisrICAgIHhtbEZyZWUgKGVuY29kZWRfa2V5X2lkKTsKKysgICAgZ19mcmVlIChkZWNvZGVkX2tl
eV9pZCk7CisrICB9IGVsc2UgeworKyAgICBHU1RfRVJST1IgKCJpbnZhbGlkIFhNTCBwYXlsb2Fk
Iik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisrYmVhY2g6CisrICBpZiAoZGVjb2RlZF9w
cm90ZWN0aW9uX2RhdGEpCisrICAgIGdfZnJlZSAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpOwor
KyAgaWYgKHhwYXRoX2N0eCkKKysgICAgeG1sWFBhdGhGcmVlQ29udGV4dCAoeHBhdGhfY3R4KTsK
KysgIGlmICh4cGF0aF9vYmopCisrICAgIHhtbFhQYXRoRnJlZU9iamVjdCAoeHBhdGhfb2JqKTsK
KysgIGlmIChwcm90ZWN0aW9uX2RhdGFfeG1sKQorKyAgICB4bWxGcmVlRG9jIChwcm90ZWN0aW9u
X2RhdGFfeG1sKTsKKysKKysgIHJldHVybjsKKyt9CisgCisgc3RhdGljIHZvaWQKKyBfZ3N0X21z
c19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorQEAgLTMyOSw2
ICs0NTEsNyBAQCBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1h
bmlmZXN0LAorIAorICAgICAgIG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCA9IHN5c3Rl
bV9pZDsKKyAgICAgICBtYW5pZmVzdC0+cHJvdGVjdGlvbl9kYXRhID0gKGdjaGFyICopIHhtbE5v
ZGVHZXRDb250ZW50IChub2RlaXRlcik7CisrICAgICAgX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlv
bl9kYXRhIChtYW5pZmVzdCk7CisgICAgICAgeG1sRnJlZSAoc3lzdGVtX2lkX2F0dHJpYnV0ZSk7
CisgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0zOTQsNiArNTE3LDkgQEAgZ3N0X21zc19tYW5p
ZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRhdGEpCisgICAgIH0KKyAgIH0KKyAKKysgIG1hbmlmZXN0
LT5rZXlfaWQgPSBOVUxMOworKyAgbWFuaWZlc3QtPmtleV9pZF9sZW4gPSAwOworKworICAgZm9y
IChub2RlaXRlciA9IHJvb3QtPmNoaWxkcmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRl
ci0+bmV4dCkgeworICAgICBpZiAobm9kZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQor
ICAgICAgICAgJiYgKHN0cmNtcCAoKGNvbnN0IGNoYXIgKikgbm9kZWl0ZXItPm5hbWUsICJTdHJl
YW1JbmRleCIpID09IDApKSB7CitAQCAtNDQwLDYgKzU2Niw5IEBAIGdzdF9tc3NfbWFuaWZlc3Rf
ZnJlZSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCkKKyAKKyAgIGdfc2xpc3RfZnJlZV9mdWxs
IChtYW5pZmVzdC0+c3RyZWFtcywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfbXNzX3N0cmVhbV9mcmVl
KTsKKyAKKysgIGlmIChtYW5pZmVzdC0+a2V5X2lkKQorKyAgICBnX2ZyZWUgKG1hbmlmZXN0LT5r
ZXlfaWQpOworKworICAgaWYgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCAhPSBOVUxM
KQorICAgICBnX3N0cmluZ19mcmVlIChtYW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQsIFRS
VUUpOworICAgeG1sRnJlZSAobWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YSk7CitAQCAtNDYyLDYg
KzU5MSwxNSBAQCBnc3RfbXNzX21hbmlmZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01h
bmlmZXN0ICogbWFuaWZlc3QpCisgICByZXR1cm4gbWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YTsK
KyB9CisgCisrR3N0QnVmZmVyICoKKytnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKEdzdE1z
c01hbmlmZXN0ICogbWFuaWZlc3QpCisreworKyAgR3N0QnVmZmVyICprZXlfaWRfYnVmZmVyID0K
KysgICAgICBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbWFuaWZlc3QtPmtleV9pZF9s
ZW4sIE5VTEwpOworKyAgZ3N0X2J1ZmZlcl9maWxsIChrZXlfaWRfYnVmZmVyLCAwLCBtYW5pZmVz
dC0+a2V5X2lkLCBtYW5pZmVzdC0+a2V5X2lkX2xlbik7CisrICByZXR1cm4ga2V5X2lkX2J1ZmZl
cjsKKyt9CisrCisgR1NMaXN0ICoKKyBnc3RfbXNzX21hbmlmZXN0X2dldF9zdHJlYW1zIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KQorIHsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc21hbmlmZXN0LmggYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0
LmgKK2luZGV4IDAzYjA2NmEuLjRlNmFkNzMgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFt
aW5nL2dzdG1zc21hbmlmZXN0LmgKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFu
aWZlc3QuaAorQEAgLTU2LDYgKzU2LDcgQEAgR3N0Q2xvY2tUaW1lIGdzdF9tc3NfbWFuaWZlc3Rf
Z2V0X21pbl9mcmFnbWVudF9kdXJhdGlvbiAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmUKKyBjb25z
dCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fc3lzdGVtX2lkIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3Rf
Z2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7CisgZ2Jvb2xl
YW4gZ3N0X21zc19tYW5pZmVzdF9nZXRfbGl2ZV9zZWVrX3JhbmdlIChHc3RNc3NNYW5pZmVzdCAq
IG1hbmlmZXN0LCBnaW50NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCk7CisrR3N0QnVmZmVyICog
Z3N0X21zc19tYW5pZmVzdF9nZXRfa2V5X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsK
KyAKKyBHc3RNc3NTdHJlYW1UeXBlIGdzdF9tc3Nfc3RyZWFtX2dldF90eXBlIChHc3RNc3NTdHJl
YW0gKnN0cmVhbSk7CisgR3N0Q2FwcyAqIGdzdF9tc3Nfc3RyZWFtX2dldF9jYXBzIChHc3RNc3NT
dHJlYW0gKiBzdHJlYW0pOworLS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVh
bWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMtZ29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRl
bXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0LWtpZC5wYXRjaCBiL1Rvb2xzL2dzdHJlYW1lci9wYXRj
aGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXBy
b3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi4xNWY1YmIzNDhhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFt
ZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1nb29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVt
dXhlci1wcm92aWRlZC1hLWRlZmF1bHQta2lkLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9t
IGE4MTZkOGRhYjZiYjMzNzcwMTUwMjg5YTRhZWRlNDNlMmY3YWU0NzggTW9uIFNlcCAxNyAwMDow
MDowMCAyMDAxCitGcm9tOiBDaGFybGllIFR1cm5lciA8Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRl
OiBGcmksIDEwIE1heSAyMDE5IDIzOjM0OjQzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNr
IGlmIGFuIHVwc3RyZWFtIGRlbXV4ZXIgcHJvdmlkZWQgYSBkZWZhdWx0IGtpZC4KKworU21vb3Ro
IHN0cmVhbWluZyBkZW11eGVycyBkbyBub3Qgc2VuZCBib3hlcyBjb250YWluaW5nIG1ldGFkYXRh
IGFib3V0Cit0aGUgc3RyZWFtLiBUaGV5IGhhdmUgdG8gc2VuZCBtZXRhZGF0YSAib3V0LW9mLWJh
bmQiLgorCitGb3IgcGlmZiBlbmNvZGVkIHN0cmVhbXMsIGlmIG5vIGJveCBoYXMgYmVlbiBmb3Vu
ZCBjb250YWluaW5nIGEgZGVmYXVsdAora2lkIGZvciB0aGUgc2FtcGxlLCBjaGVjayBpZiBhbiB1
cHN0cmVhbSBkZW11eGVyIGhhcyBwcm92aWRlZCBvbmUgdmlhIGEKK3Byb3RlY3Rpb24gZXZlbnQs
IGFuZCB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrLgorCitTaWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKy0tLQorIGdzdC9pc29tcDQvcXRk
ZW11eC5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwor
IDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QvaXNv
bXA0L3F0ZGVtdXguYyBiL2dzdC9pc29tcDQvcXRkZW11eC5jCitpbmRleCBjZjE1ZmFkNDYuLmU0
NDliNDgwYyAxMDA2NDQKKy0tLSBhL2dzdC9pc29tcDQvcXRkZW11eC5jCisrKysgYi9nc3QvaXNv
bXA0L3F0ZGVtdXguYworQEAgLTQ1MSw2ICs0NTEsNyBAQCBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0K
KyAgIGd1aW50MzIgcHJvdGVjdGlvbl9zY2hlbWVfdmVyc2lvbjsKKyAgIGdwb2ludGVyIHByb3Rl
Y3Rpb25fc2NoZW1lX2luZm87ICAgICAgLyogc3BlY2lmaWMgdG8gdGhlIHByb3RlY3Rpb24gc2No
ZW1lICovCisgICBHUXVldWUgcHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWU7CisrICBHc3RC
dWZmZXIgKmRlZmF1bHRfa2lkOworIAorICAgZ2ludCByZWZfY291bnQ7ICAgICAgICAgICAgICAg
LyogYXRvbWljICovCisgfTsKK0BAIC0yMDA4LDYgKzIwMDksNyBAQCBfY3JlYXRlX3N0cmVhbSAo
R3N0UVREZW11eCAqIGRlbXV4LCBndWludDMyIHRyYWNrX2lkKQorICAgc3RyZWFtLT5zdHJlYW1f
dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7CisgICBnc3RfdGFnX2xpc3Rfc2V0X3Nj
b3BlIChzdHJlYW0tPnN0cmVhbV90YWdzLCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7CisgICBnX3F1
ZXVlX2luaXQgKCZzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlKTsKKysgIHN0
cmVhbS0+ZGVmYXVsdF9raWQgPSBOVUxMOworICAgc3RyZWFtLT5yZWZfY291bnQgPSAxOworICAg
LyogY29uc2lzdGVudCBkZWZhdWx0IGZvciBwdXNoIGJhc2VkIG1vZGUgKi8KKyAgIGdzdF9zZWdt
ZW50X2luaXQgKCZzdHJlYW0tPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CitAQCAtMjQ3Niw2
ICsyNDc4LDMyIEBAIGdzdF9xdGRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBzaW5r
cGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046
CisgICAgIHsKKyAgICAgICBjb25zdCBnY2hhciAqc3lzdGVtX2lkID0gTlVMTDsKKysgICAgICBH
c3RCdWZmZXIgKmRlZmF1bHRfa2V5X2lkID0gTlVMTDsKKysgICAgICBjb25zdCBHc3RTdHJ1Y3R1
cmUgKnN0cnVjdHVyZTsKKysgICAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBOVUxMOworKyAg
ICAgIEdzdE1hcEluZm8gbWFwOworKworKyAgICAgIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRf
c3RydWN0dXJlIChldmVudCk7CisrICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5
cGVkIChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIpKSB7CisrICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldCAoc3RydWN0dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVSLAor
KyAgICAgICAgICAgICZkZWZhdWx0X2tleV9pZCwgTlVMTCk7CisrICAgICAgICBHU1RfREVCVUdf
T0JKRUNUIChkZW11eCwKKysgICAgICAgICAgICAicmVjZWl2ZWQgYSBkZWZhdWx0IGtleSBpZCBv
ZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAorKyAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3Np
emUgKGRlZmF1bHRfa2V5X2lkKSk7CisrCisrICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5
X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkgPj0KKysgICAgICAgICAgICBHU1RfTEVW
RUxfTUVNRFVNUCkgeworKyAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoZGVmYXVsdF9rZXlfaWQs
ICZtYXAsIEdTVF9NQVBfUkVBRCk7CisrICAgICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAoZGVt
dXgsICJkZWZhdWx0IGtleSBpZCIsIChndWludDggKikgbWFwLmRhdGEsCisrICAgICAgICAgICAg
ICBtYXAuc2l6ZSk7CisrICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGRlZmF1bHRfa2V5X2lk
LCAmbWFwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChRVERFTVVYX05fU1RSRUFNUyAo
ZGVtdXgpKSB7CisrICAgICAgICAgIHN0cmVhbSA9IFFUREVNVVhfTlRIX1NUUkVBTSAoZGVtdXgs
IDApOworKyAgICAgICAgICBzdHJlYW0tPmRlZmF1bHRfa2lkID0gZGVmYXVsdF9rZXlfaWQ7Cisr
ICAgICAgICB9CisrICAgICAgfQorIAorICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9u
IChldmVudCwgJnN5c3RlbV9pZCwgTlVMTCwgTlVMTCk7CisgICAgICAgR1NUX0RFQlVHX09CSkVD
VCAoZGVtdXgsICJSZWNlaXZlZCBwcm90ZWN0aW9uIGV2ZW50IGZvciBzeXN0ZW0gSUQgJXMiLAor
QEAgLTI2ODgsNiArMjcxNiw4IEBAIGdzdF9xdGRlbXV4X3N0cmVhbV9jbGVhciAoUXREZW11eFN0
cmVhbSAqIHN0cmVhbSkKKyAgIGdfcXVldWVfZm9yZWFjaCAoJnN0cmVhbS0+cHJvdGVjdGlvbl9z
Y2hlbWVfZXZlbnRfcXVldWUsCisgICAgICAgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwp
OworICAgZ19xdWV1ZV9jbGVhciAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVl
dWUpOworKyAgaWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpCisrICAgIGdzdF9idWZmZXJfdW5yZWYg
KHN0cmVhbS0+ZGVmYXVsdF9raWQpOworICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21l
bnRzX2RhdGEgKHN0cmVhbSk7CisgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19k
YXRhIChzdHJlYW0pOworIH0KK0BAIC0yOTU0LDYgKzI5ODQsMTkgQEAgcXRkZW11eF9wYXJzZV9w
aWZmIChHc3RRVERlbXV4ICogcXRkZW11eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBnaW50IGxl
bmd0aCwKKyAgICAgdXNlc19zdWJfc2FtcGxlX2VuY3J5cHRpb24gPSBUUlVFOworICAgfQorIAor
KyAgLy8gSW4gdGhlIGNhc2Ugb2Ygc21vb3RoIHN0cmVhbWluZywgd2UgbmV2ZXIgZ2V0IG1vb3Yg
Ym94ZXMgYW5kIHRoZWlyCisrICAvLyBkZWZhdWx0IGVuY3J5cHRpb24gbWV0YWRhdGEuIEluc3Rl
YWQsIHRoZSBkZW11eGVyIGhhcyB0byBwYXJzZSB0aGlzCisrICAvLyBpbmZvcm1hdGlvbiBvdXQg
b2YgdGhlIHBsYXlyZWFkeSBzcGVjaWZpYyBwYXlsb2FkcyBhbmQgbWFrZSBpdCBhdmFpbGJsZQor
KyAgLy8gc29tZWhvdyB0byB1cy4KKysgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHNz
X2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgImtpZCIpKSB7CisrICAgIGlmICghc3RyZWFtLT5k
ZWZhdWx0X2tpZCkgeworKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIk5vIGF2
YWlsYWJsZSBrZXkgaWQgZm9yIHNhbXBsZSIpOworKyAgICB9IGVsc2UgeworKyAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0IChzc19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMsICJraWQiLCBHU1RfVFlQ
RV9CVUZGRVIsCisrICAgICAgICAgIHN0cmVhbS0+ZGVmYXVsdF9raWQsIE5VTEwpOworKyAgICB9
CisrICB9CisrCisgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHNzX2luZm8tPmRlZmF1
bHRfcHJvcGVydGllcywgIml2X3NpemUiLAorICAgICAgICAgICAmaXZfc2l6ZSkpIHsKKyAgICAg
R1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgIkVycm9yIGdldHRpbmcgZW5jcnlwdGlvbiBJViBz
aXplIGZpZWxkIik7CistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvaW5zdGFs
bC1kZXBlbmRlbmNpZXMgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKaW5kZXggNjEz
NjdiNTAwY2EzLi45ZmJlM2U0ZDk4Y2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRl
cGVuZGVuY2llcworKysgYi9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKQEAgLTE5MCw2
ICsxOTAsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aEFwdCB7CiAgICAgICAg
IGdpdCBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5n
cy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1p
bmctdXRpbHMgXAogICAgICAgICBsaWJjcm9jbzMtZGV2IFwKICAgICAgICAgbGliY3VwczItZGV2
IFwKQEAgLTM3OCw2ICszNzksNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aFBh
Y21hbiB7CiAgICAgICAgIGdudXRscyBcCiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBc
CiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgICAgICBneXAgXAogICAg
ICAgICBpY29uLW5hbWluZy11dGlscyBcCiAgICAgICAgIGxpYmNyb2NvIFwKICAgICAgICAgbGli
Y3VwcyBcCkBAIC01NjEsNiArNTYzLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dp
dGhEbmYgewogICAgICAgICBnbnV0bHMtZGV2ZWwgXAogICAgICAgICBnb2JqZWN0LWludHJvc3Bl
Y3Rpb24gXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAg
ICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBpdHN0b29sIFwK
ICAgICAgICAgbGliWGZvbnQyLWRldmVsIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL2poYnVpbGQvamhi
dWlsZHJjX2NvbW1vbi5weSBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQppbmRl
eCBiYmJkYmYzNjAzOWYuLjNlMjYxZTcyZDdiYSAxMDA2NDQKLS0tIGEvVG9vbHMvamhidWlsZC9q
aGJ1aWxkcmNfY29tbW9uLnB5CisrKyBiL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5w
eQpAQCAtODMsMyArODMsOCBAQCBkZWYgaW5pdChqaGJ1aWxkcmNfZ2xvYmFscywgamhidWlsZF9w
bGF0Zm9ybSk6CiAKICAgICBpZiAneDg2XzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5lKCk6CiAgICAg
ICAgIGpoYnVpbGRyY19nbG9iYWxzWydjb25kaXRpb25zJ10uYWRkKCd4ODZfNjQnKQorCisgICAg
aWYgJ0pIQlVJTERfRU5BQkxFX09QRU5DRE0nIGluIG9zLmVudmlyb246CisgICAgICAgIGpoYnVp
bGRfZW5hYmxlX29wZW5jZG0gPSBvcy5lbnZpcm9uWydKSEJVSUxEX0VOQUJMRV9PUEVOQ0RNJ10u
bG93ZXIoKQorICAgICAgICBpZiBqaGJ1aWxkX2VuYWJsZV9vcGVuY2RtID09ICd5ZXMnIG9yIGpo
YnVpbGRfZW5hYmxlX29wZW5jZG0gPT0gJzEnIG9yIGpoYnVpbGRfZW5hYmxlX29wZW5jZG0gPT0g
J3RydWUnOgorICAgICAgICAgICAgamhidWlsZHJjX2dsb2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQo
J09wZW5DRE0nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzIGIv
VG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCmluZGV4IGFkODI2MjEzNWU5ZC4uMWUyYWVk
MzY0M2M3IDEwMDc1NQotLS0gYS9Ub29scy93cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIv
VG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzCkBAIC0xMjAsNiArMTIwLDcgQEAgZnVuY3Rp
b24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhBcHQgewogICAgIHBhY2thZ2VzPSIkcGFja2FnZXMg
XAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldiBc
CisgICAgICAgIGd5cCBcCiAgICAgICAgIGxpYmVnbDEtbWVzYS1kZXYgXAogICAgICAgICBsaWJl
eHBhdDEtZGV2IFwKICAgICAgICAgbGliZmRrLWFhYy1kZXYgXApAQCAtMjM5LDYgKzI0MCw3IEBA
IGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNXaXRoUGFjbWFuIHsKICAgICAgICAgZXhwYXQg
XAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAg
ICAgICAgZ3lwIFwKICAgICAgICAgbGliZmRrLWFhYyBcCiAgICAgICAgIGxpYnByb3h5IFwKICAg
ICAgICAgbGlicHNsIFwKQEAgLTM1OSw2ICszNjEsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5k
ZW5jaWVzV2l0aERuZiB7CiAgICAgICAgIGZkay1hYWMtZGV2ZWwgXAogICAgICAgICBnaXQgXAog
ICAgICAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwK
ICAgICAgICAgbGlibW91bnQtZGV2ZWwgXAogICAgICAgICBsaWJwcm94eS1kZXZlbCBcCiAgICAg
ICAgIGxpYnBzbC1kZXZlbCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403957</attachid>
            <date>2020-07-10 04:29:17 -0700</date>
            <delta_ts>2020-07-10 07:58:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>156004</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkNGUzZTk2ZDE0MWUuLmRh
MmQxYzU2YTM1ZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlz
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1l
bnQgT3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGVuYWJsZSBPcGVuQ0RNIGFuZCBmaW5kIGl0IGl0
IG5lZWRlZC4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kT3BlbkNETS5jbWFrZTogQWRk
ZWQuCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisgICAgICAgICog
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDIwLTA3LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgT3B0aW9u
c0dUSy5jbWFrZSBhbmQgTkVXUyBmb3IgMi4yOS4zIHJlbGVhc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYWExOWViMjllYjNi
Li45ZDY3NjVkMTFiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDctMDMgIFhhYmllciBS
b2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVh
bWVyXVtFTUVdW09wZW5DRE1dIEltcGxlbWVudCBPcGVuQ0RNIHN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzU1MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxl
Lmg6IERpc2FibGUgT1BFTkNETSBieSBkZWZhdWx0LgorCiAyMDIwLTA3LTA5ICBYYWJpZXIgUm9k
cmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkg
Qm94UHRyOjpjcmVhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxl
LmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCmluZGV4IDJiOGI1NDU2Njg2NC4u
ZjU2MTI2NzM5NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTM5Nyw2ICszOTcsMTAg
QEAKICNkZWZpbmUgRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMgMAogI2VuZGlmCiAKKyNpZiAhZGVm
aW5lZChFTkFCTEVfVEhVTkRFUikKKyNkZWZpbmUgRU5BQkxFX1RIVU5ERVIgMAorI2VuZGlmCisK
ICNpZiAhZGVmaW5lZChFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTKQogI2RlZmluZSBFTkFCTEVf
T1JJRU5UQVRJT05fRVZFTlRTIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI3OGFmNmJlN2YxNC4u
YTUzNmFiOTA0NjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTczIEBACisyMDIwLTA3LTAzICBY
YWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQgT3BlbkNETSBzdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1NTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCB0
aGUgT3BlbkNETSBzdXBwb3J0IGluIHRoZSBDRE1PcGVuQ0RNIGFuZAorICAgICAgICBDRE1Qcm94
eU9wZW5DRE0gcmVsYXRlZCBjbGFzc2VzLiBDRE1PcGVuQ0RNIGNsYXNzZXMgY2hlY2sgZm9yCisg
ICAgICAgIFdpZGV2aW5lIHN1cHBvcnQgaW4gT3BlbkNETSBhbmQgZ2x1ZXMgdGhlIEphdmFTY3Jp
cHQgQVBJIHRvIHRoZQorICAgICAgICBPcGVuQ0RNL1RodW5kZXIgZnJhbWV3b3JrLiBCdWlsZGlu
ZyB0aGlzIGlzIG9wdGlvbmFsIGFuZCAtLW9wZW5jZG0KKyAgICAgICAgcGFyYW1ldGVyIG5lZWRz
IHRvIGJlIHBhc3NlZCB0byBidWlsZC13ZWJraXQgdG8gZ2V0IGl0LgorCisgICAgICAgIENETVBy
b3h5IHJlbGF0ZWQgbmVlZGVkIGNoYW5nZXMgYmVjYXVzZSBvZiBzZXZlcmFsIHJlYXNvbnMuIEZp
cnN0CisgICAgICAgIGlzIHRoYXQgS2V5IHdhcyBjb25zaWRlcmluZyBvbmx5IGEgVmVjdG9yPHVp
bnQ4X3Q+IGFzIGEgdHlwZSBhbmQKKyAgICAgICAgT3BlbkNETSBoYXMgc2Vzc2lvbiBvYmplY3Rz
LiBLZXkgaXMgYWxzbyByZW5hbWVkIHRvIEtleUhhbmRsZSBhcworICAgICAgICB0aGlzIG5hbWUg
cmVmbGVjdHMgaW4gYSBiZXR0ZXIgd2F5IHRoZSBwdXJwb3NlIG9mIHRoZSBjbGFzcy4gVGhpcwor
ICAgICAgICBibGVlZHMgb3V0IHRvIGFsbCBDRE1Qcm94eSByZWxhdGVkIGNsYXNzZXMuIENETUlu
c3RhbmNlU2Vzc2lvblByb3h5CisgICAgICAgIGdldHMgc3VwcG9ydCB0byByZW1vdmUgaXRzZWxm
IGZyb20gdGhlIENETVNlc3Npb25Qcm94eS4KKworICAgICAgICBSZWdhcmRpbmcgQ2xlYXJLZXks
IHdlIGFkYXB0IHRoZSBjaGFuZ2VzIHRvIHRoZSBDRE1Qcm94eSBjbGFzc2VzCisgICAgICAgIGFu
ZCBkZS1jYWJsZSBwcm90ZWN0aW9uIHN5c3RlbSBmcm9tIHRoZSBkZWNyeXB0b3JzIGFzIHRoZSBP
cGVuQ0RNCisgICAgICAgIGRlY3J5cHRvciBjb3VsZCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBzeXN0
ZW0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBZb3VUdWJlIFRWIDIwMTkgdGVzdHMgYXJlIGdy
ZWVuLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtl
OgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmRhdGFBc1VJbnQ4UHRyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1J
bnN0YW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETU9wZW5DRE1U
eXBlcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6
aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6OnRha2VWYWx1
ZUlmRGlmZmVyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjb250YWluc0tleUlE
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjptZXJnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6YWxsS2V5c0FzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eVN0b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGQpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6a2V5SGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlI
YW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnRyeVdhaXRGb3JLZXlI
YW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWlsYWJsZVVu
bG9ja2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmdldE9yV2FpdEZvcktleUhhbmRs
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5VmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6OkNE
TUluc3RhbmNlU2Vzc2lvblByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vz
c2lvblByb3h5OjpyZW1vdmVGcm9tSW5zdGFuY2VQcm94eSk6CisgICAgICAgICogcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6aWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5SGFuZGxlOjp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXlIYW5kbGU6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleUhhbmRsZTo6aXNTdGF0dXND
dXJyZW50bHlWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlIYW5kbGU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6S2V5SGFuZGxlOjpvcGVyYXRvcjwpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5SGFuZGxlOjpLZXlIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6Omluc3RhbmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvblByb3h5OjpyZWxlYXNl
RGVjcnlwdGlvblJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25Qcm94eTo6Y2RtSW5zdGFuY2VQcm94eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVByb3h5Ojpwcm94eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5OjpyZW1vdmVTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1VdGlsaXRpZXMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6Q0RNVXRpbGl0aWVzOjpwYXJzZUpTT05PYmplY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIu
Y3BwLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZUZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzSW5pdERhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6ZVJlc3BvbnNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRh
dGVMaWNlbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
OjpyZW1vdmVTZXNzaW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6cGFyZW50SW5zdGFuY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojppc09wZW5DRE1SYW5rZWQpOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUdTdHJlYW1l
ckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGVWZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJDb21tb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRGb3JDRE1BdHRhY2ht
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3Rv
cnlHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeTo6cGxhdGZvcm1S
ZWdpc3RlckZhY3Rvcmllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1PcGVuQ0RNLmNwcDogQWRkZWQuCisgICAgICAgIChvcGVuQ0RNTGljZW5zZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdERhdGFNRDUpOgorICAgICAgICAoV2ViQ29yZTo6c2Vz
c2lvbkxvYWRGYWlsdXJlRnJvbU9wZW5DRE0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNETTo6
ZGVzdHJ1Y3RPcGVuQ0RNU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0RNOjpjcmVh
dGVTaGFyZWRPcGVuQ0RNU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1GYWN0b3J5T3Bl
bkNETTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3RvcnlPcGVuQ0RNOjpj
cmVhdGVDRE0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNRmFjdG9yeU9wZW5DRE06OmNyZWF0ZUNE
TVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3RvcnlPcGVuQ0RNOjpzdXBwb3J0ZWRL
ZXlTeXN0ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUZhY3RvcnlPcGVuQ0RNOjpz
dXBwb3J0c0tleVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6
c3VwcG9ydGVkSW5pdERhdGFUeXBlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2
YXRlT3BlbkNETTo6c3VwcG9ydHNDb25maWd1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByaXZhdGVPcGVuQ0RNOjpzdXBwb3J0ZWRSb2J1c3RuZXNzZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZlSWRlbnRpZmllcnNS
ZXF1aXJlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6
cGVyc2lzdGVudFN0YXRlUmVxdWlyZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
UHJpdmF0ZU9wZW5DRE06OmRpc3RpbmN0aXZlSWRlbnRpZmllcnNBcmVVbmlxdWVQZXJPcmlnaW5B
bmRDbGVhcmFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06
OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVPcGVuQ0RNOjps
b2FkQW5kSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlT3BlbkNETTo6
c3VwcG9ydHNTZXJ2ZXJDZXJ0aWZpY2F0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
UHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzU2Vzc2lvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnN1cHBvcnRzSW5pdERhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplUmVzcG9uc2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU9wZW5DRE06OnNhbml0aXplU2Vzc2lvbklkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlT3BlbkNETTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlT3BlbkNETTo6aW5pdGlhbGl6ZVdp
dGhDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlT3BlbkNETTo6
c2V0U2VydmVyQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VPcGVu
Q0RNOjpzZXRTdG9yYWdlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbk9wZW5DRE06OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VPcGVuQ0RNOjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6aGFzUGF5bG9hZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnBheWxvYWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjpwYXlsb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhcnNlZFJlc3BvbnNlTWVzc2FnZTo6aGFzVHlwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXJzZWRSZXNwb25zZU1lc3NhZ2U6OnR5cGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFyc2VkUmVzcG9uc2VNZXNzYWdlOjp0eXBlT3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6Y2hhbGxlbmdlR2VuZXJhdGVk
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06OmtleVVwZGF0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjprZXlzVXBkYXRlRG9u
ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbk9wZW5DRE06
OmVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3Bl
bkNETTo6cmVxdWVzdExpY2Vuc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNz
aW9uT3BlbkNETTo6c2Vzc2lvbkZhaWx1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uT3BlbkNETTo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpsb2FkU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb25PcGVuQ0RNOjpjbG9zZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uT3BlbkNETTo6c3RvcmVSZWNvcmRPZktleVVz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1PcGVuQ0RNLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6T3BlbkNETTo6T3BlbkNETVN5c3RlbURlbGV0ZXI6Om9wZXJhdG9yKCkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BlbkNETTo6T3BlbkNETVNlc3Npb25EZWxldGVyOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVBy
b3h5Q2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2Vu
Y1NldERlY3J5cHRpb25LZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNUHJveHlPcGVuQ0RNLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eU9wZW5DRE06OmdldERlY3J5cHRpb25TZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5T3BlbkNETTo6ZGVjcnlwdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eU9wZW5DRE0uaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVy
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1l
ckVNRVV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5pdERhdGE6OkluaXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkluaXREYXRhOjpwYXlsb2FkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lckVNRVV0aWxpdGllczo6aXNXaWRldmluZUtleVN5c3RlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgIChwcm90ZWN0aW9uU3lzdGVtSWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgICh0cmFuc2Zvcm1DYXBzKToKKyAgICAg
ICAgKHRyYW5zZm9ybUluUGxhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0T3BlbkNETURlY3J5
cHRvckdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X21lZGlhX29wZW5jZG1f
ZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9vcGVuY2RtX2RlY3J5
cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChwcm90ZWN0aW9uU3lzdGVt
SWQpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6CisgICAgICAgIChkZWNyeXB0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdE9wZW5DRE1EZWNy
eXB0b3JHU3RyZWFtZXIuaDogQWRkZWQuCisKIDIwMjAtMDctMDkgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE11bHRpcGxleCB0aGUgSElEIGFuZCBHYW1lQ29u
dHJvbGxlciBnYW1lcGFkIHByb3ZpZGVycyBvbiBNYWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA5
YjBkODIzMTBlNGYuLmI3M2IwNDliNWVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDcxLDYg
KzEwNzEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUmVxdWlyZW1lbnQuaAogICAgIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVJlc3RyaWN0aW9ucy5oCiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNU2Vzc2lvblR5cGUuaAorICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGll
cy5oCiAKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5oCiAgICAgcGxhdGZv
cm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaApAQCAtMTYwNywzICsxNjA4LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgICR7V2ViQ29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9XZWJLaXRGb250RmFtaWx5TmFtZXMuaAogICAgICR7V2ViQ29yZV9E
RVJJVkVEX1NPVVJDRVNfRElSfS9Xcml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgKICkK
KworaWYgKEVOQUJMRV9PUEVOQ0RNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUyBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1PcGVuQ0RNVHlwZXMu
aCkKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMjI5YzI5MTI5YWRjLi4yNWJhZjZhY2Q3NmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQyMjEs
NiArNDIyMSw4IEBACiAJCUNERTNBODU0MTdGNUZDRTYwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJp
dmF0ZUFWRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RFM0E4NTIxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGLmggKi87IH07
CiAJCUNERTNBODU3MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREUzQTg1
NTE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tICovOyB9Owog
CQlDREUzQTg1ODE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREUzQTg1NjE3
RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmggKi87IH07CisJCUNE
RTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTNBRTEwMjRCNDkxNjkwMDEyOEU3RSAv
KiBDRE1VdGlsaXRpZXMuaCAqLzsgfTsKKwkJQ0RFM0FFMTQyNEI0OTM3MDAwMTI4RTdFIC8qIENE
TVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREUzQUUxMzI0QjQ5MzZGMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmNwcCAqLzsgfTsK
IAkJQ0RFNTU1MjQyNDA1Q0NGMjAwOEEzRERCIC8qIExlZ2FjeUNETS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBOThFMEExNjAzQ0Q1OTAwRkVBM0Ix
IC8qIExlZ2FjeUNETS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUNERTU1NTI1MjQwNUNDRjIwMDhBM0REQiAvKiBMZWdhY3lDRE1Qcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREE5OEUwQzE2
MDNDRjNDMDBGRUEzQjEgLyogTGVnYWN5Q0RNUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNERTU5NTk1MUJGMTZERjMwMEExQ0JFOCAv
KiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTU5NTkzMUJGMTY2QUQwMEExQ0JFOCAvKiBDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbSAqLzsgfTsKQEAgLTE0MzEyLDYgKzE0MzE0LDgg
QEAKIAkJQ0RFM0E4NTIxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlQVZGLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERTNBODU1MTdGNjAyMDQwMEM1QkUyMCAv
KiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNERTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJp
dmF0ZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9UcmFj
a1ByaXZhdGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERTNBRTEw
MjRCNDkxNjkwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ0RNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNERTNBRTEzMjRCNDkzNkYwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNVXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNTk1OTMxQkYxNjZBRDAwQTFDQkU4IC8qIENETVNlc3Npb25B
VkNvbnRlbnRLZXlTZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNERTU5NTk0MUJGMTY2RDEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REU1OTU5NjFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjg3Niw2ICsyNjg4MCw3
IEBACiAJCUNEOTRBNUNCMUY3MUNCNDYwMEY1MjVDNSAvKiBlbmNyeXB0ZWRtZWRpYSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQ0RFM0FFMTMyNEI0OTM2
RjAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5jcHAgKi8sCiAJCQkJQ0Q5NEE1RDkxRjcxQ0I5RjAw
RjUyNUM1IC8qIGNsZWFya2V5ICovLAogCQkJCUNERjc1NjlCMjE1QzIzQTQwMEVGQ0I1MCAvKiBD
RE1FbmNyeXB0aW9uU2NoZW1lLmggKi8sCiAJCQkJQ0Q5NEE1RDExRjcxQ0I2QjAwRjUyNUM1IC8q
IENETUZhY3RvcnkuY3BwICovLApAQCAtMjY4OTAsNiArMjY4OTUsNyBAQAogCQkJCUNEOTRBNUQ2
MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEM0NFMTFDMjQw
NDUxQUYwMDRCQTAxRCAvKiBDRE1Qcml2YXRlLmNwcCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjZB
MDBGNTI1QzUgLyogQ0RNUHJpdmF0ZS5oICovLAorCQkJCUNERTNBRTEwMjRCNDkxNjkwMDEyOEU3
RSAvKiBDRE1VdGlsaXRpZXMuaCAqLywKIAkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyog
Q0RNUHJveHkuY3BwICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNjEwMEY1MjVDNSAvKiBDRE1Qcm94
eS5oICovLAogCQkJCUNEOTRBNUNDMUY3MUNCNjkwMEY1MjVDNSAvKiBDRE1SZXF1aXJlbWVudC5o
ICovLApAQCAtMzEyMTMsNiArMzEyMTksNyBAQAogCQkJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVF
RSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QTBFNzcwRjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QTU0ODU4MDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9y
eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCODFDQUUxRkFBNDQ2MjAwMzdEMUU2IC8q
IEluc3BlY3RvckluZGV4ZWREQkFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyMEQ2MjkyNzEy
NTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTg2MEU2RDIzMERFMzAzMDA0NjFBQUUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uUHVibGljLmggaW4gSGVhZGVycyAqLywKQEAgLTM0Nzk1LDYgKzM0ODAyLDcgQEAKIAkJCQlE
RUNBN0RCNzFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE2Ny5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlERUNBN0RCODFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTE2OC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBN0RCOTFGOUU2N0I2MDBFM0I2NjEgLyogVW5pZmll
ZFNvdXJjZTE2OS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDREUzQUUxNDI0QjQ5MzcwMDAxMjhF
N0UgLyogQ0RNVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQ0E3REJBMUY5RTY3
QjYwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTcwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURF
Q0E3REZCMUY5RUIzNjQwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTcxLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCURFQ0E3REZDMUY5RUIzNjQwMEUzQjY2MSAvKiBVbmlmaWVkU291cmNlMTcyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmlu
ZGV4IDc5NTQ3Y2JhZjBkNS4uNjFlNDZlNzVlOTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlCkBAIC0xNjgsNiArMTY4LDcgQEAgaWYgKEVOQUJMRV9FTkNSWVBURURf
TUVESUEpCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCisgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcApAQCAtMTgwLDYgKzE4MSwyNyBA
QCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUwogICAgICAgICAke0xJQkdDUllQVF9MSUJSQVJJRVN9IC1sZ3BnLWVycm9yCiAgICAg
KQorCisgICAgaWYgKEVOQUJMRV9USFVOREVSKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL29wZW5jZG0iCisgICAgICAgICkKKworICAgICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAg
ICAke1RIVU5ERVJfSU5DTFVERV9ESVJTfQorICAgICAgICApCisKKyAgICAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7VEhVTkRFUl9MSUJSQVJJRVN9Cisg
ICAgICAgICkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlUaHVuZGVyLmNwcAor
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1UaHVuZGVyLmNw
cAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRUaHVu
ZGVyRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKwogZW5k
aWYgKCkKIAogaWYgKFVTRV9DQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuY3BwCmluZGV4IDI0ZDIwYjY0NjhiYS4uZGRmN2EwNGZkYzA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTEyMyw2ICsxMjMsMTEgQEAgY29uc3QgY2hh
ciogU2hhcmVkQnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICByZXR1cm4gbV9zZWdtZW50c1swXS5z
ZWdtZW50LT5kYXRhKCk7CiB9CiAKK2NvbnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6ZGF0YUFz
VUludDhQdHIoKSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhKCkpOworfQorCiBTaGFyZWRCdWZmZXJEYXRhVmlldyBTaGFyZWRCdWZmZXI6
OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CmluZGV4IDBhOGZlNzAxYjE5Yi4uNTFlZTZkNGZjMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaApAQCAtMTA2LDYgKzEwNiw3IEBAIHB1YmxpYzoKICAgICAvLyBJdGVy
YXRlIHRoZSBzZWdtZW50cyB1c2luZyBiZWdpbigpIGFuZCBlbmQoKSBpbnN0ZWFkLgogICAgIC8v
IEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCByZXBsYWNl
IHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCiAgICAgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0OworICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGFBc1VJbnQ4UHRyKCkgY29uc3Q7CiAKICAg
ICAvLyBDcmVhdGVzIGFuIEFycmF5QnVmZmVyIGFuZCBjb3BpZXMgdGhpcyBTaGFyZWRCdWZmZXIn
cyBjb250ZW50cyB0byB0aGF0CiAgICAgLy8gQXJyYXlCdWZmZXIgd2l0aG91dCBtZXJnaW5nIHNl
Z21lbnRlZCBidWZmZXJzIGludG8gYSBmbGF0IGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IDM1MTc4ZWYz
NjA2Zi4uMDI2OWZlNTdlYjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKQEAgLTc1LDYgKzc1LDkgQEAgcHVibGljOgog
ICAgICAgICBDbGVhcktleSwKICAgICAgICAgRmFpclBsYXlTdHJlYW1pbmcsCiAgICAgICAgIFJl
bW90ZSwKKyNpZiBFTkFCTEUoVEhVTkRFUikKKyAgICAgICAgVGh1bmRlciwKKyNlbmRpZgogICAg
IH07CiAgICAgdmlydHVhbCBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkg
Y29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1PcGVuQ0RNVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETU9wZW5DRE1UeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uZjc5Nzc1NjZmNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNT3BlbkNETVR5cGVzLmgKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYm
IEVOQUJMRShUSFVOREVSKQorCisjaW5jbHVkZSA8b3Blbl9jZG0uaD4KKyNpbmNsdWRlIDx3dGYv
Qm94UHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitXVEZfREVGSU5FX0JPWFBUUl9ERUxFVEVS
KE9wZW5DRE1TZXNzaW9uLCBvcGVuY2RtX2Rlc3RydWN0X3Nlc3Npb24pCisKK30KKworI2VuZGlm
IC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCmluZGV4
IDFjNDYyZjBiNjU0My4uZjJhNWYzMTc2NmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTkxLDM1ICs5Miw0MiBAQCBzdGF0aWMgU3RyaW5nIHZlY3RvclRvSGV4U3RyaW5nKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmVjKQogCiB9IC8vIG5hbWVzcGFjZSB7fQogCi1TdHJpbmcgS2V5Ojpp
ZEFzU3RyaW5nKCkgY29uc3QKK1N0cmluZyBLZXlIYW5kbGU6OmlkQXNTdHJpbmcoKSBjb25zdAog
ewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV9pZCksICJd
Iik7CiB9CiAKLVN0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorYm9vbCBLZXlIYW5k
bGU6OnRha2VWYWx1ZUlmRGlmZmVyZW50KEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIHZhbHVlKQog
ewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSks
ICJdIik7CisgICAgaWYgKG1fdmFsdWUgIT0gdmFsdWUpIHsKKyAgICAgICAgbV92YWx1ZSA9IFdU
Rk1vdmUodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0Citib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IEtl
eUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmco
WyZdKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICByZXR1cm4gbV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIHN0b3JlZEtleSkgewogICAg
ICAgICByZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKICAgICB9KSAhPSBXVEY6Om5vdEZvdW5k
OwogfQogCiB2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCiB7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkg
LSBtZXJnaW5nICV1IG5ldyBrZXlzIGludG8gYSBrZXkgc3RvcmUgb2YgJXUga2V5cyIsIG90aGVy
Lm51bUtleXMoKSwgbnVtS2V5cygpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVy
KSB7CiAgICAgICAgIC8vIE5PVEU6IERvIHdlIGNhcmUgdGhhdCB3ZSB3aWxsIG5vdCBhcHBlbmQg
YSBrZXkgaWYgaXQgbWF0Y2hlcyBhIGtleSBJRAogICAgICAgICAvLyBpbiB0aGUga2V5c3RvcmUg
YW5kIGhhcyBkaWZmZXJlbnQgZGF0YS4gU2hvdWxkIHdlIG92ZXJ3cml0ZT8gV2hpY2ggaXMgIm5l
d2VyIj8KICAgICAgICAgLy8gRG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIGV4dHJhIGNvbXBsZXhp
dHkuCi0gICAgICAgIGlmIChtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtl
eT4mIHN0b3JlZEtleSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9KSA9PSBXVEY6Om5v
dEZvdW5kKQorICAgICAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5
cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYgc3RvcmVkS2V5KSB7
IHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7IH0pOworICAgICAgICBpZiAoa2V5V2l0aE1hdGNo
aW5nS2V5SURJbmRleCA9PSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAgICAgbV9rZXlzLmFwcGVu
ZChrZXkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgaGFw
cGVuIHdpdGggREFTSCBwbGF5ZXJzLCBpdCBzZWVtcyBoYXJtbGVzcyB0byBpZ25vcmUgaXQuCi0g
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBpZ25vcmVkIGEga2V5IHdpdGgg
dGhlIHNhbWUgSUQgYW5kIGRpZmZlcmVudCBkYXRhIik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5cyB3aXRoIHRoZSBzYW1lIElEISIp
OworICAgICAgICAgICAgQVNTRVJUKGtleS0+dmFsdWUoKSA9PSBtX2tleXNba2V5V2l0aE1hdGNo
aW5nS2V5SURJbmRleF0tPnZhbHVlKCkpOworICAgICAgICB9CiAgICAgfQogCiAjaWYgIUxPR19E
SVNBQkxFRApAQCAtMTI5LDE1ICsxMzcsMTUgQEAgdm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3Qg
S2V5U3RvcmUmIG90aGVyKQogI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKIH0KIAotQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkKCkg
Y29uc3QKK0NETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxL
ZXlzQXMoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKSBjb25zdAogewogICAg
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IGNv
bnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgZm9yIChhdXRvJiBrZXlTdGF0dXMgOiBr
ZXlTdGF0dXNWZWN0b3IpCi0gICAgICAgIGtleVN0YXR1cy5zZWNvbmQgPSBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQgPSBz
dGF0dXM7CiAgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsKIH0KIAotYm9vbCBLZXlTdG9yZTo6
YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYgbmV3S2V5cykKK2Jvb2wgS2V5U3RvcmU6OmFk
ZEtleXMoVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiYmIG5ld0tleXMpCiB7CiAgICAgYm9vbCBk
aWRLZXlTdG9yZUNoYW5nZSA9IGZhbHNlOwogICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykg
ewpAQCAtMTQ3LDE2ICsxNTUsMTggQEAgYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVm
UHRyPEtleT4+JiYgbmV3S2V5cykKICAgICByZXR1cm4gZGlkS2V5U3RvcmVDaGFuZ2U7CiB9CiAK
LWJvb2wgS2V5U3RvcmU6OmFkZChSZWZQdHI8S2V5PiYmIGtleSkKK2Jvb2wgS2V5U3RvcmU6OmFk
ZChSZWZQdHI8S2V5SGFuZGxlPiYmIGtleSkKIHsKICAgICBib29sIGRpZFN0b3JlQ2hhbmdlID0g
ZmFsc2U7Ci0gICAgc2l6ZV90IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmlu
ZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgIHNpemVf
dCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNv
bnN0IFJlZlB0cjxLZXlIYW5kbGU+JiBzdG9yZWRLZXkpIHsKICAgICAgICAgcmV0dXJuICprZXkg
PT0gKnN0b3JlZEtleTsKICAgICB9KTsKIAogICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKICAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGtleVdpdGhNYXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNh
biB0aGlzIHJlYWxseSBoYXBwZW4/Iik7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0ga2V5V2l0
aE1hdGNoaW5nS2V5SUQgPT0ga2V5OworICAgICAgICBpZiAoZGlkU3RvcmVDaGFuZ2UpCisgICAg
ICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IGtleTsKICAgICB9IGVsc2UgewogICAgICAg
ICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBOZXcga2V5IHdpdGggSUQgJXMgZ2V0dGluZyBh
ZGRlZCB0byBrZXkgc3RvcmUiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7ICAg
ICAgCiAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsKQEAgLTE2OCw3ICsxNzgsNyBAQCBib29s
IEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkpCiAgICAgICAgIC8vIE5PVEU6IFRoaXMg
aXMgbm90IGFzIHBhdGhvbG9naWNhbCBhcyBpdCBtYXkgc2VlbSwgZm9yIGFsbAogICAgICAgICAv
LyBwcmFjdGljYWwgcHVycG9zZXMgdGhlIHN0b3JlIGhhcyBhIG1heGltdW0gb2YgMiBrZXlzLgog
ICAgICAgICBzdGQ6OnNvcnQobV9rZXlzLmJlZ2luKCksIG1fa2V5cy5lbmQoKSwKLSAgICAgICAg
ICAgIFtdKGNvbnN0IFJlZlB0cjxLZXk+JiBhLCBjb25zdCBSZWZQdHI8S2V5PiYgYikgeworICAg
ICAgICAgICAgW10oY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIGEsIGNvbnN0IFJlZlB0cjxLZXlI
YW5kbGU+JiBiKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuICphIDwgKmI7CiAgICAgICAgICAg
ICB9KTsKICAgICB9CkBAIC0xODMsNyArMTkzLDcgQEAgdm9pZCBLZXlTdG9yZTo6cmVtb3ZlQWxs
S2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIG90aGVyKQogICAgICAgICByZW1vdmUoa2V5KTsKIH0K
IAotYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCitib29sIEtl
eVN0b3JlOjpyZW1vdmUoY29uc3QgUmVmUHRyPEtleUhhbmRsZT4mIGtleSkKIHsKICAgICBib29s
IHN0b3JlQ2hhbmdlZCA9IGZhbHNlOwogCkBAIC0yMDQsMTEgKzIxNCwxMSBAQCBib29sIEtleVN0
b3JlOjpyZW1vdmUoY29uc3QgUmVmUHRyPEtleT4mIGtleSkKICAgICByZXR1cm4gc3RvcmVDaGFu
Z2VkOwogfQogCi1jb25zdCBWZWN0b3I8dWludDhfdD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorY29uc3QgUmVmUHRyPEtleUhhbmRsZT4m
IEtleVN0b3JlOjprZXlIYW5kbGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgewogICAgICAgICBpZiAoKmtleSA9PSBr
ZXlJRCkKLSAgICAgICAgICAgIHJldHVybiBrZXktPnZhbHVlKCk7CisgICAgICAgICAgICByZXR1
cm4ga2V5OwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAia2V5IG11
c3QgZXhpc3QgdG8gY2FsbCB0aGlzIG1ldGhvZCIpOwpAQCAtMjM4LDExICsyNDgsMTEgQEAgdm9p
ZCBDRE1Qcm94eTo6c2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSogaW5zdGFuY2UpCiAgICAg
bV9pbnN0YW5jZSA9IGluc3RhbmNlOwogfQogCi1WZWN0b3I8dWludDhfdD4gQ0RNUHJveHk6Omtl
eVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0CitSZWZQdHI8S2V5SGFu
ZGxlPiBDRE1Qcm94eTo6a2V5SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7
CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CiAgICAgQVNTRVJUKG1f
a2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCkpOwotICAgIHJldHVybiBtX2tleVN0b3JlLmtl
eVZhbHVlKGtleUlEKTsKKyAgICByZXR1cm4gbV9rZXlTdG9yZS5rZXlIYW5kbGUoa2V5SUQpOwog
fQogCiB2b2lkIENETVByb3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0CkBAIC0yNjEs
NyArMjcxLDcgQEAgdm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAog
ICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CiB9CiAKLU9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK09wdGlvbmFsPFJlZjxLZXlIYW5kbGU+PiBDRE1Qcm94eTo6dHJ5
V2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmIGtleUlEKSBjb25zdAogewogICAgIHN0
YXJ0ZWRXYWl0aW5nRm9yS2V5KCk7CiAgICAgLy8gVW5jb25kaXRpb25hbGx5IHNheWluZyB3ZSBo
YXZlIHN0b3BwZWQgd2FpdGluZyBmb3IgYSBrZXkgbWVhbnMgdGhhdCBkZWNyeXB0b3JzIG9ubHkg
Z2V0CkBAIC0yODEsMzIgKzI5MSw0MSBAQCBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVBy
b3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpCiAKICAgICBp
ZiAod2FzS2V5UmVjZWl2ZWQpIHsKICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0g
c3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5
SUQpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAg
ICAgICAgUmVmUHRyPEtleUhhbmRsZT4gaGFuZGxlID0ga2V5SGFuZGxlKGtleUlEKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VPcHRpb25hbChoYW5kbGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQog
ICAgIAogICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleSBJRCAlcyBub3QgYXZhaWxh
YmxlIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1ib29sIENETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tl
ZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorYm9vbCBDRE1Qcm94eTo6a2V5
QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKTsKIH0KIAotYm9vbCBDRE1Qcm94
eTo6a2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Citib29s
IENETVByb3h5OjprZXlBdmFpbGFibGUoY29uc3QgS2V5SURUeXBlJiBrZXlJRCkgY29uc3QKIHsK
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKICAgICByZXR1cm4ga2V5
QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOwogfQogCi1PcHRpb25hbDxWZWN0b3I8dWludDhfdD4+
IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkg
Y29uc3QKK09wdGlvbmFsPFJlZjxLZXlIYW5kbGU+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5
SGFuZGxlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0CiB7CiAgICAgaWYgKCFrZXlBdmFp
bGFibGUoa2V5SUQpKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSBrZXkgY2Fj
aGUgZG9lcyBub3QgY29udGFpbiBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCku
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleShrZXlJRCk7Cisg
ICAgICAgIHJldHVybiB0cnlXYWl0Rm9yS2V5SGFuZGxlKGtleUlEKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4ga2V5VmFsdWUoa2V5SUQpOworICAgIFJlZlB0cjxLZXlIYW5kbGU+IGhhbmRsZSA9IGtl
eUhhbmRsZShrZXlJRCk7CisgICAgcmV0dXJuIG1ha2VPcHRpb25hbChoYW5kbGUucmVsZWFzZU5v
bk51bGwoKSk7Cit9CisKK09wdGlvbmFsPEtleUhhbmRsZVZhbHVlVmFyaWFudD4gQ0RNUHJveHk6
OmdldE9yV2FpdEZvcktleVZhbHVlKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxlKGtleUlEKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VPcHRpb25hbCgoKmtleUhhbmRsZSktPnZhbHVlKCkpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdh
aXRpbmdGb3JLZXkoKQpAQCAtMzYwLDYgKzM3OSwxOCBAQCB2b2lkIENETUluc3RhbmNlUHJveHk6
OnRyYWNrU2Vzc2lvbihjb25zdCBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSYgc2Vzc2lvbikKICAg
ICBtX3Nlc3Npb25zLmFkZChzZXNzaW9uKTsKIH0KIAorQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHk6
OkNETUluc3RhbmNlU2Vzc2lvblByb3h5KENETUluc3RhbmNlUHJveHkmIGluc3RhbmNlKQorICAg
IDogbV9pbnN0YW5jZShtYWtlV2Vha1B0cihpbnN0YW5jZSkpCit7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uUHJveHk6OnJlbW92ZUZyb21JbnN0YW5jZVByb3h5KCkKK3sKKyAgICBpZiAo
IW1faW5zdGFuY2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luc3RhbmNlLT5yZW1vdmVTZXNz
aW9uKCp0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5oCmluZGV4IGE5ZTdiY2Q5MTFiMS4uNjc1NjlhMDI0YTgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5
LmgKQEAgLTM0LDM1ICszNCw1NCBAQAogI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPHd0Zi9Cb3hQdHIuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4K
IAorI2lmIEVOQUJMRShUSFVOREVSKQorI2luY2x1ZGUgIkNETU9wZW5DRE1UeXBlcy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50
ZWQ8S2V5PiB7Cit1c2luZyBLZXlJRFR5cGUgPSBWZWN0b3I8dWludDhfdD47Cit1c2luZyBLZXlI
YW5kbGVWYWx1ZVZhcmlhbnQgPSBWYXJpYW50PAorICAgIFZlY3Rvcjx1aW50OF90PgorI2lmIEVO
QUJMRShUSFVOREVSKQorICAgICwgQm94UHRyPE9wZW5DRE1TZXNzaW9uPgorI2VuZGlmCis+Owor
CitjbGFzcyBLZXlIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8S2V5SGFuZGxl
PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0
dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkK
KyAgICBzdGF0aWMgUmVmUHRyPEtleUhhbmRsZT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0dXMsIEtl
eUlEVHlwZSYmIGtleUlELCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmJiBrZXlIYW5kbGVWYWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUo
a2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBLZXlIYW5kbGUoc3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgV1RGTW92ZShrZXlIYW5kbGVWYWx1
ZSkpKTsKICAgICB9CiAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gaWRBc1NoYXJlZEJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1faWQuZGF0YSgpLCBtX2lkLnNpemUo
KSk7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KLSAgICBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1
ZTsgfQorICAgIGJvb2wgdGFrZVZhbHVlSWZEaWZmZXJlbnQoS2V5SGFuZGxlVmFsdWVWYXJpYW50
JiYpOworCisgICAgY29uc3QgS2V5SURUeXBlJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0K
KyAgICBjb25zdCBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgIEtleUhhbmRsZVZhbHVlVmFyaWFudCYgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CiAgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVz
OyB9CisgICAgYm9vbCBpc1N0YXR1c0N1cnJlbnRseVZhbGlkKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0YXR1cyA9PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlIHx8
IG1fc3RhdHVzID09IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXRSZXN0cmlj
dGVkCisgICAgICAgICAgICB8fCBtX3N0YXR1cyA9PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6T3V0cHV0RG93bnNjYWxlZDsKKyAgICB9CiAKICAgICBTdHJpbmcgaWRBc1N0cmluZygp
IGNvbnN0OwotICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CiAKICAgICAvLyBUd28g
a2V5cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFs
dWUgYW5kIHN0YXR1cy4KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEs
IGNvbnN0IEtleSAmazIpIHsgcmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQotICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSB7IHJldHVybiBrLm1faWQgPT0ga2V5SUQ7IH0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4g
ayA9PSBrZXlJRDsgfQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXkmIGsxLCBj
b25zdCBLZXkmIGsyKQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5SGFuZGxl
ICZrMSwgY29uc3QgS2V5SGFuZGxlICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9
CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlIYW5kbGUgJmssIGNvbnN0IEtl
eUlEVHlwZSYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgS2V5SURUeXBlJiBrZXlJRCwgY29uc3QgS2V5SGFuZGxlICZr
KSB7IHJldHVybiBrID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEtleUhhbmRsZSYgazEsIGNvbnN0IEtleUhhbmRsZSYgazIpCiAgICAgewogICAgICAgICAvLyBL
ZXkgSURzIGFyZSBjb21wYXJlZCBhcyBmb2xsb3dzOiBGb3Iga2V5IElEcyBBIG9mIGxlbmd0aCBt
IGFuZAogICAgICAgICAvLyBCIG9mIGxlbmd0aCBuLCBhc3NpZ25lZCBzdWNoIHRoYXQgbSA8PSBu
LCBsZXQgQSA8IEIgaWYgYW5kIG9ubHkKQEAgLTg0LDEyICsxMDMsMTIgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXM7IH0KICAgICBmcmllbmQgY2xh
c3MgS2V5U3RvcmU7CiAKLSAgICBLZXkoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+
JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQotICAgICAgICA6IG1fc3RhdHVz
KHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUoa2V5VmFsdWUp
KSB7IH0KKyAgICBLZXlIYW5kbGUoS2V5U3RhdHVzIHN0YXR1cywgS2V5SURUeXBlJiYga2V5SUQs
IEtleUhhbmRsZVZhbHVlVmFyaWFudCYmIGtleUhhbmRsZVZhbHVlKQorICAgICAgICA6IG1fc3Rh
dHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUoa2V5SGFu
ZGxlVmFsdWUpKSB7IH0KIAogICAgIEtleVN0YXR1cyBtX3N0YXR1czsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gbV9pZDsKLSAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsKKyAgICBLZXlJRFR5cGUg
bV9pZDsKKyAgICBLZXlIYW5kbGVWYWx1ZVZhcmlhbnQgbV92YWx1ZTsKICAgICB1bnNpZ25lZCBt
X251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OwogfTsKIApAQCAtOTcsMTggKzExNiwyMSBAQCBj
bGFzcyBLZXlTdG9yZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgS2V5U3RhdHVzVmVjdG9yID0gQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CiAKLSAgICBib29sIGNvbnRhaW5zS2V5
SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZShj
b25zdCBLZXlTdG9yZSYgb3RoZXIpOwotICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3Qg
S2V5U3RvcmUmIG90aGVyKTsKKyAgICBLZXlTdG9yZSgpID0gZGVmYXVsdDsKKworICAgIGJvb2wg
Y29udGFpbnNLZXlJRChjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICB2b2lkIG1lcmdlKGNv
bnN0IEtleVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9y
ZSYpOwogICAgIHZvaWQgcmVtb3ZlQWxsS2V5cygpIHsgbV9rZXlzLmNsZWFyKCk7IH0KLSAgICBi
b29sIGFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmKTsKLSAgICBib29sIGFkZChSZWZQdHI8
S2V5PiYmKTsKLSAgICBib29sIHJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYpOworICAgIGJvb2wg
YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+JiYpOworICAgIGJvb2wgYWRkKFJlZlB0
cjxLZXlIYW5kbGU+JiYpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXlIYW5kbGU+
Jik7CiAgICAgYm9vbCBoYXNLZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNpemUoKTsgfQog
ICAgIHVuc2lnbmVkIG51bUtleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgpOyB9Ci0g
ICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKLSAgICBLZXlTdGF0dXNWZWN0b3IgYWxsS2V5c0FzUmVsZWFzZWQoKSBj
b25zdDsKKyAgICBjb25zdCBSZWZQdHI8S2V5SGFuZGxlPiYga2V5SGFuZGxlKGNvbnN0IEtleUlE
VHlwZSYpIGNvbnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXMoQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXMpIGNvbnN0OwogICAgIEtleVN0YXR1c1ZlY3RvciBjb252ZXJ0VG9K
U0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5cy5pc0VtcHR5KCk7IH0KIAogICAgIGF1dG8gYmVnaW4oKSB7IHJldHVybiBtX2tl
eXMuYmVnaW4oKTsgfQogICAgIGF1dG8gYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMuYmVn
aW4oKTsgfQpAQCAtMTIwLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICBhdXRvIHJlbmQoKSBjb25z
dCB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0
cjxLZXk+PiBtX2tleXM7CisgICAgVmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+PiBtX2tleXM7CiB9
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVByb3h5OwpAQCAtMTI5LDcgKzE1MSw3IEBAIGNsYXNzIENE
TUluc3RhbmNlUHJveHk7CiAvLyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0
b3JzKS4KIGNsYXNzIENETVByb3h5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENETVBy
b3h5PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heEtleVdhaXRU
aW1lU2Vjb25kcyA9IDVfczsKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4S2V5V2Fp
dFRpbWVTZWNvbmRzID0gN19zOwogCiAgICAgdmlydHVhbCB+Q0RNUHJveHkoKSA9IGRlZmF1bHQ7
CiAKQEAgLTE0MywxMyArMTY1LDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAg
ICBWZWN0b3I8dWludDhfdD4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkg
Y29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3Q7Ci0gICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKLSAgICBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IHRyeVdh
aXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Ci0gICAgT3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3Q7CisgICAgUmVmUHRyPEtleUhhbmRsZT4ga2V5SGFuZGxlKGNvbnN0IEtl
eUlEVHlwZSYpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IEtleUlEVHlwZSYp
IGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgS2V5SURUeXBlJikg
Y29uc3Q7CisgICAgT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IHRyeVdhaXRGb3JLZXlIYW5kbGUo
Y29uc3QgS2V5SURUeXBlJikgY29uc3Q7CisgICAgT3B0aW9uYWw8UmVmPEtleUhhbmRsZT4+IGdl
dE9yV2FpdEZvcktleUhhbmRsZShjb25zdCBLZXlJRFR5cGUmKSBjb25zdDsKKyAgICBPcHRpb25h
bDxLZXlIYW5kbGVWYWx1ZVZhcmlhbnQ+IGdldE9yV2FpdEZvcktleVZhbHVlKGNvbnN0IEtleUlE
VHlwZSYpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKICAg
ICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAgY29uc3QgQ0RNSW5zdGFu
Y2VQcm94eSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CiAKIHByaXZh
dGU6CiAgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKQEAgLTE4NCwxNCArMjA4LDI0
IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxDRE1Qcm94eUZh
Y3RvcnkqPiYgcmVnaXN0ZXJlZEZhY3RvcmllcygpOwogfTsKIAorY2xhc3MgQ0RNSW5zdGFuY2VQ
cm94eTsKKwogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkgOiBwdWJsaWMgQ0RNSW5zdGFu
Y2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uUHJveHks
IFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgeyBtX2luc3RhbmNlLmNsZWFyKCk7IH0K
KyAgICB2b2lkIHJlbW92ZUZyb21JbnN0YW5jZVByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICBD
RE1JbnN0YW5jZVNlc3Npb25Qcm94eShDRE1JbnN0YW5jZVByb3h5Jik7CisgICAgY29uc3QgV2Vh
a1B0cjxDRE1JbnN0YW5jZVByb3h5PiYgY2RtSW5zdGFuY2VQcm94eSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdGFuY2U7IH0KKworcHJpdmF0ZToKKyAgICBXZWFrUHRyPENETUluc3RhbmNlUHJveHk+
IG1faW5zdGFuY2U7CiB9OwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5h
Z2VtZW50IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCiAvLyBmcm9tICJyZWFs
IENETSIgc3RhdGUgY2hhbmdlcyB0byBKUy4KLWNsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJs
aWMgQ0RNSW5zdGFuY2UgeworY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBDRE1JbnN0
YW5jZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlUHJveHk+IHsKIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBDRE1JbnN0YW5jZVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQog
ICAgIHsKQEAgLTIwNyw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxLZXlz
RnJvbShjb25zdCBLZXlTdG9yZSYpOwogCiAgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1ldGhv
ZHMgLSBtYWluIHRocmVhZCBvbmx5LgotICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBjb25z
dCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAgY29u
c3QgUmVmUHRyPENETVByb3h5PiYgcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQo
KSk7IHJldHVybiBtX2NkbVByb3h5OyB9CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zvcktl
eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlwdG9y
c1dhaXRpbmdGb3JLZXkgPiAwOyB9CiAgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIqIHBs
YXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQogCkBA
IC0yMTUsNiArMjQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXko
KTsKICAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CiAKKyAgICB2b2lkIHJlbW92ZVNl
c3Npb24oY29uc3QgQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkmIHNlc3Npb24pIHsgbV9zZXNzaW9u
cy5yZW1vdmUoc2Vzc2lvbik7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZURlY3J5cHRpb25S
ZXNvdXJjZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGll
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRp
ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWU4ODVhZDZl
NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDRE1VdGlsaXRpZXMuaCIKKworI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ0RNVXRp
bGl0aWVzIHsKKworUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIC8vIEZhaWwgb24gbGFyZ2UgYnVmZmVycyB3aG9z
ZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgICBz
aXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgaWYgKHNpemUgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qg
b2JqZWN0IChpZiBhbnkpLgorICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsK
KyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgaWYgKCFKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworfTsKKworfTsK
KworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzRmNTE1YjBiZDJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVz
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7
CisKK25hbWVzcGFjZSBDRE1VdGlsaXRpZXMgeworCitSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJz
ZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJik7CisKK307CisKK307CisKKyNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmlu
ZGV4IDY1MzIyZWQ5OWU5Ny4uZTZjYzIyZDkwYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCkBAIC0zNCwzNiArMzQsMTkgQEAKICNpbmNsdWRlICJDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rpb25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vz
c2lvblR5cGUuaCIKKyNpbmNsdWRlICJDRE1VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbml0RGF0
YVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNl
SlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICAvLyBGYWlsIG9u
IGxhcmdlIGJ1ZmZlcnMgd2hvc2Ugc2l6ZSBkb2Vzbid0IGZpdCBpbnRvIGEgMzItYml0IHVuc2ln
bmVkIGludGVnZXIuCi0gICAgc2l6ZV90IHNpemUgPSBidWZmZXIuc2l6ZSgpOwotICAgIGlmIChz
aXplID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMgSlNPTiwg
cmV0dXJuaW5nIHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KLSAgICBTdHJpbmcganNvbiB7IGJ1
ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAg
IGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkgfHwgIXZhbHVlLT5hc09i
amVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBvYmpl
Y3Q7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vu
c2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQorc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxSZWZQdHI8S2V5SGFuZGxlPj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmpl
Y3QmIHJvb3QpCiB7CiAgICAgLy8gSWYgdGhlICdrZXlzJyBrZXkgaXMgcHJlc2VudCBpbiB0aGUg
cm9vdCBvYmplY3QsIHBhcnNlIHRoZSBKU09OIGZ1cnRoZXIKICAgICAvLyBhY2NvcmRpbmcgdG8g
dGhlIHNwZWNpZmllZCAnbGljZW5zZScgZm9ybWF0LgpAQCAtNzYsNyArNTksNyBAQCBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpT
T046Ok9iamVjdCYgcm9vdAogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEtleT4+
IGRlY29kZWRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVjb2RlZEtleXM7
CiAgICAgYm9vbCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwg
a2V5c0FycmF5LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZh
bHVlKSB7CiAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC05
MSwxMSArNzQsMTIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNl
TGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QKICAgICAgICAgICAgIGlmICgh
a2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5nZXRTdHJp
bmcoImsiLCBrZXlWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7Ci0gICAgICAg
ICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0pKQorICAgICAg
ICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBr
ZXlIYW5kbGVWYWx1ZURhdGE7CisgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2Rl
KGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUs
IHsga2V5SGFuZGxlVmFsdWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6Y3JlYXRlKENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShr
ZXlWYWx1ZURhdGEpKSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5SGFuZGxl
OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShr
ZXlJRERhdGEpLCBXVEZNb3ZlKGtleUhhbmRsZVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtNDAxLDcg
KzM4NSw3IEBAIGJvb2wgQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzdXBwb3J0c1Nlc3Npb25zKCkgY29u
c3QKIGJvb2wgQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzdXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21T
dHJpbmcmIGluaXREYXRhVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RGF0YSkgY29uc3QK
IHsKICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5pdERhdGEgYnVmZmVyIGFzIGFuIEpTT04gb2JqZWN0
IGluIGtleWlkcyBjYXNlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShp
bml0RGF0YVR5cGUsICJrZXlpZHMiKSAmJiBwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJrZXlpZHMi
KSAmJiBDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdChpbml0RGF0YSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1ZmZlciBhcyBDRU5D
IGluaXREYXRhLgpAQCAtNDE4LDcgKzQwMiw3IEBAIGJvb2wgQ0RNUHJpdmF0ZUNsZWFyS2V5Ojpz
dXBwb3J0c0luaXREYXRhKGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgY29uc3QKIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVSZXNwb25zZShj
b25zdCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlKSBjb25zdAogewogICAgIC8vIFZhbGlkYXRlIHRo
ZSByZXNwb25zZSBidWZmZXIgYXMgYW4gSlNPTiBvYmplY3QuCi0gICAgaWYgKCFwYXJzZUpTT05P
YmplY3QocmVzcG9uc2UpKQorICAgIGlmICghQ0RNVXRpbGl0aWVzOjpwYXJzZUpTT05PYmplY3Qo
cmVzcG9uc2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiByZXNwb25z
ZS5jb3B5KCk7CkBAIC01MDcsNyArNDkxLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgfTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJvb3QgPSBwYXJzZUpTT05PYmplY3QocmVzcG9uc2UpOworICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHJvb3QgPSBDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7CiAgICAg
aWYgKCFyb290KSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24g
JXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1
Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKQEAgLTUyNCw3ICs1MDgsNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogICAgICAgICBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+IGNoYW5nZWRLZXlzOwog
ICAgICAgICBpZiAoa2V5c0NoYW5nZWQpIHsKICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbShtX2tl
eVN0b3JlKTsKKyAgICAgICAgICAgIHBhcmVudEluc3RhbmNlKCkubWVyZ2VLZXlzRnJvbShtX2tl
eVN0b3JlKTsKICAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9K
U0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKQEAgLTUzNCw3ICs1MTgsNyBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYg
c2Vzc2lvbklkLCBMaWNlbnNlVAogCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3ds
ZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7CiAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktl
eSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFsbCBrbm93biBr
ZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX3BhcmVudEluc3RhbmNl
LnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBwYXJlbnRJbnN0YW5jZSgp
LnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOwogICAgICAgICBtX2tleVN0b3JlLnJlbW92
ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6Om51bGxvcHQs
IFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTkyLDcgKzU3
Niw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRh
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtl
eVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlzLCBhbmQgdGhl
IG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LgotICAgIEtl
eVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVh
c2VkKCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUu
YWxsS2V5c0FzKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZCk7CiAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7CiAgICAgICAgIC8vIENvbnN0cnVj
dCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVh
dGluZyBhICdraWRzJyBhcnJheQpAQCAtNjIxLDYgKzYwNSwxMyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikKIHsK
IH0KIAorQ0RNSW5zdGFuY2VDbGVhcktleSYgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnBh
cmVudEluc3RhbmNlKCkgY29uc3QKK3sKKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VQ
cm94eSgpOworICAgIEFTU0VSVChpbnN0YW5jZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENE
TUluc3RhbmNlQ2xlYXJLZXkmPigqaW5zdGFuY2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNs
ZWFyS2V5LmgKaW5kZXggOGJmMzYyNzJhZGI2Li4xMDc5MDg2MDgwZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuaApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8U3Ry
aW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIH07CiAK
LWNsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94
eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKK2NsYXNzIENE
TUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSB7CiBwdWJs
aWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNl
Q2xlYXJLZXkoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiBjbGFzcyBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eSB7
CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoQ0RNSW5zdGFuY2VDbGVh
cktleSYgcGFyZW50KQotICAgICAgICA6IG1fcGFyZW50SW5zdGFuY2UocGFyZW50KSB7IH0KKyAg
ICAgICAgOiBDRE1JbnN0YW5jZVNlc3Npb25Qcm94eShwYXJlbnQpIHsgfQogICAgIHZvaWQgcmVx
dWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwg
UmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOwog
ICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQg
bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExv
YWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CkBAIC0xMTYsOCArMTE2LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJl
bW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBzdG9yZVJlY29yZE9m
S2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmluYWw7CiBwcml2YXRlOgorICAgIENETUluc3RhbmNl
Q2xlYXJLZXkmIHBhcmVudEluc3RhbmNlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgbV9zZXNzaW9u
SUQ7Ci0gICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsKICAgICBLZXlT
dG9yZSBtX2tleVN0b3JlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCA4
YWM5YWIzMThlNmYuLmRjNzAxNmQwODA0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAK
QEAgLTUwLDYgKzUwLDkgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAjaW5jbHVk
ZSAiV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNpZiBFTkFCTEUoVEhVTkRF
UikKKyNpbmNsdWRlICJXZWJLaXRUaHVuZGVyRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjZW5kaWYK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMjc1LDYgKzI3OCwyMiBAQCBib29sIGlu
aXRpYWxpemVHU3RyZWFtZXIoT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+JiYgb3B0aW9ucykKICAg
ICByZXR1cm4gaXNHU3RyZWFtZXJJbml0aWFsaXplZDsKIH0KIAorI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKQorLy8gV2ViTSBkb2VzIG5vdCBzcGVjaWZ5IGEg
cHJvdGVjdGlvbiBzeXN0ZW0gSUQgc28gaXQgY2FuIGhhcHBlbiB0aGF0CisvLyB0aGUgQ2xlYXJL
ZXkgZGVjcnlwdG9yIGlzIGNob3NlbiBpbnN0ZWFkIG9mIHRoZSBUaHVuZGVyIG9uZSBmb3IKKy8v
IFdpZGV2aW5lIChhbmQgdmljZXZlcnNhKSB3aGljaCBjYW4gY2FuIGNyZWF0ZSBjaGFvcy4gVGhp
cyBpcyBhbgorLy8gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IGluIHJ1biB0aW1lIGlmIHdl
IHByZWZlciB0byByYW5rIGhpZ2hlcgorLy8gVGh1bmRlciBvciBDbGVhcktleS4gSWYgd2Ugd2Fu
dCB0byBydW4gdGVzdHMgd2l0aCBUaHVuZGVyLCB3ZSBuZWVkCisvLyB0byBzZXQgdGhpcyBlbnZp
cm9ubWVudCB2YXJpYWJsZSB0byBUaHVuZGVyIGFuZCB0aGF0IGRlY3J5cHRvciB3aWxsCisvLyBi
ZSByYW5rZWQgaGlnaGVyIHdoZW4gdGhlcmUgaXMgbm8gcHJvdGVjdGlvbiBzeXN0ZW0gc2V0IChh
cyBpbgorLy8gV2ViTSkuCitib29sIGlzVGh1bmRlclJhbmtlZCgpCit7CisgICAgY29uc3QgY2hh
ciogdmFsdWUgPSBnX2dldGVudigiV0VCS0lUX0dTVF9FTUVfUkFOS19QUklPUklUWSIpOworICAg
IHJldHVybiB2YWx1ZSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiVGh1bmRlciIp
OworfQorI2VuZGlmCisKIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0
RWxlbWVudHMoKQogewogICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lcigpKQpAQCAtMjgzLDcg
KzMwMiwxMSBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1l
bnRzKCkKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxs
X29uY2Uob25jZUZsYWcsIFtdIHsKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAg
ICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAid2Via2l0Y2xlYXJrZXkiLCBHU1RfUkFO
S19QUklNQVJZICsgMTAwLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBUKTsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdGNsZWFya2V5IiwgR1NUX1JBTktf
UFJJTUFSWSArIDIwMCwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCk7CisjaWYgRU5BQkxF
KFRIVU5ERVIpCisgICAgICAgIHVuc2lnbmVkIHRodW5kZXJSYW5rID0gaXNUaHVuZGVyUmFua2Vk
KCkgPyAzMDAgOiAxMDA7CisgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIsICJ3
ZWJraXR0aHVuZGVyIiwgR1NUX1JBTktfUFJJTUFSWSArIHRodW5kZXJSYW5rLCBXRUJLSVRfVFlQ
RV9NRURJQV9USFVOREVSX0RFQ1JZUFQpOworI2VuZGlmCiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCkBAIC0zODIsNiArNDA1LDEzIEBAIFJlZjxTaGFyZWRCdWZmZXI+IEdzdE1h
cHBlZEJ1ZmZlcjo6Y3JlYXRlU2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoKnRoaXMpOwogfQogCitWZWN0b3I8dWludDhfdD4gR3N0TWFwcGVkQnVmZmVyOjpj
cmVhdGVWZWN0b3IoKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgdmVjdG9y
LmFwcGVuZChkYXRhKCksIHNpemUoKSk7CisgICAgcmV0dXJuIHZlY3RvcjsKK30KKwogYm9vbCBp
c0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZShjb25zdCBjaGFyKiBuYW1lKQogewogICAgIEdSZWZQ
dHI8R3N0UGx1Z2luPiBwbHVnaW4gPSBhZG9wdEdSZWYoZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2lu
KGdzdF9yZWdpc3RyeV9nZXQoKSwgbmFtZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCmluZGV4
IGExZTU2MjQ0YjE3ZS4uMmQ1NjkyYzlkYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBA
IC03Myw2ICs3Myw5IEBAIGJvb2wgaW5pdGlhbGl6ZUdTdHJlYW1lcihPcHRpb25hbDxWZWN0b3I8
U3RyaW5nPj4mJiA9IFdURjo6bnVsbG9wdCk7CiBib29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRS
ZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiB1bnNpZ25lZCBnZXRHc3RQbGF5RmxhZyhjb25zdCBj
aGFyKiBuaWNrKTsKIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1l
Jik7CisjaWYgRU5BQkxFKFRIVU5ERVIpCitib29sIGlzVGh1bmRlclJhbmtlZCgpOworI2VuZGlm
CiAKIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZt
ZWRpYVRpbWUpCiB7CkBAIC04MSw2ICs4NCwxMSBAQCBpbmxpbmUgR3N0Q2xvY2tUaW1lIHRvR3N0
Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogCiBjbGFzcyBHc3RNYXBwZWRC
dWZmZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R3N0TWFwcGVkQnVmZmVyPiB7CiBw
dWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBH
UmVmUHRyPEdzdEJ1ZmZlcj4mIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCisgICAgeworICAg
ICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlci5nZXQoKSwgZmxhZ3MpOworICAgIH0KKwogICAgIHN0
YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoR3N0QnVmZmVyKiBidWZmZXIsIEdz
dE1hcEZsYWdzIGZsYWdzKQogICAgIHsKICAgICAgICAgR3N0TWFwSW5mbyBpbmZvOwpAQCAtMTA2
LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9CiAgICAgYm9vbCBpc1NoYXJhYmxlKCkg
Y29uc3QgeyByZXR1cm4gIShtX2luZm8uZmxhZ3MgJiBHU1RfTUFQX1dSSVRFKTsgfQogICAgIFJl
ZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1ZmZlcigpOworICAgIFZlY3Rvcjx1aW50OF90
PiBjcmVhdGVWZWN0b3IoKTsKIAogcHJpdmF0ZToKICAgICBHc3RNYXBwZWRCdWZmZXIoR3N0QnVm
ZmVyKiBidWZmZXIsIEdzdE1hcEluZm8mJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBhMzRjNTUyMmFjZTEuLjRiZjFhZTJiMzcy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
QEAgLTIwOSw2ICsyMDksMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KSkKICAgICAgICAgbV93cGVWaWRlb1Bs
YW5lRGlzcGxheURtYUJ1Zi5yZXNldCh3cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZfc291
cmNlX2NyZWF0ZShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkp
LmJhY2tlbmQoKSkpOwogI2VuZGlmCisgICAgc3RhdGljIHVuc2lnbmVkIHRpbWVzID0gMDsKKyAg
ICArK3RpbWVzOworICAgIEdTVF9JTkZPKCJjcmVhdGVkIG1lZGlhIHBsYXllciBwcml2YXRlICgl
dSB0aW1lcykgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0i
LCB0aW1lcyk7CisgICAgZnByaW50ZihzdGRlcnIsICJjYWx2YXJpcyBjcmVhdGVkIG1lZGlhIHBs
YXllciBwcml2YXRlICgldSB0aW1lcylcbiIsIHRpbWVzKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKQEAgLTE1OTYsNiAr
MTYwMCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUo
R3N0RWxlbWVudCogcGlwZWxpbmUpCiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogeworICAgIGlmIChHU1Rf
TUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SICYmICFnX3N0cmNtcDAo
Z19nZXRlbnYoIldFQktJVF9DUkFTSF9PTl9HU1RSRUFNRVJfRVJST1IiKSwgInN5bmMiKSkgewor
ICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyOworICAgICAgICBHVW5pcXVlT3V0UHRy
PGdjaGFyPiBkZWJ1ZzsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwg
JmVyci5vdXRQdHIoKSwgJmRlYnVnLm91dFB0cigpKTsKKyAgICAgICAgR1NUX0VSUk9SKCJFcnJv
ciAlZCBmcm9tICVzOiAlcyAodXJsPSVzKSIsIGVyci0+Y29kZSwgR1NUX01FU1NBR0VfU1JDX05B
TUUobWVzc2FnZSksIGVyci0+bWVzc2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJ3ZWJraXQtdmlkZW8tc3lu
Yy1lcnJvciIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKICAgICBp
ZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVD
VElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW1D
b2xsZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1f
Y29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CkBAIC0xNzYzLDcgKzE3
NzYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKGZsb2F0
IHZvbHVtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1lKTsKLSAgICBnc3Rfc3RyZWFtX3ZvbHVt
ZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9S
TUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsKKyAgICBnc3Rfc3RyZWFt
X3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xV
TUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPigwKSk7CiB9CiAKIGZsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lKCkgY29uc3QKQEAgLTE4NzAsNiArMTg4
Myw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdz
dE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgIndlYmtpdC12aWRlby5lcnJvciIpOwogCisgICAgICAgIGlmICghZ19zdHJjbXAwKGdfZ2V0
ZW52KCJXRUJLSVRfQ1JBU0hfT05fR1NUUkVBTUVSX0VSUk9SIiksICJhc3luYyIpKQorICAgICAg
ICAgICAgQ1JBU0goKTsKKwogICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGU6OkVtcHR5OwogICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NU
UkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQpCiAgICAgICAgICAg
ICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RS
RUFNX0VSUk9SX1dST05HX1RZUEUpCkBAIC0zNTE4LDcgKzM1MzQsOCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERh
dGEmJiBpbml0RAogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50
ZXJlZCBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKyAg
ICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
ICVzIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEucGF5bG9hZENvbnRhaW5lclR5cGUoKS51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOwog
ICAgICAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhcyIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGluaXREYXRhLnBheWxvYWQoKS0+ZGF0YSgpKSwgaW5pdERhdGEucGF5bG9hZCgp
LT5zaXplKCkpOwogICAgICAgICB3ZWFrVGhpcy0+bV9wbGF5ZXItPmluaXRpYWxpemF0aW9uRGF0
YUVuY291bnRlcmVkKGluaXREYXRhLnBheWxvYWRDb250YWluZXJUeXBlKCksIGluaXREYXRhLnBh
eWxvYWQoKS0+dHJ5Q3JlYXRlQXJyYXlCdWZmZXIoKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAppbmRleCAwZjlhNjhkMmNkNmQuLjc5YzRkMDJk
M2YxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCkBAIC0z
MywxNyArMzMsMjkgQEAKIAogI2luY2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKIAorI2lmIEVO
QUJMRShUSFVOREVSKQorI2luY2x1ZGUgIkNETVRodW5kZXIuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHZvaWQgQ0RNRmFjdG9yeTo6cGxhdGZvcm1SZWdpc3RlckZhY3Rvcmll
cyhWZWN0b3I8Q0RNRmFjdG9yeSo+JiBmYWN0b3JpZXMpCiB7CiAgICAgZmFjdG9yaWVzLmFwcGVu
ZCgmQ0RNRmFjdG9yeUNsZWFyS2V5OjpzaW5nbGV0b24oKSk7CisjaWYgRU5BQkxFKFRIVU5ERVIp
CisgICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9yeVRodW5kZXI6OnNpbmdsZXRvbigpKTsK
KyNlbmRpZgogfQogCiBWZWN0b3I8Q0RNUHJveHlGYWN0b3J5Kj4gQ0RNUHJveHlGYWN0b3J5Ojpw
bGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVzKCkKIHsKICAgICBWZWN0b3I8Q0RNUHJveHlGYWN0b3J5
Kj4gZmFjdG9yaWVzOworI2lmIEVOQUJMRShUSFVOREVSKQorICAgIGZhY3Rvcmllcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDIpOworICAgIGZhY3Rvcmllcy51bmNoZWNrZWRBcHBlbmQoJkNETUZh
Y3RvcnlUaHVuZGVyOjpzaW5nbGV0b24oKSk7CisjZWxzZQogICAgIGZhY3Rvcmllcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworI2VuZGlmCiAgICAgZmFjdG9yaWVzLnVuY2hlY2tlZEFwcGVu
ZCgmQ0RNUHJveHlGYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKICAgICByZXR1cm4gZmFj
dG9yaWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKaW5kZXggZTc3
MzJhYjk0ZTdhLi5jZmU0YzdhYTUxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFy
S2V5LmNwcApAQCAtMTIxLDExICsxMjEsMTQgQEAgYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5j
U2V0RGVjcnlwdGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQogICAgIFZlY3Rv
cjx1aW50OF90PiBrZXlJRFZlYzsKICAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQsIGluLmtl
eUlEU2l6ZUluQnl0ZXMpOwogCi0gICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5KGtl
eUlEVmVjKTsKKyAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXlWYWx1ZShrZXlJRFZl
Yyk7CiAgICAgaWYgKCFrZXlEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
Z2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KGdDcnlwdEhhbmRs
ZSgpLCBrZXlEYXRhLT5kYXRhKCksIGtleURhdGEtPnNpemUoKSkpIHsKKyAgICBBU1NFUlQoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8dWludDhfdD4+KGtleURhdGEudmFsdWUoKSkpOwor
ICAgIGF1dG8mIGtleURhdGFWYWx1ZSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5RGF0
YS52YWx1ZSgpKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2Np
cGhlcl9zZXRrZXkoZ0NyeXB0SGFuZGxlKCksIGtleURhdGFWYWx1ZS5kYXRhKCksIGtleURhdGFW
YWx1ZS5zaXplKCkpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3Bn
X3N0cmVycm9yKGNpcGhlckVycm9yKSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eVRodW5kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eVRo
dW5kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTFmOGZm
ZTk1ZTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eVRodW5kZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eVRodW5kZXIuaCIKKwor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKQorCisjaW5jbHVk
ZSAiQ0RNVGh1bmRlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxvcGVuX2Nk
bV9hZGFwdGVyLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCitHU1RfREVCVUdfQ0FU
RUdPUllfRVhURVJOKHdlYmtpdE1lZGlhVGh1bmRlckRlY3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNk
ZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhVGh1bmRlckRlY3J5cHREZWJ1Z0NhdGVn
b3J5CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTk9URTogWW91VHViZSAyMDE5IEVNRSBj
b25mb3JtYW5jZSB0ZXN0cyBleHBlY3QgdGhpcyB0byBiZSA+PTVzLgorY29uc3QgV1RGOjpTZWNv
bmRzIHNfbGljZW5zZUtleVJlc3BvbnNlVGltZW91dCA9IFdURjo6U2Vjb25kcyg2KTsKKworQm94
UHRyPE9wZW5DRE1TZXNzaW9uPiBDRE1Qcm94eVRodW5kZXI6OmdldERlY3J5cHRpb25TZXNzaW9u
KGNvbnN0IERlY3J5cHRpb25Db250ZXh0JiBpbikgY29uc3QKK3sKKyAgICBhdXRvIG1hcHBlZEtl
eUlEID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW4ua2V5SURCdWZmZXIsIEdTVF9NQVBfUkVB
RCk7CisgICAgaWYgKCFtYXBwZWRLZXlJRCkgeworICAgICAgICBHU1RfRVJST1IoIkZhaWxlZCB0
byBtYXAga2V5IElEIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBhdXRvIGtleUlEID0gbWFwcGVkS2V5SUQtPmNyZWF0ZVZlY3RvcigpOworCisgICAgYXV0
byBrZXlIYW5kbGUgPSBnZXRPcldhaXRGb3JLZXlIYW5kbGUoa2V5SUQpOworICAgIGlmICgha2V5
SGFuZGxlLmhhc1ZhbHVlKCkgfHwgIWtleUhhbmRsZS52YWx1ZSgpLT5pc1N0YXR1c0N1cnJlbnRs
eVZhbGlkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgS2V5SGFuZGxlVmFsdWVW
YXJpYW50IGtleURhdGEgPSBrZXlIYW5kbGUudmFsdWUoKS0+dmFsdWUoKTsKKyAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb3hQdHI8T3BlbkNETVNlc3Npb24+PihrZXlEYXRhKSk7
CisKKyAgICBCb3hQdHI8T3BlbkNETVNlc3Npb24+IGtleVZhbHVlID0gV1RGOjpnZXQ8Qm94UHRy
PE9wZW5DRE1TZXNzaW9uPj4oa2V5RGF0YSk7CisKKyAgICBpZiAoIWtleVZhbHVlKSB7CisgICAg
ICAgIGtleVZhbHVlID0gY3JlYXRlQm94UHRyKG9wZW5jZG1fZ2V0X3N5c3RlbV9zZXNzaW9uKCZz
dGF0aWNfY2FzdDxjb25zdCBDRE1JbnN0YW5jZVRodW5kZXIqPihpbnN0YW5jZSgpKS0+dGh1bmRl
clN5c3RlbSgpLCBrZXlJRC5kYXRhKCksCisgICAgICAgICAgICBrZXlJRC5zaXplKCksIHNfbGlj
ZW5zZUtleVJlc3BvbnNlVGltZW91dC5taWxsaXNlY29uZHNBczx1aW50MzJfdD4oKSkpOworICAg
ICAgICBBU1NFUlQoa2V5VmFsdWUpOworICAgICAgICAvLyB0YWtlVmFsdWVJZkRpZmZlcmVudCB0
YWtlcyBhbmQgci12YWx1ZSByZWYgb2YKKyAgICAgICAgLy8gS2V5SGFuZGxlVmFsdWVWYXJpYW50
LiBXZSB3YW50IHRvIGNvcHkgdGhlIEJveFB0ciB3aGVuCisgICAgICAgIC8vIHBhc3NpbmcgaXQg
ZG93biwgY2F1c2Ugd2UgcmV0dXJuIGl0IGZyb20gdGhpcyBtZXRob2QuIElmIHdlCisgICAgICAg
IC8vIGp1c3QgZG9uJ3QgbW92ZSB0aGUgQm94UHRyLCB0aGUgY29uc3QgQm94UHRyJiBjb25zdHJ1
Y3RvcgorICAgICAgICAvLyB3aWxsIGJlIHVzZWQuIEFueXdheSwgbGV0dGluZyB0aGF0IHN1YnRs
ZXR5IHRvIHRoZSBjb21waWxlcgorICAgICAgICAvLyBjb3VsZCBiZSBtaXNsZWFkaW5nIHNvIHdl
IGV4cGxpY2l0bHkgaW52b2tlIHRoZSBjb25zdAorICAgICAgICAvLyBCb3hQdHImIGNvbnN0cnVj
dG9yIGhlcmUuCisgICAgICAgIGtleUhhbmRsZS52YWx1ZSgpLT50YWtlVmFsdWVJZkRpZmZlcmVu
dChCb3hQdHI8T3BlbkNETVNlc3Npb24+KGtleVZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGtleVZhbHVlOworfQorCitib29sIENETVByb3h5VGh1bmRlcjo6ZGVjcnlwdChDRE1Qcm94eVRo
dW5kZXI6OkRlY3J5cHRpb25Db250ZXh0JiBpbnB1dCkKK3sKKyAgICBCb3hQdHI8T3BlbkNETVNl
c3Npb24+IHNlc3Npb24gPSBnZXREZWNyeXB0aW9uU2Vzc2lvbihpbnB1dCk7CisgICAgaWYgKCFz
ZXNzaW9uKSB7CisgICAgICAgIEdTVF9FUlJPUigidGhlcmUgaXMgbm8gdmFsaWQgc2Vzc2lvbiB0
byBkZWNyeXB0IGZvciB0aGUgcHJvdmlkZWQga2V5IElEIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBHU1RfVFJBQ0UoImRlY3J5cHRpbmciKTsKKyAgICAvLyBEZWNyeXB0
IGNpcGhlci4KKyAgICBPcGVuQ0RNRXJyb3IgZXJyb3JDb2RlID0gb3BlbmNkbV9nc3RyZWFtZXJf
c2Vzc2lvbl9kZWNyeXB0KHNlc3Npb24tPmdldCgpLCBpbnB1dC5kYXRhQnVmZmVyLCBpbnB1dC5z
dWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5udW1TdWJzYW1wbGVzLAorICAgICAgICBpbnB1dC5pdkJ1
ZmZlciwgaW5wdXQua2V5SURCdWZmZXIsIDApOworICAgIGlmIChlcnJvckNvZGUpIHsKKyAgICAg
ICAgR1NUX0VSUk9SKCJkZWNyeXB0aW9uIGZhaWxlZCwgZXJyb3IgY29kZSAlWCIsIGVycm9yQ29k
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkgJiYgRU5BQkxFKFRIVU5ERVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5VGh1bmRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eVRodW5kZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBkZTYzNTU1NGQ0MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNUHJveHlUaHVuZGVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKQorCisj
aW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiQ0RNVGh1bmRlci5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Db25k
aXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9ySGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFRoaXMgaXMgdGhlIHRocmVhZC1zYWZlIEFQSSB0aGF0IGRlY29kZSB0aHJlYWRz
IHNob3VsZCB1c2UgdG8gbWFrZSB1c2Ugb2YgYSBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3Mg
Q0RNUHJveHlUaHVuZGVyIGZpbmFsIDogcHVibGljIENETVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8Q0RNUHJveHlUaHVuZGVyLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdl
cj4geworcHVibGljOgorICAgIENETVByb3h5VGh1bmRlcihjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSkKKyAgICAgICAgOiBtX2tleVN5c3RlbShrZXlTeXN0ZW0pIHsgfQorICAgIHZpcnR1YWwgfkNE
TVByb3h5VGh1bmRlcigpID0gZGVmYXVsdDsKKworICAgIHN0cnVjdCBEZWNyeXB0aW9uQ29udGV4
dCB7CisgICAgICAgIEdzdEJ1ZmZlcioga2V5SURCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciog
aXZCdWZmZXI7CisgICAgICAgIEdzdEJ1ZmZlciogZGF0YUJ1ZmZlcjsKKyAgICAgICAgR3N0QnVm
ZmVyKiBzdWJzYW1wbGVzQnVmZmVyOworICAgICAgICBzaXplX3QgbnVtU3Vic2FtcGxlczsKKyAg
ICB9OworCisgICAgYm9vbCBkZWNyeXB0KERlY3J5cHRpb25Db250ZXh0Jik7CisgICAgY29uc3Qg
U3RyaW5nJiBrZXlTeXN0ZW0oKSB7IHJldHVybiBtX2tleVN5c3RlbTsgfQorCitwcml2YXRlOgor
ICAgIEJveFB0cjxPcGVuQ0RNU2Vzc2lvbj4gZ2V0RGVjcnlwdGlvblNlc3Npb24oY29uc3QgRGVj
cnlwdGlvbkNvbnRleHQmKSBjb25zdDsKKyAgICBTdHJpbmcgbV9rZXlTeXN0ZW07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBFTkFCTEUoVEhVTkRFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNVGh1bmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRodW5kZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTUyYWY0ZjdjMzY5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1U
aHVuZGVyLmNwcApAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ0RNVGh1bmRlci5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
RU5BQkxFKFRIVU5ERVIpCisKKyNpbmNsdWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgi
CisjaW5jbHVkZSAiQ0RNUHJveHlUaHVuZGVyLmgiCisjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rpb25z
LmgiCisjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKKyNpbmNsdWRlICJDRE1VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiTWVkaWFLZXlNZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgIk1lZGlhS2V5
U3RhdHVzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmICghZGVmaW5lZChHU1RfRElTQUJM
RV9HU1RfREVCVUcpKQorR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRNZWRpYVRodW5k
ZXJEZWNyeXB0RGVidWdDYXRlZ29yeSk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRN
ZWRpYVRodW5kZXJEZWNyeXB0RGVidWdDYXRlZ29yeQorI2VuZGlmCisKK25hbWVzcGFjZSB7CisK
Ky8vIFdlIGFyZSBkb2luZyB0aGlzIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXMuCit1c2luZyBUaHVuZGVyS2V5U3RhdHVzID0gS2V5U3RhdHVzOwor
Cit9CisKK3N0YXRpYyBMaWNlbnNlVHlwZSB0aHVuZGVyTGljZW5zZVR5cGUoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uOjpMaWNlbnNlVHlwZSBsaWNlbnNlVHlwZSkKK3sKKyAgICBzd2l0Y2gg
KGxpY2Vuc2VUeXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246Okxp
Y2Vuc2VUeXBlOjpUZW1wb3Jhcnk6CisgICAgICAgIHJldHVybiBUZW1wb3Jhcnk7CisgICAgY2Fz
ZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50VXNh
Z2VSZWNvcmQ6CisgICAgICAgIHJldHVybiBQZXJzaXN0ZW50VXNhZ2VSZWNvcmQ7CisgICAgY2Fz
ZSBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OkxpY2Vuc2VUeXBlOjpQZXJzaXN0ZW50TGlj
ZW5zZToKKyAgICAgICAgcmV0dXJuIFBlcnNpc3RlbnRMaWNlbnNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVGVtcG9yYXJ5Owor
ICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgQ0RNSW5zdGFuY2VTZXNz
aW9uOjpTZXNzaW9uTG9hZEZhaWx1cmUgc2Vzc2lvbkxvYWRGYWlsdXJlRnJvbVRodW5kZXIoY29u
c3QgU3RyaW5nVmlldyYgbG9hZFN0YXR1cykKK3sKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiTm9u
ZSIpCisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVy
ZTo6Tm9uZTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiU2Vzc2lvbk5vdEZvdW5kIikKKyAgICAg
ICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6U2Vzc2lvbkxvYWRGYWlsdXJlOjpOb1Nlc3Np
b25EYXRhOworICAgIGlmIChsb2FkU3RhdHVzID09ICJNaXNtYXRjaGVkU2Vzc2lvblR5cGUiKQor
ICAgICAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9uTG9hZEZhaWx1cmU6Ok1p
c21hdGNoZWRTZXNzaW9uVHlwZTsKKyAgICBpZiAobG9hZFN0YXR1cyA9PSAiUXVvdGFFeGNlZWRl
ZCIpCisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OlNlc3Npb25Mb2FkRmFpbHVy
ZTo6UXVvdGFFeGNlZWRlZDsKKyAgICByZXR1cm4gQ0RNSW5zdGFuY2VTZXNzaW9uOjpTZXNzaW9u
TG9hZEZhaWx1cmU6Ok90aGVyOworfQorCisKK0NETUZhY3RvcnlUaHVuZGVyJiBDRE1GYWN0b3J5
VGh1bmRlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q0RNRmFj
dG9yeVRodW5kZXI+IHNfZmFjdG9yeTsKKyAgICByZXR1cm4gc19mYWN0b3J5OworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8Q0RNUHJpdmF0ZT4gQ0RNRmFjdG9yeVRodW5kZXI6OmNyZWF0ZUNETShjb25z
dCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNLZXlTeXN0ZW0oa2V5
U3lzdGVtKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q0RNUHJpdmF0ZVRodW5kZXI+KGtleVN5
c3RlbSk7Cit9CisKK1JlZlB0cjxDRE1Qcm94eT4gQ0RNRmFjdG9yeVRodW5kZXI6OmNyZWF0ZUNE
TVByb3h5KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQoreworICAgIEFTU0VSVChzdXBwb3J0c0tl
eVN5c3RlbShrZXlTeXN0ZW0pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETVByb3h5VGh1
bmRlcihrZXlTeXN0ZW0pKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIENETUZhY3RvcnlU
aHVuZGVyOjpzdXBwb3J0ZWRLZXlTeXN0ZW1zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtl
eVN5c3RlbXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc3Rk
OjpzdHJpbmcgZW1wdHlTdHJpbmc7CisgICAgICAgIC8vIFllcywgdGhpcyBpcyByaWdodCwgMCBt
ZWFucyBzdXBwb3J0ZWQsIGhlbmNlIHNvbWV0aGluZyBlbHNlIG1lYW5zIG5vdCBzdXBwb3J0ZWQu
CisgICAgICAgIGlmICghb3BlbmNkbV9pc190eXBlX3N1cHBvcnRlZChHU3RyZWFtZXJFTUVVdGls
aXRpZXM6OnNfV2lkZXZpbmVLZXlTeXN0ZW0sIGVtcHR5U3RyaW5nLmNfc3RyKCkpKQorICAgICAg
ICAgICAgc3VwcG9ydGVkS2V5U3lzdGVtcy5hcHBlbmQoR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpz
X1dpZGV2aW5lS2V5U3lzdGVtKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGlmIChzdXBwb3J0
ZWRLZXlTeXN0ZW1zLmlzRW1wdHkoKSAmJiBpc1RodW5kZXJSYW5rZWQoKSkgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEX1dJVEhfTUVTU0FHRSgiVGh1bmRlciBpcyB1cC1yYW5rZWQg
YXMgcHJlZmVycmVkIGRlY3J5cHRvciBidXQgVGh1bmRlciBpcyBub3Qgc3VwcG9ydGluZyBhbnkg
ZW5jcnlwdGlvbiBzeXN0ZW0uIElzICIKKyAgICAgICAgICAgICAgICAiVGh1bmRlciBydW5uaW5n
PyBBcmUgdGhlIHBsdWdpbnMgYnVpbHQ/Iik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0pOwor
ICAgIHJldHVybiBzdXBwb3J0ZWRLZXlTeXN0ZW1zOworfQorCitib29sIENETUZhY3RvcnlUaHVu
ZGVyOjpzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3sKKyAgICBy
ZXR1cm4gQ0RNRmFjdG9yeVRodW5kZXI6OnNpbmdsZXRvbigpLnN1cHBvcnRlZEtleVN5c3RlbXMo
KS5jb250YWlucyhrZXlTeXN0ZW0pOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0
ZVRodW5kZXI6OnN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMgVmVjdG9yPEF0b21TdHJpbmc+IHN1
cHBvcnRlZEluaXREYXRhVHlwZXM7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsK
KyAgICAgICAgc3VwcG9ydGVkSW5pdERhdGFUeXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMp
OworICAgICAgICBzdXBwb3J0ZWRJbml0RGF0YVR5cGVzLnVuY2hlY2tlZEFwcGVuZChBdG9tU3Ry
aW5nKCJrZXlpZHMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlwZXMudW5jaGVja2Vk
QXBwZW5kKEF0b21TdHJpbmcoImNlbmMiKSk7CisgICAgICAgIHN1cHBvcnRlZEluaXREYXRhVHlw
ZXMudW5jaGVja2VkQXBwZW5kKEF0b21TdHJpbmcoIndlYm0iKSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHN1cHBvcnRlZEluaXREYXRhVHlwZXM7Cit9CisKK2Jvb2wgQ0RNUHJpdmF0ZVRodW5kZXI6
OnN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgYXVkaW9DYXBhYmlsaXR5IDog
Y29uZmlndXJhdGlvbi5hdWRpb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9p
c190eXBlX3N1cHBvcnRlZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBhdWRpb0NhcGFiaWxp
dHkuY29udGVudFR5cGUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGZvciAoYXV0byYgdmlkZW9DYXBhYmlsaXR5IDogY29uZmlndXJhdGlvbi52
aWRlb0NhcGFiaWxpdGllcykgeworICAgICAgICBpZiAob3BlbmNkbV9pc190eXBlX3N1cHBvcnRl
ZChtX2tleVN5c3RlbS51dGY4KCkuZGF0YSgpLCB2aWRlb0NhcGFiaWxpdHkuY29udGVudFR5cGUu
dXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitWZWN0b3I8QXRvbVN0cmluZz4gQ0RNUHJpdmF0ZVRodW5kZXI6OnN1
cHBvcnRlZFJvYnVzdG5lc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHsgZW1wdHlBdG9tKCkg
fTsKK30KKworQ0RNUmVxdWlyZW1lbnQgQ0RNUHJpdmF0ZVRodW5kZXI6OmRpc3RpbmN0aXZlSWRl
bnRpZmllcnNSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgY29u
c3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QKK3sKKyAgICByZXR1cm4gQ0RNUmVxdWlyZW1lbnQ6
Ok9wdGlvbmFsOworfQorCitDRE1SZXF1aXJlbWVudCBDRE1Qcml2YXRlVGh1bmRlcjo6cGVyc2lz
dGVudFN0YXRlUmVxdWlyZW1lbnQoY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYsIGNv
bnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0Cit7CisgICAgcmV0dXJuIENETVJlcXVpcmVtZW50
OjpPcHRpb25hbDsKK30KKworYm9vbCBDRE1Qcml2YXRlVGh1bmRlcjo6ZGlzdGluY3RpdmVJZGVu
dGlmaWVyc0FyZVVuaXF1ZVBlck9yaWdpbkFuZENsZWFyYWJsZShjb25zdCBDRE1LZXlTeXN0ZW1D
b25maWd1cmF0aW9uJikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZlB0cjxD
RE1JbnN0YW5jZT4gQ0RNUHJpdmF0ZVRodW5kZXI6OmNyZWF0ZUluc3RhbmNlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlVGh1bmRlcihtX2tleVN5c3RlbSkpOworfQor
Cit2b2lkIENETVByaXZhdGVUaHVuZGVyOjpsb2FkQW5kSW5pdGlhbGl6ZSgpCit7CisgICAgLy8g
Tm8tb3AuCit9CisKK2Jvb2wgQ0RNUHJpdmF0ZVRodW5kZXI6OnN1cHBvcnRzU2VydmVyQ2VydGlm
aWNhdGVzKCkgY29uc3QKK3sKKyAgICAvLyBTZXJ2ZXIgY2VydGlmaWNhdGVzIGFyZSBub3Qgc3Vw
cG9ydGVkLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDRE1Qcml2YXRlVGh1bmRlcjo6
c3VwcG9ydHNTZXNzaW9ucygpIGNvbnN0Cit7CisgICAgLy8gU2Vzc2lvbnMgYXJlIHN1cHBvcnRl
ZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcml2YXRlVGh1bmRlcjo6c3VwcG9y
dHNJbml0RGF0YShjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIGNvbnN0IFNoYXJlZEJ1
ZmZlciYgaW5pdERhdGEpIGNvbnN0Cit7CisgICAgLy8gVmFsaWRhdGUgdGhlIGluaXREYXRhIGJ1
ZmZlciBhcyBhbiBKU09OIG9iamVjdCBpbiBrZXlpZHMgY2FzZS4KKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAia2V5aWRzIikgJiYgQ0RNVXRpbGl0
aWVzOjpwYXJzZUpTT05PYmplY3QoaW5pdERhdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0YSBidWZmZXIgYXMgQ0VOQyBpbml0RGF0YS4gRklY
TUU6IFZhbGlkYXRlIGl0IGlzIGFjdHVhbGx5IENFTkMuCisgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSAmJiAhaW5pdERhdGEuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbml0RGF0
YSBidWZmZXIgYXMgV2ViTSBpbml0RGF0YS4KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoaW5pdERhdGFUeXBlLCAid2VibSIpICYmICFpbml0RGF0YS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8U2hh
cmVkQnVmZmVyPiBDRE1Qcml2YXRlVGh1bmRlcjo6c2FuaXRpemVSZXNwb25zZShjb25zdCBTaGFy
ZWRCdWZmZXImIHJlc3BvbnNlKSBjb25zdAoreworICAgIHJldHVybiByZXNwb25zZS5jb3B5KCk7
Cit9CisKK09wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZVRodW5kZXI6OnNhbml0aXplU2Vzc2lv
bklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAoreworICAgIHJldHVybiBzZXNzaW9u
SWQ7Cit9CisKK0NETUluc3RhbmNlVGh1bmRlcjo6Q0RNSW5zdGFuY2VUaHVuZGVyKGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShrZXlTeXN0ZW0pCisgICAg
LCBtX3RodW5kZXJTeXN0ZW0ob3BlbmNkbV9jcmVhdGVfc3lzdGVtKGtleVN5c3RlbS51dGY4KCku
ZGF0YSgpKSkKKyAgICAsIG1fa2V5U3lzdGVtKGtleVN5c3RlbSkKK3sKK30KKwordm9pZCBDRE1J
bnN0YW5jZVRodW5kZXI6OmluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlT
eXN0ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxvd1Bl
cnNpc3RlbnRTdGF0ZSwKKyAgICBTdWNjZXNzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBj
YWxsYmFjayhTdWNjZWVkZWQpOworfQorCit2b2lkIENETUluc3RhbmNlVGh1bmRlcjo6c2V0U2Vy
dmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBjZXJ0aWZpY2F0ZSwgIFN1Y2Nlc3ND
YWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIE9wZW5DRE1FcnJvciBlcnJvciA9IG9wZW5jZG1f
c3lzdGVtX3NldF9zZXJ2ZXJfY2VydGlmaWNhdGUobV90aHVuZGVyU3lzdGVtLmdldCgpLCBjb25z
dF9jYXN0PHVpbnQ4X3QqPihjZXJ0aWZpY2F0ZS0+ZGF0YUFzVUludDhQdHIoKSksCisgICAgICAg
IGNlcnRpZmljYXRlLT5zaXplKCkpOworICAgIGNhbGxiYWNrKCFlcnJvciA/IFN1Y2NlZWRlZCA6
IEZhaWxlZCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VUaHVuZGVyOjpzZXRTdG9yYWdlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ0RNSW5z
dGFuY2VTZXNzaW9uVGh1bmRlcjo6Q0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlcihDRE1JbnN0YW5j
ZVRodW5kZXImIGluc3RhbmNlKQorICAgIDogQ0RNSW5zdGFuY2VTZXNzaW9uUHJveHkoaW5zdGFu
Y2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3RodW5kZXJTZXNzaW9u
Q2FsbGJhY2tzLnByb2Nlc3NfY2hhbGxlbmdlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24q
LCB2b2lkKiB1c2VyRGF0YSwgY29uc3QgY2hhcltdLCBjb25zdCB1aW50OF90IGNoYWxsZW5nZVtd
LAorICAgICAgICBjb25zdCB1aW50MTZfdCBjaGFsbGVuZ2VMZW5ndGgpIHsKKyAgICAgICAgR1NU
X0RFQlVHKCJHb3QgJ2NoYWxsZW5nZScgT0NETSBub3RpZmljYXRpb24iKTsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbc2Vzc2lvbiA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PENETUluc3Rh
bmNlU2Vzc2lvblRodW5kZXIqPih1c2VyRGF0YSkpLCBidWZmZXIgPSBXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNyZWF0ZShjaGFsbGVuZ2UsCisgICAgICAgICAgICBjaGFsbGVuZ2VMZW5ndGgpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHNlc3Npb24tPmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFdU
Rk1vdmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH07CisgICAgbV90aHVuZGVyU2Vzc2lv
bkNhbGxiYWNrcy5rZXlfdXBkYXRlX2NhbGxiYWNrID0gW10oT3BlbkNETVNlc3Npb24qLCB2b2lk
KiB1c2VyRGF0YSwgY29uc3QgdWludDhfdCBrZXlJRERhdGFbXSwgY29uc3QgdWludDhfdCBrZXlJ
RExlbmd0aCkgeworICAgICAgICBHU1RfREVCVUcoIkdvdCAna2V5IHVwZGF0ZWQnIE9DRE0gbm90
aWZpY2F0aW9uIik7CisgICAgICAgIEtleUlEVHlwZSBrZXlJRDsKKyAgICAgICAga2V5SUQuYXBw
ZW5kKGtleUlERGF0YSwga2V5SURMZW5ndGgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtz
ZXNzaW9uID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRl
cio+KHVzZXJEYXRhKSksIGtleUlEID0gV1RGTW92ZShrZXlJRCldKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgc2Vzc2lvbi0+a2V5VXBkYXRlZENhbGxiYWNrKFdURk1vdmUoa2V5SUQpKTsKKyAgICAgICAg
fSk7CisgICAgfTsKKyAgICBtX3RodW5kZXJTZXNzaW9uQ2FsbGJhY2tzLmtleXNfdXBkYXRlZF9j
YWxsYmFjayA9IFtdKGNvbnN0IE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEpIHsKKyAg
ICAgICAgR1NUX0RFQlVHKCJHb3QgJ2FsbCBrZXlzIHVwZGF0ZWQnIE9DRE0gbm90aWZpY2F0aW9u
Iik7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vha1B0cihzdGF0
aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyKj4odXNlckRhdGEpKV0oKSB7CisgICAg
ICAgICAgICBpZiAoIXNlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgc2Vzc2lvbi0+a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9
OworICAgIG1fdGh1bmRlclNlc3Npb25DYWxsYmFja3MuZXJyb3JfbWVzc2FnZV9jYWxsYmFjayA9
IFtdKE9wZW5DRE1TZXNzaW9uKiwgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIgbWVzc2FnZVtd
KSB7CisgICAgICAgIEdTVF9FUlJPUigiR290ICdlcnJvcicgT0NETSBub3RpZmljYXRpb246ICVz
IiwgbWVzc2FnZSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Nlc3Npb24gPSBtYWtlV2Vh
a1B0cihzdGF0aWNfY2FzdDxDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyKj4odXNlckRhdGEpKSwg
YnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZSwKKyAgICAgICAg
ICAgIHN0cmxlbihtZXNzYWdlKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXNlc3Np
b24pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2Vzc2lvbi0+ZXJyb3JD
YWxsYmFjayhXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICB9KTsKKyAgICB9OworfQorCitSZWZQ
dHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZVRodW5kZXI6OmNyZWF0ZVNlc3Npb24o
KQoreworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyPiBuZXdTZXNzaW9uID0g
YWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvblRodW5kZXIoKnRoaXMpKTsKKyAgICBBU1NF
UlQobmV3U2Vzc2lvbik7CisgICAgdHJhY2tTZXNzaW9uKCpuZXdTZXNzaW9uKTsKKyAgICByZXR1
cm4gbmV3U2Vzc2lvbjsKK30KKworY2xhc3MgUGFyc2VkUmVzcG9uc2VNZXNzYWdlIHsKKworcHVi
bGljOgorICAgIFBhcnNlZFJlc3BvbnNlTWVzc2FnZShjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVy
PiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgU3RyaW5nVmlldyBwYXlsb2FkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90
IHR5cGVQb3NpdGlvbiA9IHBheWxvYWQuZmluZCgiOlR5cGU6Iik7CisgICAgICAgIFN0cmluZ1Zp
ZXcgcmVxdWVzdFR5cGUocGF5bG9hZC5jaGFyYWN0ZXJzOCgpLCB0eXBlUG9zaXRpb24gIT0gbm90
Rm91bmQgPyB0eXBlUG9zaXRpb24gOiAwKTsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gMHU7
CisgICAgICAgIGlmICghcmVxdWVzdFR5cGUuaXNFbXB0eSgpICYmIHJlcXVlc3RUeXBlLmxlbmd0
aCgpICE9IHBheWxvYWQubGVuZ3RoKCkpCisgICAgICAgICAgICBvZmZzZXQgPSB0eXBlUG9zaXRp
b24gKyA2OworCisgICAgICAgIGlmIChyZXF1ZXN0VHlwZS5sZW5ndGgoKSA9PSAxKQorICAgICAg
ICAgICAgbV90eXBlID0gbWFrZU9wdGlvbmFsKHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhS2V5
TWVzc2FnZVR5cGU+KHJlcXVlc3RUeXBlLnRvSW50KCkpKTsKKworICAgICAgICBtX3BheWxvYWQg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwYXlsb2FkLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIHBh
eWxvYWQubGVuZ3RoKCkgLSBvZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaGFzUGF5bG9hZCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fcGF5bG9hZCk7IH0KKyAgICBjb25z
dCBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9hZCgpIGNvbnN0JiB7IEFTU0VSVChtX3BheWxvYWQp
OyByZXR1cm4gbV9wYXlsb2FkLnZhbHVlKCk7IH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5
bG9hZCgpICYgeyBBU1NFUlQobV9wYXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgpOyB9
CisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV90
eXBlKTsgfQorICAgIFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgdHlwZSgpIGNvbnN0IHsg
QVNTRVJUKG1fdHlwZSk7IHJldHVybiBtX3R5cGUudmFsdWUoKTsgfQorICAgIFdlYkNvcmU6Ok1l
ZGlhS2V5TWVzc2FnZVR5cGUgdHlwZU9yKFdlYkNvcmU6Ok1lZGlhS2V5TWVzc2FnZVR5cGUgYWx0
ZXJuYXRlKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPyBtX3R5cGUudmFsdWUoKSA6IGFsdGVybmF0
ZTsgfQorCitwcml2YXRlOgorICAgIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiBtX3BheWxv
YWQ7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6TWVkaWFLZXlNZXNzYWdlVHlwZT4gbV90eXBlOwor
fTsKKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpjaGFsbGVuZ2VHZW5lcmF0ZWRD
YWxsYmFjayhSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBQYXJzZWRSZXNw
b25zZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7CisKKyAgICBpZiAoIW1f
Y2hhbGxlbmdlQ2FsbGJhY2tzLmlzRW1wdHkoKSkgeworICAgICAgICBtX21lc3NhZ2UgPSBXVEZN
b3ZlKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICBtX25lZWRzSW5k
aXZpZHVhbGl6YXRpb24gPSBwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZSgpID09IENETUluc3Rh
bmNlU2Vzc2lvbjo6TWVzc2FnZVR5cGU6OkluZGl2aWR1YWxpemF0aW9uUmVxdWVzdDsKKworICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDogbV9jaGFsbGVuZ2VDYWxs
YmFja3MpCisgICAgICAgICAgICBjaGFsbGVuZ2VDYWxsYmFjaygpOworICAgICAgICBtX2NoYWxs
ZW5nZUNhbGxiYWNrcy5jbGVhcigpOworICAgIH0gZWxzZSBpZiAoIW1fc2Vzc2lvbkNoYW5nZWRD
YWxsYmFja3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5nZWRD
YWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgICAgICBzZXNzaW9u
Q2hhbmdlZENhbGxiYWNrKHRydWUsIHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkuY29w
eVJlZigpKTsKKyAgICAgICAgbV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5jbGVhcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX2NsaWVudCAmJiBwYXJzZWRSZXNwb25zZU1lc3NhZ2Uu
aGFzVHlwZSgpKSB7CisgICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2Uoc3RhdGljX2Nh
c3Q8Q0RNTWVzc2FnZVR5cGU+KHBhcnNlZFJlc3BvbnNlTWVzc2FnZS50eXBlKCkpLAorICAgICAg
ICAgICAgICAgIFdURk1vdmUocGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSkpOworICAg
ICAgICB9CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSB8
fCAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9TdHJpbmcoQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3RhdHVz
KSB7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlOgorICAg
ICAgICByZXR1cm4gIlVzYWJsZSI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1czo6RXhwaXJlZDoKKyAgICAgICAgcmV0dXJuICJFeHBpcmVkIjsKKyAgICBjYXNlIENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuICJSZWxl
YXNlZCI7CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0cHV0UmVz
dHJpY3RlZDoKKyAgICAgICAgcmV0dXJuICJPdXRwdXRSZXN0cmljdGVkIjsKKyAgICBjYXNlIENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpPdXRwdXREb3duc2NhbGVkOgorICAgICAgICBy
ZXR1cm4gIk91dHB1dERvd25zY2FsZWQiOworICAgIGNhc2UgQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM6OlN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiAiU3RhdHVzUGVuZGluZyI7
CisgICAgY2FzZSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6SW50ZXJuYWxFcnJvcjoK
KyAgICAgICAgcmV0dXJuICJJbnRlcm5hbEVycm9yIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9Cit9
CisjZW5kaWYKKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgQ0RNSW5zdGFuY2VTZXNz
aW9uVGh1bmRlcjo6c3RhdHVzKGNvbnN0IEtleUlEVHlwZSYga2V5SUQpIGNvbnN0Cit7CisgICAg
VGh1bmRlcktleVN0YXR1cyBzdGF0dXMgPSBtX3Nlc3Npb24gJiYgIW1fc2Vzc2lvbklELmlzRW1w
dHkoKSA/IG9wZW5jZG1fc2Vzc2lvbl9zdGF0dXMobV9zZXNzaW9uLmdldCgpLCBrZXlJRC5kYXRh
KCksIGtleUlELnNpemUoKSkgOiBTdGF0dXNQZW5kaW5nOworCisgICAgc3dpdGNoIChzdGF0dXMp
IHsKKyAgICBjYXNlIFVzYWJsZToKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpVc2FibGU7CisgICAgY2FzZSBFeHBpcmVkOgorICAgICAgICByZXR1cm4gQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OkV4cGlyZWQ7CisgICAgY2FzZSBSZWxlYXNlZDoK
KyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDsK
KyAgICBjYXNlIE91dHB1dFJlc3RyaWN0ZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6T3V0cHV0UmVzdHJpY3RlZDsKKyAgICBjYXNlIE91dHB1dERvd25z
Y2FsZWQ6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6T3V0
cHV0RG93bnNjYWxlZDsKKyAgICBjYXNlIFN0YXR1c1BlbmRpbmc6CisgICAgICAgIHJldHVybiBD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6U3RhdHVzUGVuZGluZzsKKyAgICBjYXNlIElu
dGVybmFsRXJyb3I6CisgICAgICAgIHJldHVybiBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
czo6SW50ZXJuYWxFcnJvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpJbnRl
cm5hbEVycm9yOworICAgIH0KK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpr
ZXlVcGRhdGVkQ2FsbGJhY2soS2V5SURUeXBlJiYga2V5SUQpCit7CisgICAgR1NUX01FTURVTVAo
InVwZGF0ZWQga2V5Iiwga2V5SUQuZGF0YSgpLCBrZXlJRC5zaXplKCkpOworCisgICAgYXV0byBr
ZXlTdGF0dXMgPSBzdGF0dXMoa2V5SUQpOworICAgIEdTVF9ERUJVRygidXBkYXRlZCB3aXRoIHdp
dGgga2V5IHN0YXR1cyAlcyIsIHRvU3RyaW5nKGtleVN0YXR1cykpOworICAgIG1fZG9lc0tleVN0
b3JlTmVlZE1lcmdpbmcgfD0gbV9rZXlTdG9yZS5hZGQoS2V5SGFuZGxlOjpjcmVhdGUoa2V5U3Rh
dHVzLCBXVEZNb3ZlKGtleUlEKSwgQm94UHRyPE9wZW5DRE1TZXNzaW9uPigpKSk7Cit9CisKK3Zv
aWQgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlcjo6a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpCit7
CisgICAgR1NUX0RFQlVHKCJ1cGRhdGUgZG9uZSIpOworICAgIGlmIChtX2RvZXNLZXlTdG9yZU5l
ZWRNZXJnaW5nKSB7CisgICAgICAgIG1fZG9lc0tleVN0b3JlTmVlZE1lcmdpbmcgPSBmYWxzZTsK
KyAgICAgICAgYXV0byBpbnN0YW5jZSA9IGNkbUluc3RhbmNlVGh1bmRlcigpOworICAgICAgICBp
ZiAoaW5zdGFuY2UpCisgICAgICAgICAgICBpbnN0YW5jZS0+bWVyZ2VLZXlzRnJvbShtX2tleVN0
b3JlKTsKKyAgICB9CisKKyAgICBpZiAobV9zZXNzaW9uQ2hhbmdlZENhbGxiYWNrcy5pc0VtcHR5
KCkgJiYgbV9jbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUtleVN0YXR1c2VzKG1f
a2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25DaGFuZ2VkQ2FsbGJhY2sgOiBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzKQorICAgICAgICBzZXNzaW9uQ2hhbmdlZENhbGxiYWNrKHRydWUs
IG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MuY2xlYXIoKTsKK30KKwor
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjplcnJvckNhbGxiYWNrKFJlZlB0cjxTaGFy
ZWRCdWZmZXI+JiYgbWVzc2FnZSkKK3sKKyAgICBHU1RfRVJST1IoIkNETSBlcnJvciIpOworICAg
IEdTVF9NRU1EVU1QKCJlcnJvciBkdW1wIiwgbWVzc2FnZS0+ZGF0YUFzVUludDhQdHIoKSwgbWVz
c2FnZS0+c2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYWxsZW5nZUNhbGxiYWNrIDog
bV9jaGFsbGVuZ2VDYWxsYmFja3MpCisgICAgICAgIGNoYWxsZW5nZUNhbGxiYWNrKCk7CisgICAg
bV9jaGFsbGVuZ2VDYWxsYmFja3MuY2xlYXIoKTsKKworICAgIGZvciAoYXV0byYgc2Vzc2lvbkNo
YW5nZWRDYWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgIHNlc3Np
b25DaGFuZ2VkQ2FsbGJhY2soZmFsc2UsIG1lc3NhZ2UuY29weVJlZigpKTsKKyAgICBtX3Nlc3Np
b25DaGFuZ2VkQ2FsbGJhY2tzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
VGh1bmRlcjo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUgbGljZW5zZVR5cGUsIGNvbnN0IEF0
b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YVNoYXJl
ZEJ1ZmZlciwKKyAgICBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6IFVVSUQgb3Igc3lzdGVtIElEPworICAg
IGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0YW5jZVRodW5kZXIoKTsKKyAgICBBU1NFUlQoaW5zdGFu
Y2UpOworICAgIG1faW5pdERhdGEgPSBJbml0RGF0YShpbnN0YW5jZS0+a2V5U3lzdGVtKCksIFdU
Rk1vdmUoaW5pdERhdGFTaGFyZWRCdWZmZXIpKTsKKworICAgIEdTVF9UUkFDRSgiR29pbmcgdG8g
cmVxdWVzdCBhIG5ldyBzZXNzaW9uIGlkLCBpbml0IGRhdGEgc2l6ZSAlbHUiLCBtX2luaXREYXRh
LnBheWxvYWQoKS0+c2l6ZSgpKTsKKyAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhIiwgbV9pbml0
RGF0YS5wYXlsb2FkKCktPmRhdGFBc1VJbnQ4UHRyKCksIG1faW5pdERhdGEucGF5bG9hZCgpLT5z
aXplKCkpOworCisgICAgT3BlbkNETVNlc3Npb24qIHNlc3Npb24gPSBudWxscHRyOworICAgIG9w
ZW5jZG1fY29uc3RydWN0X3Nlc3Npb24oJmluc3RhbmNlLT50aHVuZGVyU3lzdGVtKCksIHRodW5k
ZXJMaWNlbnNlVHlwZShsaWNlbnNlVHlwZSksIGluaXREYXRhVHlwZS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLAorICAgICAgICBtX2luaXREYXRhLnBheWxvYWQoKS0+ZGF0YUFzVUludDhQdHIoKSwg
bV9pbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSwgbnVsbHB0ciwgMCwgJm1fdGh1bmRlclNlc3Np
b25DYWxsYmFja3MsIHRoaXMsICZzZXNzaW9uKTsKKyAgICBpZiAoIXNlc3Npb24pIHsKKyAgICAg
ICAgR1NUX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHNlc3Npb24iKTsKKyAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gaW5pdERhdGEgPSBtX2luaXREYXRhLnBheWxvYWQoKTsKKyAgICAgICAg
Y2FsbGJhY2soaW5pdERhdGEucmVsZWFzZU5vbk51bGwoKSwgeyB9LCBmYWxzZSwgRmFpbGVkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Nlc3Npb24ucmVzZXQoc2Vzc2lvbik7Cisg
ICAgbV9zZXNzaW9uSUQgPSBTdHJpbmc6OmZyb21VVEY4KG9wZW5jZG1fc2Vzc2lvbl9pZChtX3Nl
c3Npb24uZ2V0KCkpKTsKKworICAgIGF1dG8gZ2VuZXJhdGVDaGFsbGVuZ2UgPSBbdGhpcywgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW5pdERhdGEgPSBt
X2luaXREYXRhLnBheWxvYWQoKTsKKyAgICAgICAgaWYgKG1fc2Vzc2lvbklELmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgR1NUX0VSUk9SKCJjb3VsZCBub3QgY3JlYXRlIHNlc3Npb24gaWQiKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrKGluaXREYXRhLnJlbGVhc2VOb25OdWxsKCksIHsgfSwgZmFs
c2UsIEZhaWxlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWlzVmFsaWQoKSkgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoImNyZWF0ZWQgaW52YWxp
ZCBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBj
YWxsYmFjayhpbml0RGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBtX3Nlc3Npb25JRCwgZmFsc2UsIEZh
aWxlZCk7CisgICAgICAgICAgICByZW1vdmVGcm9tSW5zdGFuY2VQcm94eSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1NUX0RFQlVHKCJjcmVhdGVkIHZhbGlk
IHNlc3Npb24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY2FsbGJh
Y2sobV9tZXNzYWdlLmNvcHlSZWYoKS5yZWxlYXNlTm9uTnVsbCgpLCBtX3Nlc3Npb25JRCwgbV9u
ZWVkc0luZGl2aWR1YWxpemF0aW9uLCBTdWNjZWVkZWQpOworICAgIH07CisKKyAgICBpZiAobV9z
ZXNzaW9uSUQuaXNFbXB0eSgpIHx8IGlzVmFsaWQoKSkKKyAgICAgICAgZ2VuZXJhdGVDaGFsbGVu
Z2UoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2hhbGxlbmdlQ2FsbGJhY2tzLmFwcGVuZChXVEZN
b3ZlKGdlbmVyYXRlQ2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1
bmRlcjo6c2Vzc2lvbkZhaWx1cmUoKQoreworICAgIGZvciAoYXV0byYgc2Vzc2lvbkNoYW5nZWRD
YWxsYmFjayA6IG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFja3MpCisgICAgICAgIHNlc3Npb25DaGFu
Z2VkQ2FsbGJhY2soZmFsc2UsIG51bGxwdHIpOworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
a3MuY2xlYXIoKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1
ZmZlcj4mJiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChzZXNzaW9uSUQsIHNlc3Npb25JRCA9PSBtX3Nlc3Npb25JRCk7CisK
KyAgICBHU1RfVFJBQ0UoIlVwZGF0aW5nIHNlc3Npb24gJXMiLCBzZXNzaW9uSUQudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzLmFwcGVuZChbdGhpcywgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYm9vbCBzdWNjZXNzLCBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiYmIHJlc3BvbnNlTWVzc2FnZSkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXJlc3Bv
bnNlTWVzc2FnZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghbV9rZXlTdG9yZS5pc0VtcHR5
KCkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBtX2tleVN0b3JlLmNvbnZlcnRU
b0pTS2V5U3RhdHVzVmVjdG9yKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNz
VmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBVc2luZyBKU09OIHJlcG9uc2UgbWVzc2FnZXMgaXMgbXVjaCBjbGVhbmVyIHRo
YW4gdXNpbmcgc3RyaW5nIHByZWZpeGVzLCBJIGJlbGlldmUgdGhlcmUKKyAgICAgICAgICAgICAg
ICAvLyB3aWxsIGV2ZW4gYmUgb3RoZXIgcGFydHMgb2YgdGhlIHNwZWMgd2hlcmUgbm90IGhhdmlu
ZyBzdHJ1Y3R1cmVkIGRhdGEgd2lsbCBiZSBiYWQuCisgICAgICAgICAgICAgICAgUGFyc2VkUmVz
cG9uc2VNZXNzYWdlIHBhcnNlZFJlc3BvbnNlTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpOworICAg
ICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZU1lc3NhZ2UuaGFzUGF5bG9hZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlZjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2UgPSBXVEZNb3ZlKHBh
cnNlZFJlc3BvbnNlTWVzc2FnZS5wYXlsb2FkKCkpOworICAgICAgICAgICAgICAgICAgICBHU1Rf
REVCVUcoImdvdCBtZXNzYWdlIG9mIHNpemUgJWx1IiwgbWVzc2FnZS0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgR1NUX01FTURVTVAoIm1lc3NhZ2UiLCBtZXNzYWdlLT5kYXRhQXNVSW50
OFB0cigpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhm
YWxzZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1ha2VfcGFpcihwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZU9yKE1lZGlhS2V5TWVz
c2FnZVR5cGU6OkxpY2Vuc2VSZXF1ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
VEZNb3ZlKG1lc3NhZ2UpKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEdTVF9FUlJPUigibWVzc2FnZSBvZiBz
aXplICVsdSBpbmNvcnJlY3RseSBmb3JtYXR0ZWQiLCByZXNwb25zZU1lc3NhZ2UgPyByZXNwb25z
ZU1lc3NhZ2UtPnNpemUoKSA6IDApOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxz
ZSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVl
OjpGYWlsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigidXBkYXRlIGxpY2Vuc2UgcmVwb3J0ZWQgZXJy
b3Igc3RhdGUiKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CisgICAgICAg
IH0KKyAgICB9KTsKKyAgICBpZiAoIW1fc2Vzc2lvbiB8fCBtX3Nlc3Npb25JRC5pc0VtcHR5KCkg
fHwgb3BlbmNkbV9zZXNzaW9uX3VwZGF0ZShtX3Nlc3Npb24uZ2V0KCksIHJlc3BvbnNlLT5kYXRh
QXNVSW50OFB0cigpLCByZXNwb25zZS0+c2l6ZSgpKSkKKyAgICAgICAgc2Vzc2lvbkZhaWx1cmUo
KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpsb2FkU2Vzc2lvbihMaWNl
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNz
aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNlc3Npb25JRCwg
c2Vzc2lvbklEID09IG1fc2Vzc2lvbklEKTsKKworICAgIG1fc2Vzc2lvbkNoYW5nZWRDYWxsYmFj
a3MuYXBwZW5kKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShib29sIHN1Y2Nl
c3MsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VNZXNzYWdlKSBtdXRhYmxlIHsKKyAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIGlmICghcmVzcG9uc2VNZXNzYWdlKQorICAgICAgICAgICAgICAgIGNhbGxiYWNr
KG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6
Ok5vbmUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVz
aW5nIEpTT04gcmVwb25zZSBtZXNzYWdlcyBpcyBtdWNoIGNsZWFuZXIgdGhhbiB1c2luZyBzdHJp
bmcgcHJlZml4ZXMsIEkgYmVsaWV2ZSB0aGVyZQorICAgICAgICAgICAgICAgIC8vIHdpbGwgZXZl
biBiZSBvdGhlciBwYXJ0cyBvZiB0aGUgc3BlYyB3aGVyZSBub3QgaGF2aW5nIHN0cnVjdHVyZWQg
ZGF0YSB3aWxsIGJlIGJhZC4KKyAgICAgICAgICAgICAgICBQYXJzZWRSZXNwb25zZU1lc3NhZ2Ug
cGFyc2VkUmVzcG9uc2VNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7CisgICAgICAgICAgICAgICAg
aWYgKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5oYXNQYXlsb2FkKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZSA9IFdURk1vdmUocGFyc2VkUmVzcG9uc2VN
ZXNzYWdlLnBheWxvYWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiZ290IG1l
c3NhZ2Ugb2Ygc2l6ZSAlbHUiLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAg
ICBHU1RfTUVNRFVNUCgibWVzc2FnZSIsIG1lc3NhZ2UtPmRhdGFBc1VJbnQ4UHRyKCksIG1lc3Nh
Z2UtPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCwg
V1RGOjpudWxsb3B0LCBzdGQ6Om1ha2VfcGFpcihwYXJzZWRSZXNwb25zZU1lc3NhZ2UudHlwZU9y
KE1lZGlhS2V5TWVzc2FnZVR5cGU6OkxpY2Vuc2VSZXF1ZXN0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFdURk1vdmUobWVzc2FnZSkpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCwgU2Vzc2lv
bkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBHU1RfRVJST1IoIm1lc3NhZ2Ugb2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9y
bWF0dGVkIiwgcmVzcG9uc2VNZXNzYWdlID8gcmVzcG9uc2VNZXNzYWdlLT5zaXplKCkgOiAwKTsK
KyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6
T3RoZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VNZXNzYWdlRGF0YSA9IHJlc3BvbnNlTWVzc2Fn
ZSA/IHJlc3BvbnNlTWVzc2FnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8g
cmVzcG9uc2VNZXNzYWdlU2l6ZSA9IHJlc3BvbnNlTWVzc2FnZSA/IHJlc3BvbnNlTWVzc2FnZS0+
c2l6ZSgpIDogMDsKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgcmVzcG9uc2UocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KHJlc3BvbnNlTWVzc2FnZURhdGEpLCByZXNwb25zZU1lc3NhZ2VT
aXplKTsKKyAgICAgICAgICAgIEdTVF9FUlJPUigic2Vzc2lvbiAlcyBub3QgbG9hZGVkLCByZWFz
b24gJXMiLCBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpLCByZXNwb25zZS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkLCBzZXNzaW9uTG9hZEZhaWx1cmVGcm9tVGh1
bmRlcihyZXNwb25zZSkpOworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24g
fHwgbV9zZXNzaW9uSUQuaXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl9sb2FkKG1fc2Vzc2lv
bi5nZXQoKSkpCisgICAgICAgIHNlc3Npb25GYWlsdXJlKCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFu
Y2VTZXNzaW9uVGh1bmRlcjo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBD
bG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vz
c2lvbklELCBtX3Nlc3Npb25JRCA9PSBzZXNzaW9uSUQpOworCisgICAgaWYgKG1fc2Vzc2lvbiAm
JiAhbV9zZXNzaW9uSUQuaXNFbXB0eSgpKQorICAgICAgICBvcGVuY2RtX3Nlc3Npb25fY2xvc2Uo
bV9zZXNzaW9uLmdldCgpKTsKKworICAgIHJlbW92ZUZyb21JbnN0YW5jZVByb3h5KCk7CisKKyAg
ICBjYWxsYmFjaygpOworfQorCit2b2lkIENETUluc3RhbmNlU2Vzc2lvblRodW5kZXI6OnJlbW92
ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklELCBMaWNlbnNlVHlwZSwgUmVtb3Zl
U2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Vz
c2lvbklELCBtX3Nlc3Npb25JRCA9PSBzZXNzaW9uSUQpOworCisgICAgbV9zZXNzaW9uQ2hhbmdl
ZENhbGxiYWNrcy5hcHBlbmQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGJv
b2wgc3VjY2VzcywgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpIG11dGFibGUgeworICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9rZXlTdG9y
ZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OlJlbGVhc2VkKSwgV1RGOjpudWxsb3B0LCBTdWNj
ZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBQYXJzZWRSZXNwb25zZU1lc3NhZ2UgcGFyc2VkUmVzcG9uc2VNZXNzYWdlKGJ1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlTWVzc2FnZS5oYXNQYXlsb2FkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZSA9IFdURk1vdmUo
cGFyc2VkUmVzcG9uc2VNZXNzYWdlLnBheWxvYWQoKSk7CisgICAgICAgICAgICAgICAgICAgIEdT
VF9ERUJVRygic2Vzc2lvbiAlcyByZW1vdmVkLCBtZXNzYWdlIGxlbmd0aCAlbHUiLCBtX3Nlc3Np
b25JRC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtleVN0YXR1czo6UmVsZWFzZWQp
LCBXVEZNb3ZlKG1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIm1lc3NhZ2Ug
b2Ygc2l6ZSAlbHUgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGFzIHNlc3Npb24gJXMgcmVtb3ZhbCBh
bnN3ZXIiLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Nlc3Npb25JRC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sobV9rZXlTdG9yZS5hbGxLZXlzQXMoTWVkaWFLZXlTdGF0dXM6OkludGVybmFsRXJyb3Ip
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfV0FSTklO
RygiY291bGQgbm90IHJlbW92ZSBzZXNzaW9uICVzIiwgbV9zZXNzaW9uSUQudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICBjYWxsYmFjayhtX2tleVN0b3JlLmFsbEtleXNBcyhNZWRpYUtleVN0
YXR1czo6SW50ZXJuYWxFcnJvciksIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQp
OworICAgICAgICB9CisgICAgfSk7CisgICAgaWYgKCFtX3Nlc3Npb24gfHwgbV9zZXNzaW9uSUQu
aXNFbXB0eSgpIHx8IG9wZW5jZG1fc2Vzc2lvbl9yZW1vdmUobV9zZXNzaW9uLmdldCgpKSkKKyAg
ICAgICAgc2Vzc2lvbkZhaWx1cmUoKTsKKworICAgIHJlbW92ZUZyb21JbnN0YW5jZVByb3h5KCk7
Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlcjo6c3RvcmVSZWNvcmRPZktleVVz
YWdlKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworT3B0aW9u
YWw8Q0RNSW5zdGFuY2VUaHVuZGVyJj4gQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlcjo6Y2RtSW5z
dGFuY2VUaHVuZGVyKCkgY29uc3QKK3sKKyAgICBhdXRvIGluc3RhbmNlID0gY2RtSW5zdGFuY2VQ
cm94eSgpOworICAgIGlmICghaW5zdGFuY2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENETUluc3RhbmNlVGh1bmRlciY+KCppbnN0YW5jZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1UaHVuZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRodW5kZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUyNWQyNjQ0ODJkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNVGh1bmRlci5oCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKFRIVU5ERVIpCisKKyNpbmNsdWRlICJD
RE1GYWN0b3J5LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAi
Q0RNT3BlbkNETVR5cGVzLmgiCisjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNE
TVByb3h5LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgVGh1bmRlciB7CisKK3N0cnVjdCBUaHVuZGVyU3lzdGVtRGVs
ZXRlciB7CisgICAgT3BlbkNETUVycm9yIG9wZXJhdG9yKCkoT3BlbkNETVN5c3RlbSogcHRyKSBj
b25zdCB7IHJldHVybiBvcGVuY2RtX2Rlc3RydWN0X3N5c3RlbShwdHIpOyB9Cit9OworCit1c2lu
ZyBVbmlxdWVUaHVuZGVyU3lzdGVtID0gc3RkOjp1bmlxdWVfcHRyPE9wZW5DRE1TeXN0ZW0sIFRo
dW5kZXJTeXN0ZW1EZWxldGVyPjsKKwordXNpbmcgVW5pcXVlVGh1bmRlclNlc3Npb24gPSBzdGQ6
OnVuaXF1ZV9wdHI8T3BlbkNETVNlc3Npb24sIFdURjo6Qm94UHRyRGVsZXRlcjxPcGVuQ0RNU2Vz
c2lvbj4+OworCit9IC8vIG5hbWVzcGFjZSBUaHVuZGVyCisKK2NsYXNzIENETUZhY3RvcnlUaHVu
ZGVyIGZpbmFsIDogcHVibGljIENETUZhY3RvcnksIHB1YmxpYyBDRE1Qcm94eUZhY3Rvcnkgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBDRE1GYWN0
b3J5VGh1bmRlciYgc2luZ2xldG9uKCk7CisKKyAgICB2aXJ0dWFsIH5DRE1GYWN0b3J5VGh1bmRl
cigpID0gZGVmYXVsdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1Qcml2YXRlPiBjcmVhdGVD
RE0oY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUmVmUHRyPENETVByb3h5PiBjcmVhdGVDRE1Q
cm94eShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdXBwb3J0ZWRL
ZXlTeXN0ZW1zKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPENETUZhY3RvcnlUaHVuZGVyPjsKKyAgICBDRE1GYWN0b3J5VGh1bmRlcigpID0gZGVm
YXVsdDsKK307CisKK2NsYXNzIENETVByaXZhdGVUaHVuZGVyIGZpbmFsIDogcHVibGljIENETVBy
aXZhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENETVBy
aXZhdGVUaHVuZGVyKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKSA6IG1fa2V5U3lzdGVtKGtleVN5
c3RlbSkgeyB9OworICAgIHZpcnR1YWwgfkNETVByaXZhdGVUaHVuZGVyKCkgPSBkZWZhdWx0Owor
CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IHN1cHBvcnRlZEluaXREYXRhVHlwZXMoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIHN1cHBvcnRzQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1D
b25maWd1cmF0aW9uJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBzdXBwb3J0c0NvbmZpZ3VyYXRp
b25XaXRoUmVzdHJpY3Rpb25zKGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24sIGNvbnN0IENETVJlc3RyaWN0aW9ucyYpIGNvbnN0IGZpbmFsCisgICAgeworICAg
ICAgICByZXR1cm4gc3VwcG9ydHNDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIH0K
KyAgICBib29sIHN1cHBvcnRzU2Vzc2lvblR5cGVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1T
ZXNzaW9uVHlwZSYsIGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRp
b24pIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHNDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBWZWN0b3I8QXRvbVN0cmluZz4gc3VwcG9y
dGVkUm9idXN0bmVzc2VzKCkgY29uc3QgZmluYWw7CisgICAgQ0RNUmVxdWlyZW1lbnQgZGlzdGlu
Y3RpdmVJZGVudGlmaWVyc1JlcXVpcmVtZW50KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRp
b24mLCBjb25zdCBDRE1SZXN0cmljdGlvbnMmKSBjb25zdCBmaW5hbDsKKyAgICBDRE1SZXF1aXJl
bWVudCBwZXJzaXN0ZW50U3RhdGVSZXF1aXJlbWVudChjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1
cmF0aW9uJiwgY29uc3QgQ0RNUmVzdHJpY3Rpb25zJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBk
aXN0aW5jdGl2ZUlkZW50aWZpZXJzQXJlVW5pcXVlUGVyT3JpZ2luQW5kQ2xlYXJhYmxlKGNvbnN0
IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8Q0RN
SW5zdGFuY2U+IGNyZWF0ZUluc3RhbmNlKCkgZmluYWw7CisgICAgdm9pZCBsb2FkQW5kSW5pdGlh
bGl6ZSgpIGZpbmFsOworICAgIGJvb2wgc3VwcG9ydHNTZXJ2ZXJDZXJ0aWZpY2F0ZXMoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIHN1cHBvcnRzU2Vzc2lvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIHN1cHBvcnRzSW5pdERhdGEoY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IFNoYXJlZEJ1ZmZl
ciYpIGNvbnN0IGZpbmFsOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNhbml0aXplUmVzcG9u
c2UoY29uc3QgU2hhcmVkQnVmZmVyJikgY29uc3QgZmluYWw7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworcHJpdmF0
ZToKKyAgICBTdHJpbmcgbV9rZXlTeXN0ZW07Cit9OworCitjbGFzcyBDRE1JbnN0YW5jZVRodW5k
ZXIgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSB7CitwdWJsaWM6CisgICAgQ0RNSW5z
dGFuY2VUaHVuZGVyKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKTsKKyAgICB2aXJ0dWFsIH5DRE1J
bnN0YW5jZVRodW5kZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBDRE1JbnN0YW5jZQorICAgIElt
cGxlbWVudGF0aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBJbXBsZW1lbnRhdGlvblR5cGU6OlRodW5kZXI7IH0KKyAgICB2b2lkIGluaXRpYWxpemVXaXRo
Q29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJiwgQWxsb3dEaXN0
aW5jdGl2ZUlkZW50aWZpZXJzLCBBbGxvd1BlcnNpc3RlbnRTdGF0ZSwgU3VjY2Vzc0NhbGxiYWNr
JiYpIGZpbmFsOworICAgIHZvaWQgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZl
cj4mJiwgU3VjY2Vzc0NhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgc2V0U3RvcmFnZURpcmVj
dG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKyAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fa2V5U3lzdGVtOyB9CisgICAgUmVmUHRyPENETUluc3Rh
bmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOworCisgICAgT3BlbkNETVN5c3RlbSYg
dGh1bmRlclN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuICptX3RodW5kZXJTeXN0ZW0uZ2V0KCk7IH07
CisKKyAgICB2b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgZmluYWwKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIENETUluc3RhbmNlUHJveHk6
OnJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCk7CisgICAgICAgIG1fdGh1bmRlclN5c3RlbS5y
ZXNldChudWxscHRyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVGh1bmRlcjo6VW5pcXVlVGh1
bmRlclN5c3RlbSBtX3RodW5kZXJTeXN0ZW07CisgICAgU3RyaW5nIG1fa2V5U3lzdGVtOworfTsK
KworY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlciBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0
YW5jZVNlc3Npb25Qcm94eSB7CitwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRl
cihDRE1JbnN0YW5jZVRodW5kZXImKTsKKworICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5z
ZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgdXBkYXRlTGlj
ZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgTGlj
ZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5z
ZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2sm
JikgZmluYWw7CisgICAgdm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNz
aW9uQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBT
dHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbiAmJiBtX21lc3NhZ2Ug
JiYgIW1fbWVzc2FnZS0+aXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIHNldENsaWVudChXZWFrUHRy
PENETUluc3RhbmNlU2Vzc2lvbkNsaWVudD4mJiBjbGllbnQpIGZpbmFsIHsgbV9jbGllbnQgPSBX
VEZNb3ZlKGNsaWVudCk7IH0KKyAgICB2b2lkIGNsZWFyQ2xpZW50KCkgZmluYWwgeyBtX2NsaWVu
dC5jbGVhcigpOyB9CisKKyAgICB2b2lkIHJlbGVhc2VEZWNyeXB0aW9uUmVzb3VyY2VzKCkgZmlu
YWwKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIG1fa2V5
U3RvcmUucmVtb3ZlQWxsS2V5cygpOworICAgICAgICBtX3Nlc3Npb24ucmVzZXQobnVsbHB0cik7
CisgICAgICAgIENETUluc3RhbmNlU2Vzc2lvblByb3h5OjpyZWxlYXNlRGVjcnlwdGlvblJlc291
cmNlcygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBPcHRpb25hbDxDRE1JbnN0YW5jZVRodW5k
ZXImPiBjZG1JbnN0YW5jZVRodW5kZXIoKSBjb25zdDsKKworICAgIHVzaW5nIE5vdGlmaWNhdGlv
biA9IHZvaWQgKENETUluc3RhbmNlU2Vzc2lvblRodW5kZXI6OiopKFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+JiYpOworICAgIHVzaW5nIENoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrID0g
RnVuY3Rpb248dm9pZCgpPjsKKyAgICB1c2luZyBTZXNzaW9uQ2hhbmdlZENhbGxiYWNrID0gRnVu
Y3Rpb248dm9pZChib29sLCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYmKT47CisKKyAgICB2b2lkIGNo
YWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYpOworICAgIHZv
aWQga2V5VXBkYXRlZENhbGxiYWNrKEtleUlEVHlwZSYmKTsKKyAgICB2b2lkIGtleXNVcGRhdGVE
b25lQ2FsbGJhY2soKTsKKyAgICB2b2lkIGVycm9yQ2FsbGJhY2soUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4mJik7CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzKGNvbnN0IEtl
eUlEVHlwZSYpIGNvbnN0OworICAgIHZvaWQgc2Vzc2lvbkZhaWx1cmUoKTsKKworICAgIC8vIEZJ
WE1FOiBDaGVjayBhbGwgb3JpZ2luYWwgdXNlcyBvZiB0aGVzZSBhdHRyaWJ1dGVzLgorICAgIFN0
cmluZyBtX3Nlc3Npb25JRDsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworICAgIGJvb2wgbV9k
b2VzS2V5U3RvcmVOZWVkTWVyZ2luZyB7IGZhbHNlIH07CisgICAgSW5pdERhdGEgbV9pbml0RGF0
YTsKKyAgICBPcGVuQ0RNU2Vzc2lvbkNhbGxiYWNrcyBtX3RodW5kZXJTZXNzaW9uQ2FsbGJhY2tz
IHsgfTsKKyAgICBUaHVuZGVyOjpVbmlxdWVUaHVuZGVyU2Vzc2lvbiBtX3Nlc3Npb247CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9tZXNzYWdlOworICAgIGJvb2wgbV9uZWVkc0luZGl2aWR1
YWxpemF0aW9uIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8Q2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJh
Y2s+IG1fY2hhbGxlbmdlQ2FsbGJhY2tzOworICAgIFZlY3RvcjxTZXNzaW9uQ2hhbmdlZENhbGxi
YWNrPiBtX3Nlc3Npb25DaGFuZ2VkQ2FsbGJhY2tzOworICAgIFdlYWtQdHI8Q0RNSW5zdGFuY2VT
ZXNzaW9uQ2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DRE1fSU5TVEFOQ0UoV2ViQ29yZTo6Q0RNSW5zdGFuY2VU
aHVuZGVyLCBXZWJDb3JlOjpDRE1JbnN0YW5jZTo6SW1wbGVtZW50YXRpb25UeXBlOjpUaHVuZGVy
KTsKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEVOQUJMRShUSFVOREVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKaW5kZXggOGE5MmNh
M2IxZWE4Li40ZTU1M2VmZGFkZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVV
dGlsaXRpZXMuaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiAjZGVmaW5lIFdFQkNPUkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlf
VVVJRCAiMTA3N2VmZWMtYzBiMi00ZDAyLWFjZTMtM2MxZTUyZTJmYjRiIgorI2lmIEVOQUJMRShU
SFVOREVSKQorI2RlZmluZSBXRUJDT1JFX0dTVFJFQU1FUl9FTUVfVVRJTElUSUVTX1dJREVWSU5F
X1VVSUQgImVkZWY4YmE5LTc5ZDYtNGFjZS1hM2M4LTI3ZGNkNTFkMjFlZCIKKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbml0RGF0YSB7CkBAIC00OCw2ICs1MSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcGF5bG9hZCA9IG1hcHBlZEluaXREYXRhLT5jcmVhdGVTaGFyZWRC
dWZmZXIoKTsKICAgICB9CiAKKyAgICBJbml0RGF0YShjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYmIHBheWxvYWQpCisgICAgICAgIDogbV9zeXN0ZW1JZChzeXN0
ZW1JZCkKKyAgICAgICAgLCBtX3BheWxvYWQoV1RGTW92ZShwYXlsb2FkKSkKKyAgICB7CisgICAg
fQorCiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEmJiBpbml0RGF0YSkKICAgICB7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGVyZSBpcyBzb21lIGNvbmZ1c2lvbiBoZXJlIGFib3V0IGhvdyB0byBkZXRl
Y3QgdGhlCkBAIC02NCw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9wYXlsb2FkLT5hcHBl
bmQoKmluaXREYXRhLnBheWxvYWQoKSk7CiAgICAgfQogCi0gICAgY29uc3QgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF5bG9hZDsgfQorICAgIGNvbnN0
IFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBwYXlsb2FkKCkgY29uc3QgeyByZXR1cm4gbV9wYXlsb2Fk
OyB9CiAgICAgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVt
SWQ7IH0KICAgICBTdHJpbmcgcGF5bG9hZENvbnRhaW5lclR5cGUoKSBjb25zdAogICAgIHsKQEAg
LTExNSwxNyArMTI0LDMzIEBAIGNsYXNzIEdTdHJlYW1lckVNRVV0aWxpdGllcyB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiBzX0NsZWFyS2V5VVVJRCA9IFdFQkNP
UkVfR1NUUkVBTUVSX0VNRV9VVElMSVRJRVNfQ0xFQVJLRVlfVVVJRDsKICAgICBzdGF0aWMgY29u
c3RleHByIGNoYXIgY29uc3QqIHNfQ2xlYXJLZXlLZXlTeXN0ZW0gPSAib3JnLnczLmNsZWFya2V5
IjsKKyNpZiBFTkFCTEUoVEhVTkRFUikKKyAgICBzdGF0aWMgY29uc3RleHByIGNoYXIgY29uc3Qq
IHNfV2lkZXZpbmVVVUlEID0gV0VCQ09SRV9HU1RSRUFNRVJfRU1FX1VUSUxJVElFU19XSURFVklO
RV9VVUlEOworICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBjb25zdCogc19XaWRldmluZUtleVN5
c3RlbSA9ICJjb20ud2lkZXZpbmUuYWxwaGEiOworI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBp
c0NsZWFyS2V5S2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX0NsZWFyS2V5S2V5
U3lzdGVtKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoVEhVTkRFUikKKyAgICBzdGF0aWMgYm9vbCBp
c1dpZGV2aW5lS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5U3lzdGVtLCBzX1dpZGV2aW5lS2V5
U3lzdGVtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBrZXlTeXN0
ZW1Ub1V1aWQoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiAgICAgewogICAgICAgICBpZiAoaXND
bGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIHNfQ2xlYXJL
ZXlVVUlEOwogCisjaWYgRU5BQkxFKFRIVU5ERVIpCisgICAgICAgIGlmIChpc1dpZGV2aW5lS2V5
U3lzdGVtKGtleVN5c3RlbSkpCisgICAgICAgICAgICByZXR1cm4gc19XaWRldmluZVVVSUQ7Cisj
ZW5kaWYKKwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDg2YjdjNjZmYWQ0Zi4uNTEwM2Q0Y2I5MmFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9y
R1N0cmVhbWVyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0UHJpdmF0ZSB7CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7
CitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgY29uc3QgUmVmUHRyPENETVByb3h5
PiYpOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUs
IHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIApAQCAt
ODMsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
Y2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogICAgICAgICAid2Via2l0Y2xl
YXJrZXkiLCAwLCAiQ2xlYXJLZXkgZGVjcnlwdG9yIik7CiAKICAgICBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFRfQ0xBU1Moa2xhc3MpOwotICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0g
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKKyAgICBjZW5jQ2xhc3MtPnBy
b3RlY3Rpb25TeXN0ZW1JZCA9IEdTVF9ERUJVR19GVU5DUFRSKHByb3RlY3Rpb25TeXN0ZW1JZCk7
CiAgICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2Rt
UHJveHlBdHRhY2hlZCk7CiAgICAgY2VuY0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQ
VFIoZGVjcnlwdCk7CiAKQEAgLTEwNiw2ICsxMDcsMTEgQEAgc3RhdGljIHZvaWQgZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmlu
YWxpemUsIChvYmplY3QpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0
ZW1JZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KikKK3sKKyAgICByZXR1cm4g
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKK30KKwogc3RhdGljIGJvb2wg
Y2RtUHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
LCBjb25zdCBSZWZQdHI8Q0RNUHJveHk+JiBjZG1Qcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRf
UFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcAppbmRleCA0N2I1NjBmNzM5MjAuLjE1ZTEzYWJmYmFkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0xMzQsMTQgKzEzNCwxNCBAQCBzdGF0aWMgR3N0Q2Fwcyog
dHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RQYWREaXJlY3Rpb24gZGly
ZWN0aW9uLAogICAgICAgICAgICAgLy8gY2FuIGNhdXNlIGNhcHMgbmVnb3RpYXRpb24gZmFpbHVy
ZXMgd2l0aCBhZGFwdGl2ZSBiaXRyYXRlIHN0cmVhbXMuCiAgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX3JlbW92ZV9maWVsZHMob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJiYXNlLXByb2ZpbGUi
LCAiY29kZWNfZGF0YSIsICJoZWlnaHQiLCAiZnJhbWVyYXRlIiwgImxldmVsIiwgInBpeGVsLWFz
cGVjdC1yYXRpbyIsICJwcm9maWxlIiwgInJhdGUiLCAid2lkdGgiLCBudWxscHRyKTsKIAotICAg
ICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQob3V0Z29pbmdTdHJ1Y3R1cmUuZ2V0KCksICJwcm90
ZWN0aW9uLXN5c3RlbSIsIEdfVFlQRV9TVFJJTkcsIGtsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQs
CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChvdXRnb2luZ1N0cnVjdHVyZS5nZXQoKSwg
InByb3RlY3Rpb24tc3lzdGVtIiwgR19UWVBFX1NUUklORywga2xhc3MtPnByb3RlY3Rpb25TeXN0
ZW1JZChzZWxmKSwKICAgICAgICAgICAgICAgICAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQ
RV9TVFJJTkcsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoaW5jb21pbmdTdHJ1Y3R1cmUpLCBudWxs
cHRyKTsKIAogICAgICAgICAgICAgLy8gR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lTVEVN
X0lEIHdhcyBhZGRlZCBpbiB0aGUgR1N0cmVhbWVyCiAgICAgICAgICAgICAvLyBkZXZlbG9wZW1l
bnQgZ2l0IG1hc3RlciB3aGljaCB3aWxsIHNoaXAgYXMgdmVyc2lvbiAxLjE2LjAuCiAgICAgICAg
ICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKG91dGdvaW5nU3RydWN0dXJlLmdldCgpLAogI2lm
IEdTVF9DSEVDS19WRVJTSU9OKDEsIDE1LCAwKQotICAgICAgICAgICAgICAgICFnX3N0cmNtcDAo
a2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCwgR1NUX1BST1RFQ1RJT05fVU5TUEVDSUZJRURfU1lT
VEVNX0lEKSA/ICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIiA6CisgICAgICAgICAgICAgICAgIWdf
c3RyY21wMChrbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkKHNlbGYpLCBHU1RfUFJPVEVDVElPTl9V
TlNQRUNJRklFRF9TWVNURU1fSUQpID8gImFwcGxpY2F0aW9uL3gtd2VibS1lbmMiIDoKICNlbmRp
ZgogICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LWNlbmMiKTsKICAgICAgICAgfQpAQCAt
MTc3LDYgKzE3NywxMiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdz
dEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKIAorICAg
IEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7
CisgICAgaWYgKCFwcm90ZWN0aW9uTWV0YSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNl
bGYsICJCdWZmZXIgJXAgZG9lcyBub3QgY29udGFpbiBwcm90ZWN0aW9uIG1ldGEsIG5vdCBkZWNy
eXB0aW5nIiwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKwog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CiAKICAgICAv
LyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBi
ZWdpbiBkZWNyeXB0aW9uLgpAQCAtMTkxLDEyICsxOTcsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVy
biB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVm
ZmVyKQogICAgICAgICB9CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cg
YXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9
Ci0KLSAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9j
YXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1
ZmZlcikpOwotICAgIGlmICghcHJvdGVjdGlvbk1ldGEpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVm
ZmVyICVwIiwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
Ci0gICAgfQogICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29w
ZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1v
dmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRh
KSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4IGJiMTE2NmQzODAzMy4u
YTA0NjVmZjUzZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtNTQsNyArNTQsNyBA
QCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQgewogc3RydWN0IF9X
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgewogICAgIEdzdEJhc2VUcmFu
c2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAotICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0
ZW1JZDsKKyAgICBjb25zdCBjaGFyKiAoKnByb3RlY3Rpb25TeXN0ZW1JZCkoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6
OkNETVByb3h5PiYpOwogICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZl
ciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVy
KiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdFRodW5kZXJEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRUaHVuZGVyRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjJlOWFmZmIyMmJkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0VGh1bmRlckRl
Y3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qIEdTdHJlYW1lciBUaHVu
ZGVyIGNvbW1vbiBlbmNyeXB0aW9uIGRlY3J5cHRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBNZXRyb2xvZ2ljYWwKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMzUsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
VGh1bmRlckRlY3J5cHRvckdTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgRU5BQkxFKFRIVU5ERVIpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJDRE1Q
cm94eVRodW5kZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxn
c3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RIVU5ERVJfREVD
UllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiks
IFdFQktJVF9UWVBFX01FRElBX1RIVU5ERVJfREVDUllQVCwgV2ViS2l0TWVkaWFUaHVuZGVyRGVj
cnlwdFByaXZhdGUpKQorc3RydWN0IF9XZWJLaXRNZWRpYVRodW5kZXJEZWNyeXB0UHJpdmF0ZSB7
CisgICAgUmVmUHRyPENETVByb3h5VGh1bmRlcj4gY2RtUHJveHk7Cit9OworCitzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3Rl
bUlkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKK3N0YXRpYyBib29sIGNk
bVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIGNvbnN0
IFJlZlB0cjxDRE1Qcm94eT4mKTsKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZlcioga2V5aWQsIEdz
dEJ1ZmZlciogc2FtcGxlLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsCisgICAgR3N0QnVmZmVy
KiBzdWJTYW1wbGVzKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdE1lZGlhVGh1bmRlckRl
Y3J5cHREZWJ1Z0NhdGVnb3J5KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlh
VGh1bmRlckRlY3J5cHREZWJ1Z0NhdGVnb3J5CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjZW5jRW5j
cnlwdGlvbk1lZGlhVHlwZXNbXSA9IHsgInZpZGVvL21wNCIsICJhdWRpby9tcDQiLCAidmlkZW8v
eC1oMjY0IiwgImF1ZGlvL21wZWciLCBudWxscHRyIH07CitzdGF0aWMgY29uc3QgY2hhciogd2Vi
bUVuY3J5cHRpb25NZWRpYVR5cGVzW10gPSB7ICJ2aWRlby93ZWJtIiwgImF1ZGlvL3dlYm0iLCAi
dmlkZW8veC12cDkiLCBudWxscHRyIH07CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBz
cmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgIEdTVF9QQURf
U1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUygKKyAgICAgICAg
InZpZGVvL3dlYm07ICIKKyAgICAgICAgImF1ZGlvL3dlYm07ICIKKyAgICAgICAgInZpZGVvL21w
NDsgIgorICAgICAgICAiYXVkaW8vbXA0OyAiCisgICAgICAgICJhdWRpby9tcGVnOyAiCisgICAg
ICAgICJ2aWRlby94LWgyNjQ7ICIKKyAgICAgICAgInZpZGVvL3gtdnA5OyAiKSk7CisKKyNkZWZp
bmUgd2Via2l0X21lZGlhX3RodW5kZXJfZGVjcnlwdF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNz
CitHX0RFRklORV9UWVBFKFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHQsIHdlYmtpdF9tZWRpYV90
aHVuZGVyX2RlY3J5cHQsIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCk7CisKK3N0YXRp
YyBHUmVmUHRyPEdzdENhcHM+IGNyZWF0ZVNpbmtQYWRUZW1wbGF0ZUNhcHMoKQoreworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVN5c3RlbSA6IENETUZhY3RvcnlUaHVuZGVyOjpzaW5n
bGV0b24oKS5zdXBwb3J0ZWRLZXlTeXN0ZW1zKCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGNlbmNFbmNyeXB0aW9uTWVkaWFUeXBlc1tpXTsgKytpKSB7CisgICAgICAgICAgICBnc3RfY2Fw
c19hcHBlbmRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNh
dGlvbi94LWNlbmMiLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIsIEdfVFlQRV9TVFJJTkcsCisgICAg
ICAgICAgICAgICAgY2VuY0VuY3J5cHRpb25NZWRpYVR5cGVzW2ldLCAicHJvdGVjdGlvbi1zeXN0
ZW0iLCBHX1RZUEVfU1RSSU5HLCBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVp
ZChrZXlTeXN0ZW0pLCBudWxscHRyKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdTdHJlYW1l
ckVNRVV0aWxpdGllczo6aXNXaWRldmluZUtleVN5c3RlbShrZXlTeXN0ZW0pKSB7CisgICAgICAg
ICAgICAvLyBObyBrZXkgc3lzdGVtIFVVSUQgZm9yIHdlYm0uIEl0J3Mgbm90IHNldCBpbiBjYXBz
IGZvciBpdCBhbmQgaXQncyBqdXN0IFdpZGV2aW5lLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IHdlYm1FbmNyeXB0aW9uTWVkaWFUeXBlc1tpXTsgKytpKSB7CisgICAgICAgICAgICAgICAg
Z3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShjYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygi
YXBwbGljYXRpb24veC13ZWJtLWVuYyIsICJvcmlnaW5hbC1tZWRpYS10eXBlIiwgR19UWVBFX1NU
UklORywKKyAgICAgICAgICAgICAgICAgICAgd2VibUVuY3J5cHRpb25NZWRpYVR5cGVzW2ldLCBu
dWxscHRyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVC
VUcoInNpbmsgcGFkIHRlbXBsYXRlIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkp
OworCisgICAgcmV0dXJuIGNhcHM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV90aHVu
ZGVyX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVRodW5kZXJEZWNyeXB0Q2xhc3MqIGts
YXNzKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdE1lZGlhVGh1bmRlckRl
Y3J5cHREZWJ1Z0NhdGVnb3J5LCAid2Via2l0dGh1bmRlciIsIDAsICJUaHVuZGVyIGRlY3J5cHQi
KTsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKKworICAgIEdzdEVs
ZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gZ3N0U2lua1BhZFRlbXBsYXRlQ2FwcyA9IGNyZWF0ZVNpbmtQYWRU
ZW1wbGF0ZUNhcHMoKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVs
ZW1lbnRDbGFzcywgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdT
VF9QQURfQUxXQVlTLCBnc3RTaW5rUGFkVGVtcGxhdGVDYXBzLmdldCgpKSk7CisgICAgZ3N0X2Vs
ZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFk
X3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX3Nl
dF9zdGF0aWNfbWV0YWRhdGEoZWxlbWVudENsYXNzLCAiRGVjcnlwdCBlbmNyeXB0ZWQgY29udGVu
dCB1c2luZyBUaHVuZGVyIiwgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19ERUNSWVBUT1IsCisg
ICAgICAgICJEZWNyeXB0cyBlbmNyeXB0ZWQgbWVkaWEgdXNpbmcgVGh1bmRlci4iLCAiWGFiaWVy
IFJvZHLDrWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiIpOworCisgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjb21tb25DbGFzcyA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOworICAgIGNvbW1vbkNsYXNzLT5wcm90ZWN0
aW9uU3lzdGVtSWQgPSBHU1RfREVCVUdfRlVOQ1BUUihwcm90ZWN0aW9uU3lzdGVtSWQpOworICAg
IGNvbW1vbkNsYXNzLT5jZG1Qcm94eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJv
eHlBdHRhY2hlZCk7CisgICAgY29tbW9uQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BU
UihkZWNyeXB0KTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9tZWRpYV90aHVuZGVyX2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYVRodW5kZXJEZWNyeXB0
KiBzZWxmKQoreworICAgIFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX01FRElBX1RIVU5ERVJfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBzZWxm
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQ
cml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRNZWRpYVRodW5kZXJEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX1RIVU5E
RVJfREVDUllQVChvYmplY3QpOworICAgIFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRl
KiBwcml2ID0gc2VsZi0+cHJpdjsKKyAgICBwcml2LT5+V2ViS2l0TWVkaWFUaHVuZGVyRGVjcnlw
dFByaXZhdGUoKTsKKworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxp
emUsIChvYmplY3QpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHByb3RlY3Rpb25TeXN0ZW1J
ZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIFdlYktp
dE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX1RIVU5ERVJf
REVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfVEhVTkRFUl9ERUNSWVBUKHNlbGYpKTsK
KyAgICBBU1NFUlQocHJpdi0+Y2RtUHJveHkpOworICAgIHJldHVybiBHU3RyZWFtZXJFTUVVdGls
aXRpZXM6OmtleVN5c3RlbVRvVXVpZChwcml2LT5jZG1Qcm94eS0+a2V5U3lzdGVtKCkpOworfQor
CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYsIGNvbnN0IFJlZlB0cjxDRE1Qcm94eT4mIGNkbVByb3h5KQoreworICAg
IFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX1RI
VU5ERVJfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfVEhVTkRFUl9ERUNSWVBUKHNl
bGYpKTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlUaHVu
ZGVyKj4oY2RtUHJveHkuZ2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KKwor
c3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZm
ZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291bnQsCisgICAgR3N0QnVmZmVyKiBzdWJz
YW1wbGVzQnVmZmVyKQoreworICAgIFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX1RIVU5ERVJfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVE
SUFfVEhVTkRFUl9ERUNSWVBUKHNlbGYpKTsKKworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlE
QnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52
YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHN1YnNhbXBsZUNvdW50
ICYmICFzdWJzYW1wbGVzQnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
ImludmFsaWQgZGVjcnlwdCgpIHN1YnNhbXBsZXMgcGFyYW1ldGVyIik7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ0RN
UHJveHlUaHVuZGVyOjpEZWNyeXB0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQua2V5
SURCdWZmZXIgPSBrZXlJREJ1ZmZlcjsKKyAgICBjb250ZXh0Lml2QnVmZmVyID0gaXZCdWZmZXI7
CisgICAgY29udGV4dC5kYXRhQnVmZmVyID0gYnVmZmVyOworICAgIGNvbnRleHQubnVtU3Vic2Ft
cGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IHN1
YnNhbXBsZUNvdW50ID8gc3Vic2FtcGxlc0J1ZmZlciA6IG51bGxwdHI7CisKKyAgICByZXR1cm4g
cHJpdi0+Y2RtUHJveHktPmRlY3J5cHQoY29udGV4dCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
RU5DUllQVEVEX01FRElBKSAmJiBFTkFCTEUoVEhVTkRFUikgJiYgVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0VGh1bmRlckRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRUaHVuZGVyRGVjcnlwdG9yR1N0cmVhbWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lMWViODNjNTA1MDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdFRodW5kZXJEZWNyeXB0b3JHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU0
IEBACisvKiBHU3RyZWFtZXIgVGh1bmRlciBjb21tb24gZW5jcnlwdGlvbiBkZWNyeXB0b3IKKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgRU5BQkxFKFRIVU5ERVIpICYmIFVTRShHU1RS
RUFNRVIpCisKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9USFVO
REVSX0RFQ1JZUFQgICAgICAgICAgKHdlYmtpdF9tZWRpYV90aHVuZGVyX2RlY3J5cHRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX01FRElBX1RIVU5ERVJfREVDUllQVChvYmopICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfVEhV
TkRFUl9ERUNSWVBULCBXZWJLaXRNZWRpYVRodW5kZXJEZWNyeXB0KSkKKyNkZWZpbmUgV0VCS0lU
X01FRElBX1RIVU5ERVJfREVDUllQVF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9NRURJQV9USFVOREVSX0RFQ1JZUFQsIFdlYktpdE1l
ZGlhVGh1bmRlckRlY3J5cHRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19NRURJQV9USFVOREVS
X0RFQ1JZUFQob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX01FRElBX1RIVU5ERVJfREVDUllQVCkpCisjZGVmaW5lIFdFQktJVF9JU19NRURJ
QV9USFVOREVSX0RFQ1JZUFRfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgV0VCS0lUX1RZUEVfTUVESUFfVEhVTkRFUl9ERUNSWVBUKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdE1lZGlhVGh1bmRlckRlY3J5cHQgICAgICAgIFdlYktpdE1lZGlhVGh1bmRlckRl
Y3J5cHQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFUaHVuZGVyRGVjcnlwdENsYXNzICAg
V2ViS2l0TWVkaWFUaHVuZGVyRGVjcnlwdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1l
ZGlhVGh1bmRlckRlY3J5cHRQcml2YXRlIFdlYktpdE1lZGlhVGh1bmRlckRlY3J5cHRQcml2YXRl
OworCitHVHlwZSB3ZWJraXRfbWVkaWFfdGh1bmRlcl9kZWNyeXB0X2dldF90eXBlKHZvaWQpOwor
CitzdHJ1Y3QgX1dlYktpdE1lZGlhVGh1bmRlckRlY3J5cHQgeworICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQgcGFyZW50OworCisgICAgV2ViS2l0TWVkaWFUaHVuZGVyRGVj
cnlwdFByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE1lZGlhVGh1bmRlckRlY3J5
cHRDbGFzcyB7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHBh
cmVudENsYXNzOworfTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpICYmIEVOQUJMRShUSFVOREVSKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQKaW5kZXggOThjMmM4MTgxZDk5Li5kYzlkNjk1NmFlNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4
dApAQCAtMjgxLDYgKzI4MSwxMiBAQCBzZXQoUGx1Z2luUHJvY2Vzc19MSUJSQVJJRVMKICAgICBX
ZWJLaXQKICkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJMRV9PUEVOQ0RN
KQorICBsaXN0KEFQUEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAg
ICR7T1BFTkNETV9JTkNMVURFX0RJUlN9CisgICkKK2VuZGlmICgpCisKIGlmIChFTkFCTEVfR1JB
UEhJQ1NfQ09OVEVYVF9HTCkKICAgICAjIEZvciBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIHVzZSBz
eXN0ZW0tcHJvdmlkZWQgT3BlbkdMIChFUykgLyBFR0wgaGVhZGVycywKICAgICAjIHRoZXNlIGlu
Y2x1ZGUgZGlyZWN0b3JpZXMsIGxpYnJhcmllcyBvciBkZWZpbml0aW9ucyBuZWVkIHRvIGJlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZFRodW5kZXIuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
RmluZFRodW5kZXIuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4zMzUyZGU5NDQ5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvY21ha2UvRmluZFRodW5k
ZXIuY21ha2UKQEAgLTAsMCArMSw2OSBAQAorIy5yc3QKKyMgRmluZFRodW5kZXIKKyMgLS0tLS0t
LS0tLS0tLQorIworIyBGaW5kcyB0aGUgVGh1bmRlciBsaWJyYXJ5LgorIworIyBUaGlzIHdpbGwg
ZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorIworIyBgYFRIVU5ERVJfRk9VTkRgYAor
IyAgICAgVHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIHZlcnNpb24gb2YgZ2NyeXB0IHdhcyBmb3VuZAor
IyBgYFRIVU5ERVJfVkVSU0lPTmBgCisjICAgICBUaGUgdmVyc2lvbiBvZiBnY3J5cHQgdGhhdCB3
YXMgZm91bmQKKyMgYGBUSFVOREVSX0lOQ0xVREVfRElSU2BgCisjICAgICBUaGUgZ2NyeXB0IGlu
Y2x1ZGUgZGlyZWN0b3JpZXMKKyMgYGBUSFVOREVSX0xJQlJBUklFU2BgCisjICAgICBUaGUgbGlu
a2VyIGxpYnJhcmllcyBuZWVkZWQgdG8gdXNlIHRoZSBnY3J5cHQgbGlicmFyeQorIworIyBDb3B5
cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsCisjIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEg
Uy5MCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMu
IFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cworIyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyMgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUworIyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisjIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVAorIyBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmaW5kX2xpYnJhcnkoVEhVTkRFUl9MSUJS
QVJZCisgIE5BTUVTIGxpYm9jZG0uc28KKykKK2ZpbmRfcGF0aChUSFVOREVSX0lOQ0xVREVfRElS
CisgIE5BTUVTIG9wZW5fY2RtLmgKKyAgUEFUSF9TVUZGSVhFUyAiV1BFRnJhbWV3b3JrL29jZG0v
IgorKQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorCitmaW5kX3Bh
Y2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoVGh1bmRlcgorICAgIEZPVU5EX1ZBUiBUSFVOREVS
X0ZPVU5ECisgICAgUkVRVUlSRURfVkFSUyBUSFVOREVSX0xJQlJBUlkgVEhVTkRFUl9JTkNMVURF
X0RJUgorKQoraWYgKFRIVU5ERVJfRk9VTkQpCisgICAgc2V0KFRIVU5ERVJfTElCUkFSSUVTICR7
VEhVTkRFUl9MSUJSQVJZfSkKKyAgICBzZXQoVEhVTkRFUl9JTkNMVURFX0RJUlMgJHtUSFVOREVS
X0lOQ0xVREVfRElSfSkKK2VuZGlmICgpCisKK21hcmtfYXNfYWR2YW5jZWQoVEhVTkRFUl9MSUJS
QVJZIFRIVU5ERVJfSU5DTFVERV9ESVIpCisKK2luY2x1ZGUoRmVhdHVyZVN1bW1hcnkpCitzZXRf
cGFja2FnZV9wcm9wZXJ0aWVzKFRodW5kZXIgUFJPUEVSVElFUworICAgIERFU0NSSVBUSU9OICJU
aHVuZGVyIERSTSBmcmFtZXdvcmsiCisgICAgVVJMICJodHRwczovL2dpdGh1Yi5jb20vcmRrY2Vu
dHJhbC9UaHVuZGVyIgorKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21h
a2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCAxNGE2MmE5MDUwY2YuLjE3
NTRkZDNiYTk4ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTE4Nyw2ICsxODcsNyBAQCBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFIFBS
SVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfTkVUV09S
S19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04gUFJJVkFURSBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JF
VkFMSURBVEUgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9PRkZTQ1JFRU5fQ0FOVkFTIFBSSVZBVEUgJHtFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRV
UkVTfSkKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9USFVOREVSIFBS
SVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1BFUklP
RElDX01FTU9SWV9NT05JVE9SIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUE9JTlRFUl9MT0NLIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTIFBSSVZBVEUg
T04pCkBAIC00MjgsNiArNDI5LDEwIEBAIGlmIChVU0VfU1lTVEVNRCkKICAgICBlbmRpZiAoKQog
ZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEgQU5EIEVOQUJMRV9USFVOREVS
KQorICBmaW5kX3BhY2thZ2UoVGh1bmRlciBSRVFVSVJFRCkKK2VuZGlmICgpCisKICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjI0NwogaWYgKEVOQUJMRURfQ09N
UElMRVJfU0FOSVRJWkVSUykKICAgICBzZXQoRU5BQkxFX0lOVFJPU1BFQ1RJT04gT0ZGKQpkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0
aW9uc1dQRS5jbWFrZQppbmRleCA2MjlhODA3NjUwMTYuLmQxMWE5ZjhkNjU4OSAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlv
bnNXUEUuY21ha2UKQEAgLTQ1LDYgKzQ1LDcgQEAgaW5jbHVkZShHU3RyZWFtZXJEZWZpbml0aW9u
cykKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMgUFVCTElDIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9BQ0NFU1NJQklMSVRZIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9FTkNSWVBURURfTUVESUEgUFVCTElDICR7RU5BQkxFX0VYUEVSSU1FTlRB
TF9GRUFUVVJFU30pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfVEhV
TkRFUiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJM
RV9XRUJEUklWRVIgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1dFQl9DUllQVE8gUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1hTTFQgUFVCTElDIE9OKQpAQCAtMTk4LDYgKzE5OSwxMCBAQCBpZiAoVVNF
X1NZU1RFTUQpCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfRU5DUllQVEVE
X01FRElBIEFORCBFTkFCTEVfVEhVTkRFUikKKyAgZmluZF9wYWNrYWdlKFRodW5kZXIgUkVRVUlS
RUQpCitlbmRpZiAoKQorCiBhZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19XUEVfXz0xKQogYWRk
X2RlZmluaXRpb25zKC1ER0VUVEVYVF9QQUNLQUdFPSJXUEUiKQogYWRkX2RlZmluaXRpb25zKC1E
SlNDX0dMSUJfQVBJX0VOQUJMRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVh
dHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXggYjQ0
ZGY0NmNjNTQ5Li44M2ZjODE3Mjc5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRG
ZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKQEAg
LTE4Miw2ICsxODIsNyBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9P
UFRJT05fREVGSU5FKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUg
IlRvb2dsZSBuZXR3b3JrIGNhY2hlIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgY2FjaGluZyBzdHJh
dGVneSIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX05PVElG
SUNBVElPTlMgIlRvZ2dsZSBOb3RpZmljYXRpb25zIHN1cHBvcnQiIFBSSVZBVEUgT04pCiAgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMgIlRvZ2dsZSBPZmZz
Y3JlZW5DYW52YXMgc3VwcG9ydCIgUFJJVkFURSBPRkYpCisgICAgV0VCS0lUX09QVElPTl9ERUZJ
TkUoRU5BQkxFX1RIVU5ERVIgIlRvZ2dsZSBFTUUgVjMgVGh1bmRlciBzdXBwb3J0IiBQUklWQVRF
IE9GRikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRT
ICJUb2dnbGUgT3JpZW50YXRpb24gRXZlbnRzIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogICAgIFdF
QktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0ggIlRvZ2ds
ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcgc3VwcG9ydCIgUFJJVkFURSBPRkYpCiAgICAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCAiVG9nZ2xlIFBheW1lbnQgUmVx
dWVzdCBzdXBwb3J0IiBQUklWQVRFIE9GRikKQEAgLTI1NCw2ICsyNTUsNyBAQCBtYWNybyhXRUJL
SVRfT1BUSU9OX0JFR0lOKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9NRURJQV9D
T05UUk9MU19TQ1JJUFQgRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVO
QUJMRV9NRURJQV9TT1VSQ0UgRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5E
KEVOQUJMRV9NRURJQV9TVFJFQU0gRU5BQkxFX1ZJREVPKQorICAgIFdFQktJVF9PUFRJT05fREVQ
RU5EKEVOQUJMRV9USFVOREVSIEVOQUJMRV9FTkNSWVBURURfTUVESUEpCiAgICAgV0VCS0lUX09Q
VElPTl9ERVBFTkQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFIEVOQUJMRV9WSURFTykK
ICAgICBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExT
Q1JFRU4gRU5BQkxFX1ZJREVPKQogICAgIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9UT1VD
SF9TTElERVIgRU5BQkxFX1RPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2YmRhNzNiM2UzYTcuLmExNmYwNjc3OGY2MSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI3IEBACisyMDIwLTA3LTAzICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl1bRU1FXVtPcGVuQ0RNXSBJbXBsZW1lbnQg
T3BlbkNETSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTM1NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBzdXBwb3J0IHRvIGJ1aWxkIE9wZW5DRE0gYW5kIGl0cyBkZXBlbmRlbmNp
ZXMuIFRoZXJlIGlzIGFuCisgICAgICAgIG9wdCBpbiBlbnYgdmFyIHRvIGdldCBKSEJ1aWxkIGJ1
aWxkaW5nIFRodW5kZXIgaXRzIFdpZGV2aW5lCisgICAgICAgIGRlcGVuZGVuY2llcy4gV2UgYWxz
byBpbmNsdWRlIGEgY291cGxlIG9mIEdTdHJlYW1lciBwYXRjaGVzIG5lZWRlZAorICAgICAgICB0
byBnZXQga2V5IElEcyBpbiB0aGUgZGVjcnlwdG9ycy4KKworICAgICAgICBXaWRldmluZSBpcyBv
YnZpb3VzbHkgcHJvcHJpZXRhcnkgYW5kIGFzIHlvdSBuZWVkIHRvIGJlIGxpY2Vuc2VkCisgICAg
ICAgIHRvIGFjY2VzcyBpdCwgeW91IG5lZWQgY3JlZGVudGlhbHMgdG8gYnVpbGQgaXQuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06CisgICAgICAgICogZ3N0
cmVhbWVyL2poYnVpbGQubW9kdWxlczoKKyAgICAgICAgKiBnc3RyZWFtZXIvcGF0Y2hlcy9nc3Qt
cGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2g6IEFk
ZGVkLgorICAgICAgICAqIGdzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAwMi1D
aGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2g6
IEFkZGVkLgorICAgICAgICAqIGd0ay9pbnN0YWxsLWRlcGVuZGVuY2llczoKKyAgICAgICAgKiBq
aGJ1aWxkL2poYnVpbGRyY19jb21tb24ucHk6CisgICAgICAgIChpbml0KToKKyAgICAgICAgKiB3
cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXM6CisKIDIwMjAtMDctMDkgIEFuZHJlcyBHb256YWxleiAg
PGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgYWNjZXNzaWJpbGl0eS9NYWMv
c2VsZWN0ZWQtdmlzaWJsZS1wb3NpdGlvbi1yYW5nZS5odG1sIHRpbWUtZGV0ZXJtaW5pc3RpYy4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCAyMmUzNWI2YWYyYjYu
LjUwZGNkMDdkODlkNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpA
QCAtMTM0LDYgKzEzNCw3IEBAIG15ICgKICAgICAkbmV0d29ya0NhY2hlU3RhbGVXaGlsZVJldmFs
aWRhdGVTdXBwb3J0LAogICAgICRub3RpZmljYXRpb25zU3VwcG9ydCwKICAgICAkb2Zmc2NyZWVu
Q2FudmFzU3VwcG9ydCwKKyAgICAkdGh1bmRlclN1cHBvcnQsCiAgICAgJG9yaWVudGF0aW9uRXZl
bnRzU3VwcG9ydCwKICAgICAkb3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFN1cHBvcnQsCiAgICAgJHBh
eW1lbnRSZXF1ZXN0U3VwcG9ydCwKQEAgLTQ0NCw2ICs0NDUsOSBAQCBteSBAZmVhdHVyZXMgPSAo
CiAgICAgeyBvcHRpb24gPT4gIm9mZnNjcmVlbi1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUgT2Zm
c2NyZWVuQ2FudmFzIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfT0ZGU0NSRUVO
X0NBTlZBUyIsIHZhbHVlID0+IFwkb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydCB9LAogCisgICAgeyBv
cHRpb24gPT4gInRodW5kZXIiLCBkZXNjID0+ICJUb2dnbGUgVGh1bmRlciBDRE0gc3VwcG9ydCIs
CisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9USFVOREVSIiwgdmFsdWUgPT4gXCR0aHVuZGVyU3Vw
cG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gIm9yaWVudGF0aW9uLWV2ZW50cyIsIGRlc2MgPT4g
IlRvZ2dsZSBPcmllbnRhdGlvbiBFdmVudHMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9PUklFTlRBVElPTl9FVkVOVFMiLCB2YWx1ZSA9PiBcJG9yaWVudGF0aW9uRXZlbnRzU3Vw
cG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzIGIv
VG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcwppbmRleCA5NTZmMTI2ZDViNzUuLjEyZTc2
NTcyNWQ1OSAxMDA2NDQKLS0tIGEvVG9vbHMvZ3N0cmVhbWVyL2poYnVpbGQubW9kdWxlcworKysg
Yi9Ub29scy9nc3RyZWFtZXIvamhidWlsZC5tb2R1bGVzCkBAIC0xMSw2ICsxMSwxMiBAQAogICAg
ICAgPGRlcCBwYWNrYWdlPSJnc3QtcGx1Z2lucy1iYWQiLz4KICAgICAgIDxkZXAgcGFja2FnZT0i
Z3N0LWxpYmF2Ii8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImdzdHJlYW1lci12YWFwaSIvPgorICAg
ICAgPGlmIGNvbmRpdGlvbi1zZXQ9IlRodW5kZXIiPgorICAgICAgICA8ZGVwIHBhY2thZ2U9InRo
dW5kZXIiLz4KKyAgICAgICAgPGRlcCBwYWNrYWdlPSJ3aWRldmluZSIvPgorICAgICAgICA8ZGVw
IHBhY2thZ2U9InRodW5kZXItY2RtaS13aWRldmluZSIvPgorICAgICAgICA8ZGVwIHBhY2thZ2U9
InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgICA8L2lmPgogICAgIDwvZGVwZW5kZW5jaWVz
PgogICA8L21ldGFtb2R1bGU+CiAKQEAgLTE5LDYgKzI1LDggQEAKICAgICAgIGhyZWY9Imh0dHA6
Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0i
dGFyYmFsbCIgbmFtZT0iZ2l0aHViLXRhcmJhbGwiCiAgICAgICBocmVmPSJodHRwczovL2dpdGh1
Yi5jb20vIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0aHViLXNzaCIKKyAg
ICAgIGhyZWY9ImdpdEBnaXRodWIuY29tOiIvPgogICA8cmVwb3NpdG9yeSB0eXBlPSJnaXQiIG5h
bWU9ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20iCiAgICAgICBocmVmPSJodHRwczovL2Nocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vd2VibS8iLz4KICAgPHJlcG9zaXRvcnkgdHlwZT0iZ2l0IiBu
YW1lPSJhb21lZGlhLmdvb2dsZXNvdXJjZS5jb20iCkBAIC03OSw2ICs4Nyw3IEBACiAKICAgICA8
YnJhbmNoIGhhc2g9InNoYTI1Njo0MGJiM2JhZmRhMjVjMGI3MzljOGZjMzZlNDgzODBmY2NmNjFj
NGQzZjgzNzQ3ZTk3YWMzZjliMDE3MWIxMzE5IiBtb2R1bGU9ImdzdC1wbHVnaW5zLWdvb2QvZ3N0
LXBsdWdpbnMtZ29vZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVhbWVyIiB2ZXJzaW9u
PSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9Imdvb2QtMDAwMS1xdGRlbXV4LVNwZWNpZnkt
UkVESVJFQ1QtaW5mb3JtYXRpb24taW4tZXJyb3ItbWVzc2FnLnBhdGNoIiBzdHJpcD0iMSIvPiA8
IS0tIE1lcmdlZCB1cHN0cmVhbSwgc2hvdWxkIGJlIHNoaXBwZWQgaW4gMS4xNi4zIC0tPgorICAg
ICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWdvb2QtMDAwMi1DaGVjay1pZi1hbi11cHN0cmVh
bS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0Y2giIHN0cmlwPSIxIiAvPgogICAg
IDwvYnJhbmNoPgogICA8L21lc29uPgogCkBAIC05Miw2ICsxMDEsNyBAQAogICAgIDwvZGVwZW5k
ZW5jaWVzPgogICAgIDxicmFuY2ggaGFzaD0ic2hhMjU2OmYxY2I3YWEyMzg5NTY5YTUzNDM2NjFh
YWU0NzNmMGE5NDBhOTBiODcyMDAxODI0YmM0N2ZhODA3MmEwNDFlNzQiIG1vZHVsZT0iZ3N0LXBs
dWdpbnMtYmFkL2dzdC1wbHVnaW5zLWJhZC0ke3ZlcnNpb259LnRhci54eiIgcmVwbz0iZ3N0cmVh
bWVyIiB2ZXJzaW9uPSIxLjE2LjIiPgogICAgICAgPHBhdGNoIGZpbGU9ImdzdC1wbHVnaW5zLWJh
ZC0wMDAxLWgyNjRwYXJzZS1Qb3N0LWEtV0FSTklORy13aGVuLWRhdGEtaXMtYnJva2VuLnBhdGNo
IiBzdHJpcD0iMSIvPiA8IS0tIE1lcmdlZCwgZGlzY3Vzc2luZyBiYWNrcG9ydGluZyBodHRwczov
L2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC9tZXJnZV9y
ZXF1ZXN0cy8zODYtLT4KKyAgICAgIDxwYXRjaCBmaWxlPSJnc3QtcGx1Z2lucy1iYWQtMDAwNi1t
c3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2giIHN0cmlwPSIxIiAvPgogICAgIDwv
YnJhbmNoPgogICA8L21lc29uPgogCkBAIC0xMjUsNCArMTM1LDg5IEBACiAgICAgICAgICAgIGNo
ZWNrb3V0ZGlyPSJsaWJ2YS0ke3ZlcnNpb259IiByZXBvPSJnaXRodWItdGFyYmFsbCIvPgogICA8
L21lc29uPgogCisgIDxjbWFrZSBpZD0idGh1bmRlciIKKyAgICAgICAgIGNtYWtlYXJncz0iLURC
VUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtRFBPUlQ9ODA4MQorICAgICAgICAgICAgICAgICAg
ICAtREJJTkRJTkc9MC4wLjAuMCAtRElETEVfVElNRT0xODAKKyAgICAgICAgICAgICAgICAgICAg
LURQRVJTSVNURU5UX1BBVEg9L3RtcC90aHVuZGVyL3BlcnNpc3RlbnQKKyAgICAgICAgICAgICAg
ICAgICAgLURWT0xBVElMRV9QQVRIPS90bXAvdGh1bmRlci92b2xhdGlsZQorICAgICAgICAgICAg
ICAgICAgICAtRERBVEFfUEFUSD0ke3ByZWZpeH0vc2hhcmUvV1BFRnJhbWV3b3JrCisgICAgICAg
ICAgICAgICAgICAgIC1EU1lTVEVNX1BBVEg9JHtwcmVmaXh9L2xpYi93cGVmcmFtZXdvcmsvcGx1
Z2lucworICAgICAgICAgICAgICAgICAgICAtRFBST1hZU1RVQl9QQVRIPSR7cHJlZml4fS9saWIv
d3BlZnJhbWV3b3JrL3Byb3h5c3R1YnMKKyAgICAgICAgICAgICAgICAgICAgLURPT01BREpVU1Q9
IC1EQlVJTERfVFlQRT1SZWxlYXNlU3ltYm9scworICAgICAgICAgICAgICAgICAgICAtREJMVUVU
T09USF9TVVBQT1JUPU9GRiAtRFZJUlRVQUxJTlBVVD1PRkYKKyAgICAgICAgICAgICAgICAgICAg
LURDT01QT1NJVE9SQ0xJRU5UPU9GRiAtRENPTVBPU0lUT1JDTElFTlQ9T0ZGCisgICAgICAgICAg
ICAgICAgICAgIC1EQlJPQURDQVNUPU9GRiAtRENETUk9T04gLURDRE1JX0JDTV9ORVhVU19TVlA9
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EQ0RNSV9BREFQVEVSX0lNUExFTUVOVEFUSU9OPWdz
dHJlYW1lcgorICAgICAgICAgICAgICAgICAgICAtREdTVFJFQU1FUkNMSUVOVD1PRkYgLURQUk9W
SVNJT05QUk9YWT1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURTRUNVUklUWUFHRU5UPU9GRiAt
RENPTVBPU0lUT1JTRVJWRVJQTFVHSU49T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lO
X1dFQktJVEJST1dTRVI9T0ZGIC1EUExVR0lOX1dFQlNFUlZFUj1PRkYKKyAgICAgICAgICAgICAg
ICAgICAgLURQTFVHSU5fRVNQSUFMPU9GRiAtRE5FVFdPUktDT05UUk9MPU9GRiI+CisgICAgPGJy
YW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIgbW9kdWxlPSJyZGtjZW50cmFsL1RodW5kZXIvdGFy
YmFsbC8ke3ZlcnNpb259IiB2ZXJzaW9uPSI2YWRlZWUwMDZmZWNkZDFiMmJjNDliZDM2MGQ0OWZj
NTcxOGRlYjYxIiBjaGVja291dGRpcj0idGh1bmRlciIvPgorICA8L2NtYWtlPgorCisgIDxhdXRv
dG9vbHMgaWQ9IndpZGV2aW5lIiBzdXBwb3J0cy1ub24tc3JjZGlyLWJ1aWxkcz0ibm8iCisgICAg
ICAgICAgICAgYXV0b2dlbi1zaD0iYnVpbGQucHkiIGF1dG9nZW5hcmdzPSJ4ODYtNjQgLXIgLURP
RU1DUllQVE9fS0VZQk9YX1BBVEhfUFJFRklYPSR7cHJlZml4fSIKKyAgICAgICAgICAgICBtYWtl
YXJncz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIgorICAgICAgICAgICAgIG1ha2VpbnN0YWxsYXJn
cz0iQlVJTERUWVBFPVJlbGVhc2UgLWoxIC1mIE1ha2VmaWxlLmluc3RhbGwiID4KKyAgICA8ZGVw
ZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+CisgICAgPC9kZXBlbmRl
bmNpZXM+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItc3NoIiBtb2R1bGU9Ik1ldHJvbG9naWNh
bC93aWRldmluZS5naXQiIGNoZWNrb3V0ZGlyPSJ3aWRldmluZSIgdGFnPSIyNjRjMTM3NTAxYjI4
OWUzNTZiMTFkYWNjMzI5YjA1NjM2ZWE5Mzk2Ii8+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxjbWFr
ZSBpZD0idGh1bmRlci1jZG1pLXdpZGV2aW5lIiBjbWFrZWFyZ3M9Ii1EQ01BS0VfQlVJTERfVFlQ
RT1SZWxXaXRoRGViSW5mbyI+CisgICAgPGJyYW5jaCByZXBvPSJnaXRodWItdGFyYmFsbCIKKyAg
ICAgICAgICAgIG1vZHVsZT0iV2ViUGxhdGZvcm1Gb3JFbWJlZGRlZC9PQ0RNLVdpZGV2aW5lL3Rh
cmJhbGwvJHt2ZXJzaW9ufSIKKyAgICAgICAgICAgIHZlcnNpb249IjlkYzM5NjRiMDMzOWFiYjcw
ZDY2ZTRmOTMxNjMyMzI0YTA3NWQ2ZDQiIGNoZWNrb3V0ZGlyPSJ0aHVuZGVyLWNkbWktd2lkZXZp
bmUiLz4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyIi8+
CisgICAgICA8ZGVwIHBhY2thZ2U9IndpZGV2aW5lIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+Cisg
IDwvY21ha2U+CisKKyAgPGNtYWtlIGlkPSJ0aHVuZGVyLW5hbm9zZXJ2aWNlcyIKKyAgICAgICAg
IGNtYWtlYXJncz0iLURCVUlMRF9SRUZFUkVOQ0U9JHt2ZXJzaW9ufSAtREJVSUxEX1RZUEU9UmVs
ZWFzZVN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQ09CQUxUPU9GRiAtRFBM
VUdJTl9DT01NQU5ERVI9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX0RFVklDRUlO
Rk89T0ZGIC1EUExVR0lOX0RJU1BMQVlJTkZPPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBM
VUdJTl9ERVZJQ0VJREVOVElGSUNBVElPTj1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVH
SU5fRFNSRVNPTFVUSU9OPU9GRiAtRFBMVUdJTl9ESENQU0VSVkVSPU9GRgorICAgICAgICAgICAg
ICAgICAgICAtRFBMVUdJTl9ESUFMU0VSVkVSPU9GRiAtRFBMVUdJTl9ESUNUSU9OQVJZPU9GRgor
ICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9JT0NPTk5FQ1RPUj1PRkYgLURQTFVHSU5fRUdM
VEVTVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fRlJPTlRQQU5FTD1PRkYgLURQ
TFVHSU5fTE9DQVRJT05TWU5DPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9NT05J
VE9SPU9GRiAtRFBMVUdJTl9ORVRXT1JLQ09OVFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAg
LURQTFVHSU5fT1BFTkNETUk9T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNE
TUlfQVVUT1NUQVJUPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlf
T09QPXRydWUKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfV0lERVZJTkU9
T04KKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfQ0xFQVJLRVk9T0ZGCisg
ICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX09QRU5DRE1JX1BMQVlSRUFEWT1PRkYKKyAgICAg
ICAgICAgICAgICAgICAgLURQTFVHSU5fT1BFTkNETUlfTkFHUkE9T0ZGCisgICAgICAgICAgICAg
ICAgICAgIC1EUExVR0lOX09QRU5DRE1JX05DQVM9T0ZGIC1EUExVR0lOX0JMVUVUT09USD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fQkxVRVRPT1RIUkVNT1RFQ09OVFJPTD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUkVNT1RFQ09OVFJPTD1PRkYgLURQTFVHSU5f
U05BUFNIT1Q9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1NZU1RFTUNPTU1BTkRT
PU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9GSUxFVFJBTlNGRVI9T0ZGCisgICAg
ICAgICAgICAgICAgICAgIC1EUExVR0lOX1RFU1RDT05UUk9MTEVSPU9GRiAtRFBMVUdJTl9KU09O
UlBDPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9URVNUVVRJTElUWT1PRkYgLURQ
TFVHSU5fVElNRVNZTkM9T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1RSQUNFQ09O
VFJPTD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fVk9MVU1FQ09OVFJPTD1PRkYK
KyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VCS0lUQlJPV1NFUj1PRkYgLURQTFVHSU5f
UlRTUENMSUVOVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fV0VCUEE9T0ZGIC1E
UExVR0lOX1dFQlBST1hZPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJTl9XRUJTRVJW
RVI9T0ZGIC1EUExVR0lOX1dFQlNIRUxMPU9GRgorICAgICAgICAgICAgICAgICAgICAtRFBMVUdJ
Tl9XSUZJQ09OVFJPTD1PRkYgLURQTFVHSU5fUEFDS0FHRVI9T0ZGCisgICAgICAgICAgICAgICAg
ICAgIC1EUExVR0lOX1BMQVlFUklORk89T0ZGIC1EUExVR0lOX1BPV0VSPU9GRgorICAgICAgICAg
ICAgICAgICAgICAtRFBMVUdJTl9QUk9DRVNTTU9OSVRPUj1PRkYgLURQTFVHSU5fU1RSRUFNRVI9
T0ZGCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX1NQQVJLPU9GRiAtRFBMQVRGT1JNX0xJ
TlVYPU9OCisgICAgICAgICAgICAgICAgICAgIC1EUExVR0lOX01FU1NFTkdFUj1PRkYgLURQTFVH
SU5fU0VDVVJJVFlBR0VOVD1PRkYKKyAgICAgICAgICAgICAgICAgICAgLURQTFVHSU5fUlBDTElO
Sz1PRkYgLURQTFVHSU5fQ09NUE9TSVRPUj1PRkYiPgorICAgIDxicmFuY2ggcmVwbz0iZ2l0aHVi
LXRhcmJhbGwiCisgICAgICAgICAgICBtb2R1bGU9InJka2NlbnRyYWwvVGh1bmRlck5hbm9TZXJ2
aWNlcy90YXJiYWxsLyR7dmVyc2lvbn0iCisgICAgICAgICAgICB2ZXJzaW9uPSJkZTlmM2Q0MGQ4
NDA4ZWU4MTFjNDhmNDg2YzliMTRmNzUyYzk3MzQ1IgorICAgICAgICAgICAgY2hlY2tvdXRkaXI9
InRodW5kZXItbmFub3NlcnZpY2VzIi8+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAg
cGFja2FnZT0idGh1bmRlciIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJ0aHVuZGVyLWNkbWktd2lk
ZXZpbmUiLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgPC9jbWFrZT4KKwogPC9tb2R1bGVzZXQ+
CmRpZmYgLS1naXQgYS9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAw
Ni1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2ggYi9Ub29scy9nc3RyZWFtZXIv
cGF0Y2hlcy9nc3QtcGx1Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRh
dGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44Zjk5NDZm
MGU5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1
Z2lucy1iYWQtMDAwNi1tc3NkZW11eC1wYXJzZS1wcm90ZWN0aW9uLWRhdGEucGF0Y2gKQEAgLTAs
MCArMSwyNDcgQEAKK0Zyb20gMDA1MmYzZDgzMTVlOGNlZmIwNGE2MmE2NGNhYzE3Y2JmYmM2Yjhi
NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJsaWUgVHVybmVyIDxjaHR1cm5l
QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjUgTWF5IDIwMTggMDk6NDM6MzAgKzAxMDAKK1N1Ympl
Y3Q6IFtQQVRDSF0gUGFyc2UgcGxheXJlYWR5IHBheWxvYWQuCisKK0xvb2sgYXQgdGhlIHBsYXly
ZWFkeSBzcGVjaWZpYyBkYXRhIHBheWxvYWQgdG8gZXh0cmFjdCBkZWZhdWx0IGtleSBpZHMKK2Zv
ciBkZWNyeXB0aW5nIHNhbXBsZXMuIFRoZSBmb3JtYXQgb2YgdGhpcyBwYXlsb2FkIHNlZW1zIHRv
IGJlCitwcm9wcmlldGFyeS4KKworU2lnbmVkLW9mZi1ieTogWGFiaWVyIFJvZHJpZ3VleiBDYWx2
YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+CistLS0KKyBleHQvc21vb3Roc3RyZWFtaW5nL2dzdG1z
c2RlbXV4LmMgICAgfCAgMTQgKystCisgZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NtYW5pZmVz
dC5jIHwgMTM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIGV4dC9zbW9vdGhzdHJlYW1p
bmcvZ3N0bXNzbWFuaWZlc3QuaCB8ICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0
aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L3Ntb290aHN0cmVhbWlu
Zy9nc3Rtc3NkZW11eC5jIGIvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rtc3NkZW11eC5jCitpbmRl
eCBiY2VhOGNhLi40ZmE5NWI5IDEwMDY0NAorLS0tIGEvZXh0L3Ntb290aHN0cmVhbWluZy9nc3Rt
c3NkZW11eC5jCisrKysgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc2RlbXV4LmMKK0BAIC00
OTUsNyArNDk1LDE5IEBAIGdzdF9tc3NfZGVtdXhfc2V0dXBfc3RyZWFtcyAoR3N0QWRhcHRpdmVE
ZW11eCAqIGRlbXV4KQorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKHByb3Rl
Y3Rpb25fc3lzdGVtX2lkLCBwcm90ZWN0aW9uX2J1ZmZlciwKKyAgICAgICAgICAgInNtb290aC1z
dHJlYW1pbmciKTsKKyAKKy0gICAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLCAiUXVldWVpbmcg
UHJvdGVjdGlvbiBldmVudCBvbiBzb3VyY2UgcGFkIik7CisrICAgICAgR3N0QnVmZmVyICprZXlf
aWQgPSBnc3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKG1zc2RlbXV4LT5tYW5pZmVzdCk7Cisr
ICAgICAgaWYgKCFnc3RfYnVmZmVyX2dldF9zaXplIChrZXlfaWQpKSB7CisrICAgICAgICBHU1Rf
V0FSTklOR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAicHJvdGVjdGVkIG1hbmlmZXN0
LCBidXQgbm8ga2V5IGlkcyBhdmFpbGFibGUiKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAg
R1NUX0xPR19PQkpFQ1QgKHN0cmVhbSwKKysgICAgICAgICAgICAiQWRkaW5nIGtleSBpZCB0byB0
aGUgcHJvdGVjdGlvbiBldmVudCBvZiBzaXplICVsdSIsCisrICAgICAgICAgICAgZ3N0X2J1ZmZl
cl9nZXRfc2l6ZSAoa2V5X2lkKSk7CisrICAgICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2ZW50KTsKKysgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJrZXlfaWQiLCBHU1RfVFlQRV9CVUZGRVIsIGtleV9pZCwg
TlVMTCk7CisrICAgICAgfQorKworKyAgICAgIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0sICJRdWV1
aW5nIFByb3RlY3Rpb24gZXZlbnQgb24gc291cmNlIHBhZCIpOworICAgICAgIGdzdF9hZGFwdGl2
ZV9kZW11eF9zdHJlYW1fcXVldWVfZXZlbnQgKChHc3RBZGFwdGl2ZURlbXV4U3RyZWFtICopIHN0
cmVhbSwKKyAgICAgICAgICAgZXZlbnQpOworICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByb3Rl
Y3Rpb25fYnVmZmVyKTsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21h
bmlmZXN0LmMgYi9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmMKK2luZGV4IGM4
NTVjYjMuLmRmMzEzMzAgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21h
bmlmZXN0LmMKKysrKyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuYworQEAg
LTI4LDYgKzI4LDggQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8bGlieG1sL3Bh
cnNlci5oPgorICNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorKyNpbmNsdWRlIDxsaWJ4bWwveHBh
dGguaD4KKysjaW5jbHVkZSA8bGlieG1sL3hwYXRoSW50ZXJuYWxzLmg+CisgCisgLyogZm9yIHBh
cnNpbmcgaDI2NCBjb2RlYyBkYXRhICovCisgI2luY2x1ZGUgPGdzdC9jb2RlY3BhcnNlcnMvZ3N0
aDI2NHBhcnNlci5oPgorQEAgLTEwOSw2ICsxMTEsMTAgQEAgc3RydWN0IF9Hc3RNc3NNYW5pZmVz
dAorICAgR1N0cmluZyAqcHJvdGVjdGlvbl9zeXN0ZW1faWQ7CisgICBnY2hhciAqcHJvdGVjdGlv
bl9kYXRhOworIAorKyAgLy8gRklYTUU6IFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBrZXkgaWRzIHBy
ZXNlbnQgaW4gcHJvdGVjdGVkIG1hbmlmZXN0cy4KKysgIGdjaGFyICprZXlfaWQ7CisrICBnc2l6
ZSBrZXlfaWRfbGVuOworKworICAgR1NMaXN0ICpzdHJlYW1zOworIH07CisgCitAQCAtMzAwLDYg
KzMwNiwxMjIgQEAgX2dzdF9tc3Nfc3RyZWFtX2luaXQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZl
c3QsIEdzdE1zc1N0cmVhbSAqIHN0cmVhbSwKKyAgIGdzdF9tc3NfZnJhZ21lbnRfcGFyc2VyX2lu
aXQgKCZzdHJlYW0tPmZyYWdtZW50X3BhcnNlcik7CisgfQorIAorK3N0YXRpYyB2b2lkCisrX2dz
dF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQor
K3sKKysgIGd1Y2hhciAqZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEgPSBOVUxMOworKyAgZ3NpemUg
ZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGFfbGVuID0gMDsKKysgIHhtbENoYXIgKnByb3RlY3Rpb25f
ZGF0YV90ZXh0ID0gTlVMTDsKKysgIGludCBwcm90ZWN0aW9uX2RhdGFfdGV4dF9sZW4gPSAwOwor
KyAgeG1sRG9jUHRyIHByb3RlY3Rpb25fZGF0YV94bWwgPSBOVUxMOworKyAgLy8gTm90ZSwgdGhp
cyBkb2VzIG5vdCBuZWVkIHRvIGZyZWUnZCwgZnJlZWluZyB0aGUgZG9jIHB0ciB3aWxsIGZyZWUg
dGhpcy4KKysgIHhtbE5vZGUgKnByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQgPSBOVUxMOwor
KyAgY29uc3QgeG1sQ2hhciAqcHJvdGVjdGlvbl9kYXRhX25hbWVzcGFjZSA9IE5VTEw7CisrICB4
bWxYUGF0aENvbnRleHRQdHIgeHBhdGhfY3R4ID0gTlVMTDsKKysgIHhtbFhQYXRoT2JqZWN0UHRy
IHhwYXRoX29iaiA9IE5VTEw7CisrICB4bWxOb2RlU2V0UHRyIGtleV9pZF9ub2RlID0gTlVMTDsK
KysgIGdzaXplIHByb3RlY3Rpb25fZGF0YV94bWxfbGVuID0gMDsKKysgIGd1Y2hhciAqc3RhcnRf
dGFnID0gTlVMTDsKKysKKysgIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhID0KKysgICAgICBnX2Jh
c2U2NF9kZWNvZGUgKG1hbmlmZXN0LT5wcm90ZWN0aW9uX2RhdGEsICZkZWNvZGVkX3Byb3RlY3Rp
b25fZGF0YV9sZW4pOworKworKyAgc3RhcnRfdGFnID0gZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGE7
CisrCisrICAvLyBUaGUgcHJvdGVjdGlvbiBkYXRhIHN0YXJ0cyB3aXRoIGEgMTAtYnl0ZSBQbGF5
UmVhZHkgdmVyc2lvbgorKyAgLy8gaGVhZGVyIHRoYXQgbmVlZHMgdG8gYmUgc2tpcHBlZCBvdmVy
IHRvIGF2b2lkIFhNTCBwYXJzaW5nCisrICAvLyBlcnJvcnMuCisrICB3aGlsZSAoc3RhcnRfdGFn
ICYmICpzdGFydF90YWcgIT0gJzwnKQorKyAgICBzdGFydF90YWcrKzsKKysKKysgIGlmICghc3Rh
cnRfdGFnKSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBmaW5kIGEgc3RhcnQgdGFnIGlu
IHByb3RlY3Rpb24gZGF0YSBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7CisrICB9CisrCisr
ICBwcm90ZWN0aW9uX2RhdGFfeG1sX2xlbiA9CisrICAgICAgZGVjb2RlZF9wcm90ZWN0aW9uX2Rh
dGFfbGVuIC0gKHN0YXJ0X3RhZyAtIGRlY29kZWRfcHJvdGVjdGlvbl9kYXRhKTsKKysgIHByb3Rl
Y3Rpb25fZGF0YV94bWwgPQorKyAgICAgIHhtbFJlYWRNZW1vcnkgKChjb25zdCBnY2hhciAqKSBz
dGFydF90YWcsIHByb3RlY3Rpb25fZGF0YV94bWxfbGVuLAorKyAgICAgICJwcm90ZWN0aW9uX2Rh
dGEiLCAidXRmLTE2IiwgMCk7CisrCisrICBpZiAoIXByb3RlY3Rpb25fZGF0YV94bWwpIHsKKysg
ICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHBhcnNlIHByb3RlY3Rpb24gZGF0YSBYTUwiKTsKKysg
ICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3Ro
cmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxUKSA+PSBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICB4
bWxEb2NEdW1wTWVtb3J5RW5jIChwcm90ZWN0aW9uX2RhdGFfeG1sLCAmcHJvdGVjdGlvbl9kYXRh
X3RleHQsCisrICAgICAgICAmcHJvdGVjdGlvbl9kYXRhX3RleHRfbGVuLCAidXRmOCIpOworKyAg
ICBHU1RfTUVNRFVNUCAoInByb3RlY3Rpb24gZGF0YSBYTUwiLCBwcm90ZWN0aW9uX2RhdGFfdGV4
dCwKKysgICAgICAgIHByb3RlY3Rpb25fZGF0YV90ZXh0X2xlbik7CisrICAgIHhtbEZyZWUgKHBy
b3RlY3Rpb25fZGF0YV90ZXh0KTsKKysgIH0KKysKKysgIHByb3RlY3Rpb25fZGF0YV9yb290X2Vs
ZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudCAocHJvdGVjdGlvbl9kYXRhX3htbCk7CisrICBp
ZiAocHJvdGVjdGlvbl9kYXRhX3Jvb3RfZWxlbWVudC0+dHlwZSAhPSBYTUxfRUxFTUVOVF9OT0RF
IHx8CisrICAgICAgeG1sU3RyY21wIChwcm90ZWN0aW9uX2RhdGFfcm9vdF9lbGVtZW50LT5uYW1l
LAorKyAgICAgICAgICAoY29uc3QgeG1sQ2hhciAqKSAiV1JNSEVBREVSIikgfHwgIXByb3RlY3Rp
b25fZGF0YV9yb290X2VsZW1lbnQtPm5zKSB7CisrICAgIEdTVF9FUlJPUiAoImludmFsaWQgcHJv
dGVjdGlvbiBkYXRhIFhNTCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgeHBhdGhf
Y3R4ID0geG1sWFBhdGhOZXdDb250ZXh0IChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysgIGlmICgh
eHBhdGhfY3R4KSB7CisrICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjcmVhdGUgeHBhdGggY29u
dGV4dCIpOworKyAgICBnb3RvIGJlYWNoOworKyAgfQorKworKyAgcHJvdGVjdGlvbl9kYXRhX25h
bWVzcGFjZSA9IHByb3RlY3Rpb25fZGF0YV9yb290X2VsZW1lbnQtPm5zLT5ocmVmOworKyAgaWYg
KHhtbFhQYXRoUmVnaXN0ZXJOcyAoeHBhdGhfY3R4LCAoY29uc3QgeG1sQ2hhciAqKSAicHJoZHIi
LAorKyAgICAgICAgICBwcm90ZWN0aW9uX2RhdGFfbmFtZXNwYWNlKSA8IDApIHsKKysgICAgR1NU
X0VSUk9SICgiZmFpbGVkIHRvIHJlZ2lzdGVyIFhNTCBuYW1lc3BhY2UiKTsKKysgICAgZ290byBi
ZWFjaDsKKysgIH0KKysKKysgIHhwYXRoX29iaiA9CisrICAgICAgeG1sWFBhdGhFdmFsRXhwcmVz
c2lvbiAoKGNvbnN0IHhtbENoYXIgKikgIi8vcHJoZHI6S0lEIiwgeHBhdGhfY3R4KTsKKysgIGlm
ICgheHBhdGhfb2JqKSB7CisrICAgIEdTVF9ERUJVRyAoImZhaWxlZCB0byBldmFsIFhQYXRoIGV4
cHJlc3Npb24iKTsKKysgICAgZ290byBiZWFjaDsKKysgIH0KKysKKysgIGtleV9pZF9ub2RlID0g
eHBhdGhfb2JqLT5ub2Rlc2V0dmFsOworKyAgaW50IG51bV9rZXlfaWRzID0ga2V5X2lkX25vZGUg
PyBrZXlfaWRfbm9kZS0+bm9kZU5yIDogMDsKKysKKysgIEdTVF9ERUJVRyAoImZvdW5kICVkIGtl
eSBpZHMiLCBudW1fa2V5X2lkcyk7CisrCisrICBpZiAobnVtX2tleV9pZHMgIT0gMCAmJiAoa2V5
X2lkX25vZGUtPm5vZGVUYWJbMF0tPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkpIHsKKysgICAg
eG1sQ2hhciAqZW5jb2RlZF9rZXlfaWQgPSB4bWxOb2RlR2V0Q29udGVudCAoa2V5X2lkX25vZGUt
Pm5vZGVUYWJbMF0pOworKyAgICBnc2l6ZSBkZWNvZGVkX2tleV9pZF9sZW47CisrICAgIGd1Y2hh
ciAqZGVjb2RlZF9rZXlfaWQgPQorKyAgICAgICAgZ19iYXNlNjRfZGVjb2RlICgoY29uc3QgZ2No
YXIgKikgZW5jb2RlZF9rZXlfaWQsICZkZWNvZGVkX2tleV9pZF9sZW4pOworKworKyAgICBHU1Rf
TUVNRFVNUCAoImtleSByZXRyaWV2ZWQiLCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRf
bGVuKTsKKysKKysgICAgbWFuaWZlc3QtPmtleV9pZCA9IGdfcmVhbGxvYyAobWFuaWZlc3QtPmtl
eV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWVtY3B5IChtYW5pZmVzdC0+a2V5X2lk
LCBkZWNvZGVkX2tleV9pZCwgZGVjb2RlZF9rZXlfaWRfbGVuKTsKKysgICAgbWFuaWZlc3QtPmtl
eV9pZF9sZW4gPSBkZWNvZGVkX2tleV9pZF9sZW47CisrCisrICAgIHhtbEZyZWUgKGVuY29kZWRf
a2V5X2lkKTsKKysgICAgZ19mcmVlIChkZWNvZGVkX2tleV9pZCk7CisrICB9IGVsc2UgeworKyAg
ICBHU1RfRVJST1IgKCJpbnZhbGlkIFhNTCBwYXlsb2FkIik7CisrICAgIGdvdG8gYmVhY2g7Cisr
ICB9CisrCisrYmVhY2g6CisrICBpZiAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpCisrICAgIGdf
ZnJlZSAoZGVjb2RlZF9wcm90ZWN0aW9uX2RhdGEpOworKyAgaWYgKHhwYXRoX2N0eCkKKysgICAg
eG1sWFBhdGhGcmVlQ29udGV4dCAoeHBhdGhfY3R4KTsKKysgIGlmICh4cGF0aF9vYmopCisrICAg
IHhtbFhQYXRoRnJlZU9iamVjdCAoeHBhdGhfb2JqKTsKKysgIGlmIChwcm90ZWN0aW9uX2RhdGFf
eG1sKQorKyAgICB4bWxGcmVlRG9jIChwcm90ZWN0aW9uX2RhdGFfeG1sKTsKKysKKysgIHJldHVy
bjsKKyt9CisgCisgc3RhdGljIHZvaWQKKyBfZ3N0X21zc19wYXJzZV9wcm90ZWN0aW9uIChHc3RN
c3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorQEAgLTMyOSw2ICs0NTEsNyBAQCBfZ3N0X21zc19wYXJz
ZV9wcm90ZWN0aW9uIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LAorIAorICAgICAgIG1hbmlm
ZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCA9IHN5c3RlbV9pZDsKKyAgICAgICBtYW5pZmVzdC0+
cHJvdGVjdGlvbl9kYXRhID0gKGdjaGFyICopIHhtbE5vZGVHZXRDb250ZW50IChub2RlaXRlcik7
CisrICAgICAgX2dzdF9tc3NfcGFyc2VfcHJvdGVjdGlvbl9kYXRhIChtYW5pZmVzdCk7CisgICAg
ICAgeG1sRnJlZSAoc3lzdGVtX2lkX2F0dHJpYnV0ZSk7CisgICAgICAgYnJlYWs7CisgICAgIH0K
K0BAIC0zOTQsNiArNTE3LDkgQEAgZ3N0X21zc19tYW5pZmVzdF9uZXcgKEdzdEJ1ZmZlciAqIGRh
dGEpCisgICAgIH0KKyAgIH0KKyAKKysgIG1hbmlmZXN0LT5rZXlfaWQgPSBOVUxMOworKyAgbWFu
aWZlc3QtPmtleV9pZF9sZW4gPSAwOworKworICAgZm9yIChub2RlaXRlciA9IHJvb3QtPmNoaWxk
cmVuOyBub2RlaXRlcjsgbm9kZWl0ZXIgPSBub2RlaXRlci0+bmV4dCkgeworICAgICBpZiAobm9k
ZWl0ZXItPnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERQorICAgICAgICAgJiYgKHN0cmNtcCAoKGNv
bnN0IGNoYXIgKikgbm9kZWl0ZXItPm5hbWUsICJTdHJlYW1JbmRleCIpID09IDApKSB7CitAQCAt
NDQwLDYgKzU2Niw5IEBAIGdzdF9tc3NfbWFuaWZlc3RfZnJlZSAoR3N0TXNzTWFuaWZlc3QgKiBt
YW5pZmVzdCkKKyAKKyAgIGdfc2xpc3RfZnJlZV9mdWxsIChtYW5pZmVzdC0+c3RyZWFtcywgKEdE
ZXN0cm95Tm90aWZ5KSBnc3RfbXNzX3N0cmVhbV9mcmVlKTsKKyAKKysgIGlmIChtYW5pZmVzdC0+
a2V5X2lkKQorKyAgICBnX2ZyZWUgKG1hbmlmZXN0LT5rZXlfaWQpOworKworICAgaWYgKG1hbmlm
ZXN0LT5wcm90ZWN0aW9uX3N5c3RlbV9pZCAhPSBOVUxMKQorICAgICBnX3N0cmluZ19mcmVlICht
YW5pZmVzdC0+cHJvdGVjdGlvbl9zeXN0ZW1faWQsIFRSVUUpOworICAgeG1sRnJlZSAobWFuaWZl
c3QtPnByb3RlY3Rpb25fZGF0YSk7CitAQCAtNDYyLDYgKzU5MSwxNSBAQCBnc3RfbXNzX21hbmlm
ZXN0X2dldF9wcm90ZWN0aW9uX2RhdGEgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisgICBy
ZXR1cm4gbWFuaWZlc3QtPnByb3RlY3Rpb25fZGF0YTsKKyB9CisgCisrR3N0QnVmZmVyICoKKytn
c3RfbXNzX21hbmlmZXN0X2dldF9rZXlfaWQgKEdzdE1zc01hbmlmZXN0ICogbWFuaWZlc3QpCisr
eworKyAgR3N0QnVmZmVyICprZXlfaWRfYnVmZmVyID0KKysgICAgICBnc3RfYnVmZmVyX25ld19h
bGxvY2F0ZSAoTlVMTCwgbWFuaWZlc3QtPmtleV9pZF9sZW4sIE5VTEwpOworKyAgZ3N0X2J1ZmZl
cl9maWxsIChrZXlfaWRfYnVmZmVyLCAwLCBtYW5pZmVzdC0+a2V5X2lkLCBtYW5pZmVzdC0+a2V5
X2lkX2xlbik7CisrICByZXR1cm4ga2V5X2lkX2J1ZmZlcjsKKyt9CisrCisgR1NMaXN0ICoKKyBn
c3RfbXNzX21hbmlmZXN0X2dldF9zdHJlYW1zIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KQor
IHsKK2RpZmYgLS1naXQgYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmggYi9l
eHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKK2luZGV4IDAzYjA2NmEuLjRlNmFk
NzMgMTAwNjQ0CistLS0gYS9leHQvc21vb3Roc3RyZWFtaW5nL2dzdG1zc21hbmlmZXN0LmgKKysr
KyBiL2V4dC9zbW9vdGhzdHJlYW1pbmcvZ3N0bXNzbWFuaWZlc3QuaAorQEAgLTU2LDYgKzU2LDcg
QEAgR3N0Q2xvY2tUaW1lIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X21pbl9mcmFnbWVudF9kdXJhdGlv
biAoR3N0TXNzTWFuaWZlc3QgKiBtYW5pZmUKKyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZl
c3RfZ2V0X3Byb3RlY3Rpb25fc3lzdGVtX2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsK
KyBjb25zdCBnY2hhciAqIGdzdF9tc3NfbWFuaWZlc3RfZ2V0X3Byb3RlY3Rpb25fZGF0YSAoR3N0
TXNzTWFuaWZlc3QgKiBtYW5pZmVzdCk7CisgZ2Jvb2xlYW4gZ3N0X21zc19tYW5pZmVzdF9nZXRf
bGl2ZV9zZWVrX3JhbmdlIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0LCBnaW50NjQgKiBzdGFy
dCwgZ2ludDY0ICogc3RvcCk7CisrR3N0QnVmZmVyICogZ3N0X21zc19tYW5pZmVzdF9nZXRfa2V5
X2lkIChHc3RNc3NNYW5pZmVzdCAqIG1hbmlmZXN0KTsKKyAKKyBHc3RNc3NTdHJlYW1UeXBlIGdz
dF9tc3Nfc3RyZWFtX2dldF90eXBlIChHc3RNc3NTdHJlYW0gKnN0cmVhbSk7CisgR3N0Q2FwcyAq
IGdzdF9tc3Nfc3RyZWFtX2dldF9jYXBzIChHc3RNc3NTdHJlYW0gKiBzdHJlYW0pOworLS0gCisy
LjIwLjEKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3N0cmVhbWVyL3BhdGNoZXMvZ3N0LXBsdWdpbnMt
Z29vZC0wMDAyLUNoZWNrLWlmLWFuLXVwc3RyZWFtLWRlbXV4ZXItcHJvdmlkZWQtYS1kZWZhdWx0
LWtpZC5wYXRjaCBiL1Rvb2xzL2dzdHJlYW1lci9wYXRjaGVzL2dzdC1wbHVnaW5zLWdvb2QtMDAw
Mi1DaGVjay1pZi1hbi11cHN0cmVhbS1kZW11eGVyLXByb3ZpZGVkLWEtZGVmYXVsdC1raWQucGF0
Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNWY1YmIzNDhhMWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9nc3RyZWFtZXIvcGF0Y2hlcy9nc3QtcGx1Z2lucy1n
b29kLTAwMDItQ2hlY2staWYtYW4tdXBzdHJlYW0tZGVtdXhlci1wcm92aWRlZC1hLWRlZmF1bHQt
a2lkLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGE4MTZkOGRhYjZiYjMzNzcwMTUwMjg5
YTRhZWRlNDNlMmY3YWU0NzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGFybGll
IFR1cm5lciA8Y2h0dXJuZUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIE1heSAyMDE5IDIzOjM0
OjQzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIGFuIHVwc3RyZWFtIGRlbXV4ZXIg
cHJvdmlkZWQgYSBkZWZhdWx0IGtpZC4KKworU21vb3RoIHN0cmVhbWluZyBkZW11eGVycyBkbyBu
b3Qgc2VuZCBib3hlcyBjb250YWluaW5nIG1ldGFkYXRhIGFib3V0Cit0aGUgc3RyZWFtLiBUaGV5
IGhhdmUgdG8gc2VuZCBtZXRhZGF0YSAib3V0LW9mLWJhbmQiLgorCitGb3IgcGlmZiBlbmNvZGVk
IHN0cmVhbXMsIGlmIG5vIGJveCBoYXMgYmVlbiBmb3VuZCBjb250YWluaW5nIGEgZGVmYXVsdAor
a2lkIGZvciB0aGUgc2FtcGxlLCBjaGVjayBpZiBhbiB1cHN0cmVhbSBkZW11eGVyIGhhcyBwcm92
aWRlZCBvbmUgdmlhIGEKK3Byb3RlY3Rpb24gZXZlbnQsIGFuZCB1c2UgdGhpcyBhcyBhIGZhbGxi
YWNrLgorCitTaWduZWQtb2ZmLWJ5OiBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNA
aWdhbGlhLmNvbT4KKy0tLQorIGdzdC9pc29tcDQvcXRkZW11eC5jIHwgNDMgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MyBpbnNl
cnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXguYyBiL2dzdC9pc29t
cDQvcXRkZW11eC5jCitpbmRleCBjZjE1ZmFkNDYuLmU0NDliNDgwYyAxMDA2NDQKKy0tLSBhL2dz
dC9pc29tcDQvcXRkZW11eC5jCisrKysgYi9nc3QvaXNvbXA0L3F0ZGVtdXguYworQEAgLTQ1MSw2
ICs0NTEsNyBAQCBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0KKyAgIGd1aW50MzIgcHJvdGVjdGlvbl9z
Y2hlbWVfdmVyc2lvbjsKKyAgIGdwb2ludGVyIHByb3RlY3Rpb25fc2NoZW1lX2luZm87ICAgICAg
Lyogc3BlY2lmaWMgdG8gdGhlIHByb3RlY3Rpb24gc2NoZW1lICovCisgICBHUXVldWUgcHJvdGVj
dGlvbl9zY2hlbWVfZXZlbnRfcXVldWU7CisrICBHc3RCdWZmZXIgKmRlZmF1bHRfa2lkOworIAor
ICAgZ2ludCByZWZfY291bnQ7ICAgICAgICAgICAgICAgLyogYXRvbWljICovCisgfTsKK0BAIC0y
MDA4LDYgKzIwMDksNyBAQCBfY3JlYXRlX3N0cmVhbSAoR3N0UVREZW11eCAqIGRlbXV4LCBndWlu
dDMyIHRyYWNrX2lkKQorICAgc3RyZWFtLT5zdHJlYW1fdGFncyA9IGdzdF90YWdfbGlzdF9uZXdf
ZW1wdHkgKCk7CisgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChzdHJlYW0tPnN0cmVhbV90YWdz
LCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7CisgICBnX3F1ZXVlX2luaXQgKCZzdHJlYW0tPnByb3Rl
Y3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlKTsKKysgIHN0cmVhbS0+ZGVmYXVsdF9raWQgPSBOVUxM
OworICAgc3RyZWFtLT5yZWZfY291bnQgPSAxOworICAgLyogY29uc2lzdGVudCBkZWZhdWx0IGZv
ciBwdXNoIGJhc2VkIG1vZGUgKi8KKyAgIGdzdF9zZWdtZW50X2luaXQgKCZzdHJlYW0tPnNlZ21l
bnQsIEdTVF9GT1JNQVRfVElNRSk7CitAQCAtMjQ3Niw2ICsyNDc4LDMyIEBAIGdzdF9xdGRlbXV4
X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQs
CisgICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046CisgICAgIHsKKyAgICAgICBjb25zdCBn
Y2hhciAqc3lzdGVtX2lkID0gTlVMTDsKKysgICAgICBHc3RCdWZmZXIgKmRlZmF1bHRfa2V5X2lk
ID0gTlVMTDsKKysgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKysgICAgICBR
dERlbXV4U3RyZWFtICpzdHJlYW0gPSBOVUxMOworKyAgICAgIEdzdE1hcEluZm8gbWFwOworKwor
KyAgICAgIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7CisrICAg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUsICJrZXlfaWQi
LCBHU1RfVFlQRV9CVUZGRVIpKSB7CisrICAgICAgICBnc3Rfc3RydWN0dXJlX2dldCAoc3RydWN0
dXJlLCAia2V5X2lkIiwgR1NUX1RZUEVfQlVGRkVSLAorKyAgICAgICAgICAgICZkZWZhdWx0X2tl
eV9pZCwgTlVMTCk7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKKysgICAgICAg
ICAgICAicmVjZWl2ZWQgYSBkZWZhdWx0IGtleSBpZCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFU
LAorKyAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGRlZmF1bHRfa2V5X2lkKSk7Cisr
CisrICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRf
REVGQVVMVCkgPj0KKysgICAgICAgICAgICBHU1RfTEVWRUxfTUVNRFVNUCkgeworKyAgICAgICAg
ICBnc3RfYnVmZmVyX21hcCAoZGVmYXVsdF9rZXlfaWQsICZtYXAsIEdTVF9NQVBfUkVBRCk7Cisr
ICAgICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAoZGVtdXgsICJkZWZhdWx0IGtleSBpZCIsIChn
dWludDggKikgbWFwLmRhdGEsCisrICAgICAgICAgICAgICBtYXAuc2l6ZSk7CisrICAgICAgICAg
IGdzdF9idWZmZXJfdW5tYXAgKGRlZmF1bHRfa2V5X2lkLCAmbWFwKTsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGlmIChRVERFTVVYX05fU1RSRUFNUyAoZGVtdXgpKSB7CisrICAgICAgICAgIHN0
cmVhbSA9IFFUREVNVVhfTlRIX1NUUkVBTSAoZGVtdXgsIDApOworKyAgICAgICAgICBzdHJlYW0t
PmRlZmF1bHRfa2lkID0gZGVmYXVsdF9rZXlfaWQ7CisrICAgICAgICB9CisrICAgICAgfQorIAor
ICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uIChldmVudCwgJnN5c3RlbV9pZCwgTlVM
TCwgTlVMTCk7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZWNlaXZlZCBwcm90
ZWN0aW9uIGV2ZW50IGZvciBzeXN0ZW0gSUQgJXMiLAorQEAgLTI2ODgsNiArMjcxNiw4IEBAIGdz
dF9xdGRlbXV4X3N0cmVhbV9jbGVhciAoUXREZW11eFN0cmVhbSAqIHN0cmVhbSkKKyAgIGdfcXVl
dWVfZm9yZWFjaCAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUsCisgICAg
ICAgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwpOworICAgZ19xdWV1ZV9jbGVhciAoJnN0
cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUpOworKyAgaWYgKHN0cmVhbS0+ZGVm
YXVsdF9raWQpCisrICAgIGdzdF9idWZmZXJfdW5yZWYgKHN0cmVhbS0+ZGVmYXVsdF9raWQpOwor
ICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21lbnRzX2RhdGEgKHN0cmVhbSk7CisgICBn
c3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19kYXRhIChzdHJlYW0pOworIH0KK0BAIC0y
OTU0LDYgKzI5ODQsMTkgQEAgcXRkZW11eF9wYXJzZV9waWZmIChHc3RRVERlbXV4ICogcXRkZW11
eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBnaW50IGxlbmd0aCwKKyAgICAgdXNlc19zdWJfc2Ft
cGxlX2VuY3J5cHRpb24gPSBUUlVFOworICAgfQorIAorKyAgLy8gSW4gdGhlIGNhc2Ugb2Ygc21v
b3RoIHN0cmVhbWluZywgd2UgbmV2ZXIgZ2V0IG1vb3YgYm94ZXMgYW5kIHRoZWlyCisrICAvLyBk
ZWZhdWx0IGVuY3J5cHRpb24gbWV0YWRhdGEuIEluc3RlYWQsIHRoZSBkZW11eGVyIGhhcyB0byBw
YXJzZSB0aGlzCisrICAvLyBpbmZvcm1hdGlvbiBvdXQgb2YgdGhlIHBsYXlyZWFkeSBzcGVjaWZp
YyBwYXlsb2FkcyBhbmQgbWFrZSBpdCBhdmFpbGJsZQorKyAgLy8gc29tZWhvdyB0byB1cy4KKysg
IGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGll
cywgImtpZCIpKSB7CisrICAgIGlmICghc3RyZWFtLT5kZWZhdWx0X2tpZCkgeworKyAgICAgIEdT
VF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIk5vIGF2YWlsYWJsZSBrZXkgaWQgZm9yIHNhbXBs
ZSIpOworKyAgICB9IGVsc2UgeworKyAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzc19pbmZvLT5k
ZWZhdWx0X3Byb3BlcnRpZXMsICJraWQiLCBHU1RfVFlQRV9CVUZGRVIsCisrICAgICAgICAgIHN0
cmVhbS0+ZGVmYXVsdF9raWQsIE5VTEwpOworKyAgICB9CisrICB9CisrCisgICBpZiAoIWdzdF9z
dHJ1Y3R1cmVfZ2V0X3VpbnQgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcywgIml2X3NpemUi
LAorICAgICAgICAgICAmaXZfc2l6ZSkpIHsKKyAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11
eCwgIkVycm9yIGdldHRpbmcgZW5jcnlwdGlvbiBJViBzaXplIGZpZWxkIik7CistLSAKKzIuMjAu
MQorCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMgYi9Ub29scy9n
dGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKaW5kZXggMTRmMjU1NjI4ZDNhLi5mMDgzZGY3YTEyMWEg
MTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9pbnN0YWxsLWRlcGVuZGVuY2llcworKysgYi9Ub29scy9n
dGsvaW5zdGFsbC1kZXBlbmRlbmNpZXMKQEAgLTE5MCw2ICsxOTAsNyBAQCBmdW5jdGlvbiBpbnN0
YWxsRGVwZW5kZW5jaWVzV2l0aEFwdCB7CiAgICAgICAgIGdpdCBcCiAgICAgICAgIGdvYmplY3Qt
aW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtZGV2IFwK
KyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1uYW1pbmctdXRpbHMgXAogICAgICAgICBsaWJj
cm9jbzMtZGV2IFwKICAgICAgICAgbGliY3VwczItZGV2IFwKQEAgLTM4Nyw2ICszODgsNyBAQCBm
dW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aFBhY21hbiB7CiAgICAgICAgIGdudXRscyBc
CiAgICAgICAgIGdvYmplY3QtaW50cm9zcGVjdGlvbiBcCiAgICAgICAgIGdzZXR0aW5ncy1kZXNr
dG9wLXNjaGVtYXMgXAorICAgICAgICBneXAgXAogICAgICAgICBpY29uLW5hbWluZy11dGlscyBc
CiAgICAgICAgIGxpYmNyb2NvIFwKICAgICAgICAgbGliY3VwcyBcCkBAIC01NzgsNiArNTgwLDcg
QEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dpdGhEbmYgewogICAgICAgICBnbnV0bHMt
ZGV2ZWwgXAogICAgICAgICBnb2JqZWN0LWludHJvc3BlY3Rpb24gXAogICAgICAgICBnc2V0dGlu
Z3MtZGVza3RvcC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgaWNvbi1u
YW1pbmctdXRpbHMgXAogICAgICAgICBpdHN0b29sIFwKICAgICAgICAgbGliWGZvbnQyLWRldmVs
IFwKZGlmZiAtLWdpdCBhL1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weSBiL1Rvb2xz
L2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQppbmRleCA2OTEwMmVmYzY4ZDkuLjdlYTljNDc0
NWJlMyAxMDA2NDQKLS0tIGEvVG9vbHMvamhidWlsZC9qaGJ1aWxkcmNfY29tbW9uLnB5CisrKyBi
L1Rvb2xzL2poYnVpbGQvamhidWlsZHJjX2NvbW1vbi5weQpAQCAtOTUsMyArOTUsOCBAQCBkZWYg
aW5pdChqaGJ1aWxkcmNfZ2xvYmFscywgamhidWlsZF9wbGF0Zm9ybSk6CiAKICAgICBpZiAneDg2
XzY0JyBpbiBwbGF0Zm9ybS5tYWNoaW5lKCk6CiAgICAgICAgIGpoYnVpbGRyY19nbG9iYWxzWydj
b25kaXRpb25zJ10uYWRkKCd4ODZfNjQnKQorCisgICAgaWYgJ0pIQlVJTERfRU5BQkxFX1RIVU5E
RVInIGluIG9zLmVudmlyb246CisgICAgICAgIGpoYnVpbGRfZW5hYmxlX3RodW5kZXIgPSBvcy5l
bnZpcm9uWydKSEJVSUxEX0VOQUJMRV9USFVOREVSJ10ubG93ZXIoKQorICAgICAgICBpZiBqaGJ1
aWxkX2VuYWJsZV90aHVuZGVyID09ICd5ZXMnIG9yIGpoYnVpbGRfZW5hYmxlX3RodW5kZXIgPT0g
JzEnIG9yIGpoYnVpbGRfZW5hYmxlX3RodW5kZXIgPT0gJ3RydWUnOgorICAgICAgICAgICAgamhi
dWlsZHJjX2dsb2JhbHNbJ2NvbmRpdGlvbnMnXS5hZGQoJ1RodW5kZXInKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvd3BlL2luc3RhbGwtZGVwZW5kZW5jaWVzIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5k
ZW5jaWVzCmluZGV4IGU3YTBiZTIwYWI0Yy4uNDhkZmMyMDVmOWVmIDEwMDc1NQotLS0gYS9Ub29s
cy93cGUvaW5zdGFsbC1kZXBlbmRlbmNpZXMKKysrIGIvVG9vbHMvd3BlL2luc3RhbGwtZGVwZW5k
ZW5jaWVzCkBAIC0xMjAsNiArMTIwLDcgQEAgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1dp
dGhBcHQgewogICAgIHBhY2thZ2VzPSIkcGFja2FnZXMgXAogICAgICAgICBnaXQgXAogICAgICAg
ICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzLWRldiBcCisgICAgICAgIGd5cCBcCiAgICAgICAg
IGxpYmVnbDEtbWVzYS1kZXYgXAogICAgICAgICBsaWJleHBhdDEtZGV2IFwKICAgICAgICAgbGli
ZmRrLWFhYy1kZXYgXApAQCAtMjQ4LDYgKzI0OSw3IEBAIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRl
bmNpZXNXaXRoUGFjbWFuIHsKICAgICAgICAgZXhwYXQgXAogICAgICAgICBnaXQgXAogICAgICAg
ICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGli
ZmRrLWFhYyBcCiAgICAgICAgIGxpYnByb3h5IFwKICAgICAgICAgbGlicHNsIFwKQEAgLTM3Niw2
ICszNzgsNyBAQCBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzV2l0aERuZiB7CiAgICAgICAg
IGZkay1hYWMtZGV2ZWwgXAogICAgICAgICBnaXQgXAogICAgICAgICBnc2V0dGluZ3MtZGVza3Rv
cC1zY2hlbWFzLWRldmVsIFwKKyAgICAgICAgZ3lwIFwKICAgICAgICAgbGlibW91bnQtZGV2ZWwg
XAogICAgICAgICBsaWJwcm94eS1kZXZlbCBcCiAgICAgICAgIGxpYnBzbC1kZXZlbCBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>