<?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>151221</bug_id>
          
          <creation_ts>2015-11-12 13:58:00 -0800</creation_ts>
          <short_desc>Adopt AVContentKeySession</short_desc>
          <delta_ts>2015-12-04 14:42:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>jonlee</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141624</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-11-12 13:58:00 -0800</bug_when>
    <thetext>Adopt AVContentKeySession</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141627</commentid>
    <comment_count>1</comment_count>
      <attachid>265432</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-11-12 14:03:06 -0800</bug_when>
    <thetext>Created attachment 265432
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145700</commentid>
    <comment_count>2</comment_count>
      <attachid>266468</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-12-02 13:14:46 -0800</bug_when>
    <thetext>Created attachment 266468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145975</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2015-12-03 11:27:09 -0800</bug_when>
    <thetext>rdar://problem/20001946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146057</commentid>
    <comment_count>4</comment_count>
      <attachid>266559</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-12-03 14:29:05 -0800</bug_when>
    <thetext>Created attachment 266559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146404</commentid>
    <comment_count>5</comment_count>
      <attachid>266559</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-12-04 14:22:04 -0800</bug_when>
    <thetext>Comment on attachment 266559
Patch

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

&gt; Source/WebCore/ChangeLog:53
&gt; +        (-[CDMSessionAVStreamSessionObserver initWithParent:]): Moved from AVSessionMediaSourceAVFObjC.

Don&apos;t you mean CDMSessionMediaSourceAVFObjCObserver?

&gt; Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp:121
&gt; +        if (errorCode) {

Oops :-O

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:54
&gt; +    virtual RefPtr&lt;Uint8Array&gt; generateKeyRequest(const String&amp; mimeType, Uint8Array* initData, String&amp; destinationURL, unsigned short&amp; errorCode, unsigned long&amp; systemCode) override;
&gt; +    virtual void releaseKeys() override;
&gt; +    virtual bool update(Uint8Array*, RefPtr&lt;Uint8Array&gt;&amp; nextMessage, unsigned short&amp; errorCode, unsigned long&amp; systemCode) override;

Nit: why name initData and not the first parameter to update? Why name nextMessage?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:82
&gt; +inline CDMSessionAVContentKeySession* toCDMSessionAVContentKeySession(CDMSession* session)
&gt; +{
&gt; +    if (!session || session-&gt;type() != CDMSessionTypeAVContentKeySession)
&gt; +        return nullptr;
&gt; +    return static_cast&lt;CDMSessionAVContentKeySession*&gt;(session);

Is it ever OK for someone to call this with anything except a CDMSessionTypeAVContentKeySession? If not, you should add an ASSERT.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:97
&gt; +
&gt; +

Nit: don&apos;t need two blank lines.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:171
&gt; +    if (equalIgnoringCase(mimeType, &quot;keyrelease&quot;)) {
&gt; +        m_mode = KeyRelease;
&gt; +        return generateKeyReleaseMessage(errorCode, systemCode);
&gt; +    }
&gt; +
&gt; +    if (!m_certificate) {
&gt; +        String certificateString(ASCIILiteral(&quot;certificate&quot;));
&gt; +        RefPtr&lt;Uint8Array&gt; array = Uint8Array::create(certificateString.length());
&gt; +        for (unsigned i = 0, length = certificateString.length(); i &lt; length; ++i)
&gt; +            array-&gt;set(i, certificateString[i]);
&gt; +        return array;
&gt; +    }

It looks like this is exactly the same in CDMSessionAVStreamSession, can you put it in the base class?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:183
&gt; +    if (hasContentKeySession()) {

Nit: this could be an early return.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:229
&gt; +static bool isEqual(Uint8Array* data, const char* literal)
&gt; +{
&gt; +    ASSERT(data);
&gt; +    ASSERT(literal);
&gt; +    unsigned length = data-&gt;length();
&gt; +
&gt; +    for (unsigned i = 0; i &lt; length; ++i) {
&gt; +        if (!literal[i])
&gt; +            return false;
&gt; +
&gt; +        if (data-&gt;item(i) != static_cast&lt;uint8_t&gt;(literal[i]))
&gt; +            return false;
&gt; +    }
&gt; +    return !literal[length];
&gt; +}

It looks like this is exactly the same in CDMSessionAVStreamSession, can you put it in the base class?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:286
&gt; +        NSData* requestData = [m_keyRequest contentKeyRequestDataForApp:certificateData.get() contentIdentifier:initData.get() options:options.get() error:nil];

Doesn&apos;t this leak?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:319
&gt; +        systemCode = &apos;!mor&apos;;

Can you return &apos;!mor&apos; from a method in the base class?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

:-O

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:52
&gt; +    virtual RefPtr&lt;Uint8Array&gt; generateKeyRequest(const String&amp; mimeType, Uint8Array* initData, String&amp; destinationURL, unsigned short&amp; errorCode, unsigned long&amp; systemCode) override;
&gt; +    virtual void releaseKeys() override;
&gt; +    virtual bool update(Uint8Array*, RefPtr&lt;Uint8Array&gt;&amp; nextMessage, unsigned short&amp; errorCode, unsigned long&amp; systemCode) override;

Ditto my nit from the other class header.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

:-O

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:140
&gt; +void CDMSessionAVStreamSession::releaseKeys()

This whole method is annoyingly similar to CDMSessionAVContentKeySession::releaseKeys...

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:216
&gt; +    bool shouldGenerateKeyRequest = !m_certificate || isEqual(key, &quot;renew&quot;);
&gt; +    if (!m_certificate) {
&gt; +        LOG(Media, &quot;CDMSessionAVStreamSession::update(%p) - certificate data&quot;, this);
&gt; +
&gt; +        m_certificate = key;
&gt; +    }
&gt; +
&gt; +    if (isEqual(key, &quot;acknowledged&quot;)) {
&gt; +        LOG(Media, &quot;CDMSessionAVStreamSession::update(%p) - acknowleding secure stop message&quot;, this);
&gt; +
&gt; +        if (!m_expiredSession) {
&gt; +            errorCode = MediaPlayer::InvalidPlayerState;
&gt; +            return false;
&gt; +        }
&gt; +
&gt; +        RetainPtr&lt;NSData&gt; certificateData = adoptNS([[NSData alloc] initWithBytes:m_certificate-&gt;data() length:m_certificate-&gt;length()]);
&gt; +
&gt; +        if ([getAVStreamSessionClass() respondsToSelector:@selector(removePendingExpiredSessionReports:withAppIdentifier:storageDirectoryAtURL:)])
&gt; +            [getAVStreamSessionClass() removePendingExpiredSessionReports:@[m_expiredSession.get()] withAppIdentifier:certificateData.get() storageDirectoryAtURL:[NSURL fileURLWithPath:storagePath()]];
&gt; +        m_expiredSession = nullptr;
&gt; +        return true;
&gt; +    }
&gt; +
&gt; +    if (m_mode == KeyRelease)
&gt; +        return false;

It looks like this is exactly the same as the first part of CDMSessionAVContentKeySession::update. Can you put it into a shared method in the base class?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:237
&gt; +
&gt; +

Nit: two blank lines.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2014-2015?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:2
&gt; - * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146407</commentid>
    <comment_count>6</comment_count>
      <attachid>266559</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-12-04 14:32:45 -0800</bug_when>
    <thetext>Comment on attachment 266559
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:53
&gt;&gt; +        (-[CDMSessionAVStreamSessionObserver initWithParent:]): Moved from AVSessionMediaSourceAVFObjC.
&gt; 
&gt; Don&apos;t you mean CDMSessionMediaSourceAVFObjCObserver?

I actually meant the source file, but you&apos;re right.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:54
&gt;&gt; +    virtual bool update(Uint8Array*, RefPtr&lt;Uint8Array&gt;&amp; nextMessage, unsigned short&amp; errorCode, unsigned long&amp; systemCode) override;
&gt; 
&gt; Nit: why name initData and not the first parameter to update? Why name nextMessage?

Copy pasta.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:82
&gt;&gt; +    return static_cast&lt;CDMSessionAVContentKeySession*&gt;(session);
&gt; 
&gt; Is it ever OK for someone to call this with anything except a CDMSessionTypeAVContentKeySession? If not, you should add an ASSERT.

Ok.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:171
&gt;&gt; +    }
&gt; 
&gt; It looks like this is exactly the same in CDMSessionAVStreamSession, can you put it in the base class?

That may be hard; I&apos;ll have to do some refactoring, but i&apos;ll do that in a follow up.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:229
&gt;&gt; +}
&gt; 
&gt; It looks like this is exactly the same in CDMSessionAVStreamSession, can you put it in the base class?

Not without making it a class method.  I&apos;ll see what I can do.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:286
&gt;&gt; +        NSData* requestData = [m_keyRequest contentKeyRequestDataForApp:certificateData.get() contentIdentifier:initData.get() options:options.get() error:nil];
&gt; 
&gt; Doesn&apos;t this leak?

The return value is autoreleased, so no.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:319
&gt;&gt; +        systemCode = &apos;!mor&apos;;
&gt; 
&gt; Can you return &apos;!mor&apos; from a method in the base class?

I can probably refactor things, or add a constant static in the base class.

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:2
&gt;&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; 
&gt; :-O

Whoops!

&gt;&gt; Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:216
&gt;&gt; +        return false;
&gt; 
&gt; It looks like this is exactly the same as the first part of CDMSessionAVContentKeySession::update. Can you put it into a shared method in the base class?

Same as above; i&apos;ll have do so some refactoring to get there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146411</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-12-04 14:42:02 -0800</bug_when>
    <thetext>Committed r193479: &lt;http://trac.webkit.org/changeset/193479&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265432</attachid>
            <date>2015-11-12 14:03:06 -0800</date>
            <delta_ts>2015-12-02 13:14:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-151221-20151112140301.patch</filename>
            <type>text/plain</type>
            <size>109321</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmEzN2JhNDk0ZjE4Y2Vj
ZDJkM2EwYzU4ZjdjNzIwZGUzYTlkZDFhYy4uN2JiN2RlOTJlOGY0ZjU1ZTVlYjVkMTlhZTBiNzYy
NDE1M2NjZDQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxNS0xMS0xMiAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBBVkNvbnRlbnRL
ZXlTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTEyMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNE
TTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0u
aDoKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5Lmg6CisgICAgICAg
ICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhUGxheWVyOjpjcmVhdGVTZXNzaW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6Q0RNU2Vzc2lvbkNsZWFyS2V5
KToKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5o
OgorICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhS2V5U2Vzc2lvbjo6TWVkaWFLZXlTZXNzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhS2V5U2Vzc2lvbjo6a2V5UmVxdWVzdFRpbWVyRmlyZWQpOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9DRE1TZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNyZWF0
ZVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmNyZWF0ZVNlc3Npb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkS2V5U3lzdGVtUkUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6fkNETVByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6c3VwcG9ydHNLZXlTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbnZhbGlkYXRlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c01JTUVUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDLmguCisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbjo6aGFzQ29udGVudEtleVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9DRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW06IEFkZGVkLgor
ICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRo
UGFyZW50Ol0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVn
YXRlIGludmFsaWRhdGVdKToKKyAgICAgICAgKC1bQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Np
b25EZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lvbjp3aWxsUHJvdmlkZUtleVJlcXVlc3RJbml0aWFs
aXphdGlvbkRhdGFGb3JUcmFja0lEOl0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50
S2V5U2Vzc2lvbkRlbGVnYXRlIGNvbnRlbnRLZXlTZXNzaW9uOmRpZFByb3ZpZGVLZXlSZXF1ZXN0
SW5pdGlhbGl6YXRpb25EYXRhOnJlcXVlc3RIYW5kbGluZzpdKToKKyAgICAgICAgKC1bQ0RNU2Vz
c2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lvbkNvbnRlbnRQ
cm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJEaWRDaGFuZ2U6XSk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246
On5DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6cmVsZWFzZUtl
eXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjphZGRQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OnJlbW92ZVBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZWxl
YXNlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbjo6ZGlkUHJvdmlkZUNvbnRlbnRLZXlJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmNvbnRlbnRLZXlTZXNzaW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakM6OkNETVNlc3Npb25BVkZvdW5kYXRpb25P
YmpDKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMuaC4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
U3RyZWFtU2Vzc2lvbi5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbS4K
KyAgICAgICAgKC1bQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbk9ic2VydmVyIGluaXRXaXRoUGFy
ZW50Ol0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXIgY29u
dGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWQ6XSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246On5DRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVh
bVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uOjpyZWxlYXNlS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjppc0Vx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpzZXRTdHJl
YW1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246
OmFkZFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
OjpyZW1vdmVQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vz
c2lvbjo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6aW52YWxpZGF0
ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjp0b0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDOjpDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6On5DRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakM6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDOjpyZW1vdmVTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6c3lzdGVtQ29kZUZvckVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnN0b3JhZ2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OmxheWVyRGlk
UmVjZWl2ZUVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakM6OnJlbmRlcmVyRGlkUmVjZWl2ZUVycm9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVNl
c3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjZG1TZXNzaW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldENETVNlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjprZXlOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgICgt
W1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlk
ZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRyYWNrSUQ6XSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjp3aWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJh
Y2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q0RNU2Vzc2lv
bik6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQ
YXJzZXJXaWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRy
YWNrSUQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUxheWVyQ29jb2EubW06CisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE06OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0NETVNlc3Npb246Ok1vY2tDRE1TZXNzaW9uKToKKyAgICAgICAgKiB0ZXN0aW5n
L01vY2tDRE0uaDoKKwogMjAxNS0xMC0zMCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KIAogICAgICAgICBbaU9TXSA8dmlkZW8+IGVsZW1lbnRzIHdpdGhvdXQgYXVkaW8gdHJhY2tz
IHNob3VsZCBub3QgaW50ZXJydXB0IG11c2ljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Vu
Y3J5cHRlZG1lZGlhL0NETS5jcHAKaW5kZXggZDYzYTRmNGUwODc3YzQyMmM0NzhkOTM4M2Q1YThj
ZWU5MWIyMGM0My4uMDJiODk3YjUwOTgxMzE3ZTQ4OTE3Mzc5YjQ1NWIxNzQwNmEzNjdhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcApAQCAtMTMy
LDkgKzEzMiw5IEBAIGJvb2wgQ0RNOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3VwcG9ydHNNSU1FVHlwZShtaW1l
VHlwZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBDRE06OmNyZWF0ZVNlc3Np
b24oKQorc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IENETTo6Y3JlYXRlU2Vzc2lvbihDRE1T
ZXNzaW9uQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+
IHNlc3Npb24gPSBtX3ByaXZhdGUtPmNyZWF0ZVNlc3Npb24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gc2Vzc2lvbiA9IG1fcHJpdmF0ZS0+Y3JlYXRlU2Vzc2lvbihjbGllbnQp
OwogICAgIGlmIChtZWRpYVBsYXllcigpKQogICAgICAgICBtZWRpYVBsYXllcigpLT5zZXRDRE1T
ZXNzaW9uKHNlc3Npb24uZ2V0KCkpOwogICAgIHJldHVybiBzZXNzaW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmgKaW5kZXggNWFlY2ZjOWY2YzVkMmFkNGVm
MTg3YTRiMjY5MzAzMGUwNjk2YzNlNy4uOWJmZDFiYzI1NzA1ZmZmNTZkMjNhZWQ3ZDEwZTM0M2Rh
OWMwMDY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9DRE0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5o
CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB+Q0RNKCk7CiAKICAgICBib29sIHN1cHBv
cnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENE
TVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lv
bj4gY3JlYXRlU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50Kik7CiAKICAgICBjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5U3lzdGVtOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmgKaW5kZXggNDZi
ZDc4ZDkzYjI0YzA2MmU1YzU0ZDM2ZGYxNjcwZGMxMzRiOGYxZS4uNDNkZjNjYmI4ZGYwZjQ3NmNj
ODc1OGZiOWFmZmE5ZWFiZmU5MzNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0RNU2Vzc2lvbjsKK2NsYXNzIENETVNlc3Npb25DbGllbnQ7
CiAKIGNsYXNzIENETVByaXZhdGVJbnRlcmZhY2UgewogcHVibGljOgpAQCAtNDEsNyArNDIsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJp
bmcmKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVh
dGVTZXNzaW9uKCkgPSAwOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCopID0gMDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFy
S2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0
ZUNsZWFyS2V5LmNwcAppbmRleCBkNjE3YWQzYTQzYzMzNjMyMGNlYTg2NDU3MzFiMTY2MTU3MzBh
NTVlLi44YTM2ZjNiMWFkYzZlZDU4NDgzZmE4NTBhYmRhNDUzMzUyODYwMDhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVhcktl
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2
YXRlQ2xlYXJLZXkuY3BwCkBAIC01OSw5ICs1OSw5IEBAIGJvb2wgQ0RNUHJpdmF0ZUNsZWFyS2V5
OjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpzdXBwb3J0c0tleVN5c3RlbShtX2NkbS0+a2V5U3lzdGVtKCksIG1pbWVUeXBl
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IENETVByaXZhdGVDbGVhcktleTo6
Y3JlYXRlU2Vzc2lvbigpCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpjcmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9uQ2xlYXJLZXk+KCk7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbkNsZWFyS2V5PihjbGllbnQpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZh
dGVDbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cml2YXRlQ2xlYXJLZXkuaAppbmRleCBkNTNiNDljZGI0YWU2NzhmZDI1ZGFjYjc3MzgxNmEyZDNi
ZmM3Y2M2Li5lZmQxZmEyYzQxNDJlYTA2NjMyZjAwZDgyZWI0OTMyMGFjNDE0ZThiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVh
cktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJp
dmF0ZUNsZWFyS2V5LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzS2V5U3lzdGVtQW5kTWltZVR5cGUoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVu
aXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNs
aWVudCopIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ0RNKiBtX2NkbTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlh
UGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJp
dmF0ZU1lZGlhUGxheWVyLmNwcAppbmRleCAxMjcxYTdhMjZhY2YzNWMwYWJlMGYyYWRkZjhkMzQz
MTc5ZTg3NTVjLi5mMjllYjQ4OWZkZDYzMDc2MWYyMTUzYTRmOWMzNDZkNTg1MDJmYTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVN
ZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwCkBAIC01NSwxMyArNTUsMTMgQEAgYm9vbCBDRE1Q
cml2YXRlTWVkaWFQbGF5ZXI6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OnN1cHBvcnRzS2V5U3lzdGVtKG1fY2RtLT5rZXlT
eXN0ZW0oKSwgbWltZVR5cGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RN
UHJpdmF0ZU1lZGlhUGxheWVyOjpjcmVhdGVTZXNzaW9uKCkKK3N0ZDo6dW5pcXVlX3B0cjxDRE1T
ZXNzaW9uPiBDRE1Qcml2YXRlTWVkaWFQbGF5ZXI6OmNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNs
aWVudCogY2xpZW50KQogewogICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllciA9IG1fY2RtLT5t
ZWRpYVBsYXllcigpOwogICAgIGlmICghbWVkaWFQbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgcmV0dXJuIG1lZGlhUGxheWVyLT5jcmVhdGVTZXNzaW9uKG1fY2RtLT5rZXlT
eXN0ZW0oKSk7CisgICAgcmV0dXJuIG1lZGlhUGxheWVyLT5jcmVhdGVTZXNzaW9uKG1fY2RtLT5r
ZXlTeXN0ZW0oKSwgY2xpZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmgKaW5k
ZXggZWI1ODUxMDE5MTM4ZWNlYTU5OTkyNzNjZDc4NWJmMjg4OTU0MTIwOS4uYTNjNjUzMWQ4YmY1
ZGQwZjlhMWM5YWMxM2FmZGU0ZTJmNWRmNjM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5o
CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlTWVkaWFQ
bGF5ZXIoKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENE
TVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqKSBvdmVy
cmlkZTsKIAogICAgIENETSogY2RtKCkgY29uc3QgeyByZXR1cm4gbV9jZG07IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xl
YXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNz
aW9uQ2xlYXJLZXkuY3BwCmluZGV4IDhjMTJiZDJiN2VmYWE1MTFhNzgzNDczNGU0YTg2YTBhOGVl
MzZkZWQuLjFjMjk2NDQzYTdlMjljZDJmZGEyMDYzN2M5NTRkMDcwZTFmN2VhZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFy
S2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNl
c3Npb25DbGVhcktleS5jcHAKQEAgLTU5LDggKzU5LDkgQEAgc3RhdGljIFZNJiBjbGVhcktleVZN
KCkKICAgICByZXR1cm4gKnZtLmdldCgpOwogfQogCi1DRE1TZXNzaW9uQ2xlYXJLZXk6OkNETVNl
c3Npb25DbGVhcktleSgpCi0gICAgOiBtX3Nlc3Npb25JZChjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCkpCitDRE1TZXNzaW9uQ2xlYXJLZXk6OkNETVNlc3Npb25DbGVhcktleShDRE1TZXNzaW9u
Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nlc3Npb25J
ZChjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5o
CmluZGV4IGE5MzFkMzZlYmJkMzIyNGEyYzNmNDk2NWMzZmNmYzI1NzYwOGVjMzUuLmU1MDlmYjZh
NjdhZmRlMjcyYWQwOTc5NWY4NjFhYTI5NjNkNzhjYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuaApA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETVNlc3Npb25D
bGVhcktleSA6IHB1YmxpYyBDRE1TZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBDRE1TZXNzaW9uQ2xl
YXJLZXkoKTsKKyAgICBDRE1TZXNzaW9uQ2xlYXJLZXkoQ0RNU2Vzc2lvbkNsaWVudCopOwogICAg
IHZpcnR1YWwgfkNETVNlc3Npb25DbGVhcktleSgpOwogCiAgICAgLy8gQ0RNU2Vzc2lvblByaXZh
dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVk
aWFLZXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
TWVkaWFLZXlTZXNzaW9uLmNwcAppbmRleCAxZTQyODZjZDQyZTk3ZmQ5NzMxNTMzMzJlZWQ2ZTI3
Yjc0YjYxMzRmLi4zYzFlOWM0NGQ0OTA2OGNmOTBhNjczYzYyMWY2MGM4OWY0MjdmMWNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vz
c2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRp
YUtleVNlc3Npb24uY3BwCkBAIC01MiwxMSArNTIsMTAgQEAgTWVkaWFLZXlTZXNzaW9uOjpNZWRp
YUtleVNlc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWVkaWFLZXlzKiBr
ZXkKICAgICAsIG1fa2V5cyhrZXlzKQogICAgICwgbV9rZXlTeXN0ZW0oa2V5U3lzdGVtKQogICAg
ICwgbV9hc3luY0V2ZW50UXVldWUoKnRoaXMpCi0gICAgLCBtX3Nlc3Npb24oa2V5cy0+Y2RtKCkt
PmNyZWF0ZVNlc3Npb24oKSkKKyAgICAsIG1fc2Vzc2lvbihrZXlzLT5jZG0oKS0+Y3JlYXRlU2Vz
c2lvbih0aGlzKSkKICAgICAsIG1fa2V5UmVxdWVzdFRpbWVyKCp0aGlzLCAmTWVkaWFLZXlTZXNz
aW9uOjprZXlSZXF1ZXN0VGltZXJGaXJlZCkKICAgICAsIG1fYWRkS2V5VGltZXIoKnRoaXMsICZN
ZWRpYUtleVNlc3Npb246OmFkZEtleVRpbWVyRmlyZWQpCiB7Ci0gICAgbV9zZXNzaW9uLT5zZXRD
bGllbnQodGhpcyk7CiB9CiAKIE1lZGlhS2V5U2Vzc2lvbjo6fk1lZGlhS2V5U2Vzc2lvbigpCkBA
IC0xMTksNyArMTE4LDcgQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmtleVJlcXVlc3RUaW1lckZp
cmVkKCkKICAgICAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGtleVJlcXVlc3QgPSBtX3Nlc3Npb24t
PmdlbmVyYXRlS2V5UmVxdWVzdChyZXF1ZXN0Lm1pbWVUeXBlLCByZXF1ZXN0LmluaXREYXRhLmdl
dCgpLCBkZXN0aW5hdGlvblVSTCwgZXJyb3JDb2RlLCBzeXN0ZW1Db2RlKTsKIAogICAgICAgICAv
LyBPdGhlcndpc2UgW2lmIGEgcmVxdWVzdCBpcyBub3Qgc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZF06
Ci0gICAgICAgIGlmICgha2V5UmVxdWVzdCkgeworICAgICAgICBpZiAoZXJyb3JDb2RlKSB7CiAg
ICAgICAgICAgICAvLyAzLjEuIENyZWF0ZSBhIG5ldyBNZWRpYUtleUVycm9yIG9iamVjdCB3aXRo
IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKICAgICAgICAgICAgIC8vICAgICAgY29kZSA9IHRo
ZSBhcHByb3ByaWF0ZSBNZWRpYUtleUVycm9yIGNvZGUKICAgICAgICAgICAgIC8vICAgICAgc3lz
dGVtQ29kZSA9IGEgS2V5IFN5c3RlbS1zcGVjaWZpYyB2YWx1ZSwgaWYgcHJvdmlkZWQsIGFuZCAw
IG90aGVyd2lzZQpAQCAtMTM0LDcgKzEzMyw4IEBAIHZvaWQgTWVkaWFLZXlTZXNzaW9uOjprZXlS
ZXF1ZXN0VGltZXJGaXJlZCgpCiAgICAgICAgIC8vICAgIFRoZSBldmVudCBpcyBvZiB0eXBlIE1l
ZGlhS2V5TWVzc2FnZUV2ZW50IGFuZCBoYXM6CiAgICAgICAgIC8vICAgIG1lc3NhZ2UgPSBrZXkg
cmVxdWVzdAogICAgICAgICAvLyAgICBkZXN0aW5hdGlvblVSTCA9IGRlc3RpbmF0aW9uVVJMCi0g
ICAgICAgIHNlbmRNZXNzYWdlKGtleVJlcXVlc3QuZ2V0KCksIGRlc3RpbmF0aW9uVVJMKTsKKyAg
ICAgICAgaWYgKGtleVJlcXVlc3QpCisgICAgICAgICAgICBzZW5kTWVzc2FnZShrZXlSZXF1ZXN0
LmdldCgpLCBkZXN0aW5hdGlvblVSTCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2I2ZTA2YTUzMGI2NDMw
ODE2MGUyMDgwYThkYjk1OGE0ZTdjNGM2YS4uNDA3Mjk1MDljNDgxYzYxNDU0ZTliYzBlNDg2NmU0
OTAwNWI4ZGY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNjAyMiwxMCArNjAyMiwxMyBAQAogCQlDRERDMUU3QTE4QTk1MkYz
MDAyN0E5RDQgLyogTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRERDMUU3OTE4QTk1MkYzMDAyN0E5RDQgLyog
TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggKi87IH07CiAJCUNEREQ1NzE1MThCNTdBODIwMEE5
NEZDQiAvKiBDRE1TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEREUwMkVEMThC
M0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkVCMThCM0VENkQwMENG
N0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSAqLzsgfTsKLQkJQ0RERTAyRjAx
OEI1NjUxMzAwQ0Y3RkYxIC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRERFMDJFRjE4QjU2NTEy
MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSAqLzsgfTsKKwkJQ0RE
RTAyRjAxOEI1NjUxMzAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRERFMDJFRjE4QjU2
NTEyMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbSAqLzsgfTsKIAkJQ0RF
M0E4NTQxN0Y1RkNFNjAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREUzQTg1MjE3RjVGQ0U2MDBD
NUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYuaCAqLzsgfTsKIAkJQ0RFM0E4NTcxN0Y2MDIw
NDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTNBODU1MTdGNjAyMDQwMEM1QkUyMCAv
KiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0gKi87IH07CiAJCUNERTNBODU4MTdGNjAyMDQw
MEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTNBODU2MTdGNjAyMDQwMEM1QkUyMCAvKiBB
dWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLzsgfTsKKwkJQ0RFNTk1OTUxQkYxNkRGMzAwQTFD
QkU4IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTk1OTMxQkYxNjZBRDAwQTFDQkU4IC8q
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tICovOyB9OworCQlDREU1OTU5NzFCRjI2
RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFNTk1OTYxQkYyNkUyMTAwQTFD
QkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKKwkJQ0RFNTk1OUQx
QkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU1OTU5QzFCRjI3NTcx
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RF
N0ZDNDQxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFN0ZDNDIxODE5MDRCMTAwMkJCQjc3
IC8qIE9yZGVySXRlcmF0b3IuY3BwICovOyB9OwogCQlDREU3RkM0NTE4MTkwNEIxMDAyQkJCNzcg
LyogT3JkZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RFN0ZDNDMxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREU4M0RCMTE4
M0M0NDA2MDAzMUVBQTMgLyogVmlkZW9QbGF5YmFja1F1YWxpdHkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFODNEQUYxODNDNDQwNjAwMzFFQUEz
IC8qIFZpZGVvUGxheWJhY2tRdWFsaXR5LmNwcCAqLzsgfTsKQEAgLTEzODY3LDExICsxMzg3MCwx
NSBAQAogCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1TZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEREUw
MkVBMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRERFMDJFQjE4QjNFRDZEMDBDRjdGRjEg
LyogQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RERTAyRUUxOEI1NjRGQTAwQ0Y3RkYxIC8qIENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNU2Vzc2lvbk1lZGlhU291
cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRERFMDJFRjE4QjU2
NTEyMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEREUwMkVFMThCNTY0RkEwMENG
N0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNl
c3Npb25BVlN0cmVhbVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RE
RTAyRUYxOEI1NjUxMjAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uQVZTdHJlYW1T
ZXNzaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREUzQTg1MjE3RjVGQ0U2
MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9UcmFja1ByaXZhdGVBVkYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0RFM0E4NTUxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZG
T2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1ZGlvVHJh
Y2tQcml2YXRlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFM0E4
NTYxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RFNTk1OTMxQkYxNjZBRDAwQTFDQkU4IC8qIENE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERTU5NTk0MUJGMTY2RDEwMEExQ0JFOCAvKiBDRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREU1OTU5NjFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERTU5NTlD
MUJGMjc1NzEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFNjU2MEUxN0NBNkU3
NjAwNTI2QkE3IC8qIG1lZGlhQ29udHJvbHNBcHBsZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IG1lZGlhQ29udHJvbHNBcHBsZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RF
N0ZDNDIxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3JkZXJJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNERTdGQzQzMTgxOTA0QjEwMDJCQkI3NyAvKiBPcmRlckl0ZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9yZGVySXRlcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNzU0LDEwICsyMjc2MSwxNCBAQAogCQkJCUNE
RTNBODU1MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRk9iakMubW0gKi8s
CiAJCQkJQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmNwcCAqLywKIAkJCQlDRDU0QTc2MTE4MEY5RjcwMDBCMDc2QzkgLyogQXVk
aW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLywKKwkJCQlDREU1OTU5NDFCRjE2
NkQxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24uaCAqLywKKwkJCQlD
REU1OTU5MzFCRjE2NkFEMDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24u
bW0gKi8sCiAJCQkJQ0RERTAyRUExOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5k
YXRpb25PYmpDLmggKi8sCiAJCQkJQ0RERTAyRUIxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Np
b25BVkZvdW5kYXRpb25PYmpDLm1tICovLAotCQkJCUNEREUwMkVFMThCNTY0RkEwMENGN0ZGMSAv
KiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8sCi0JCQkJQ0RERTAyRUYxOEI1NjUx
MjAwQ0Y3RkYxIC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gKi8sCisJCQkJQ0RE
RTAyRUUxOEI1NjRGQTAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaCAqLywK
KwkJCQlDRERFMDJFRjE4QjU2NTEyMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lv
bi5tbSAqLywKKwkJCQlDREU1OTU5NjFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQy5oICovLAorCQkJCUNERTU5NTlDMUJGMjc1NzEwMEExQ0JFOCAvKiBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovLAogCQkJCTA3QUE2QjY5MTY2RDAxOTUwMEQ0
NTY3MSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQy5oICovLAogCQkJCTA3QUE2QjZB
MTY2RDAxOTUwMEQ0NTY3MSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLywK
IAkJCQkwNzM2N0RERDE3MkNBNjdGMDBEODYxQjkgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxl
Z2FjeUFWRk9iakMuaCAqLywKQEAgLTI3ODU0LDYgKzI3ODY1LDcgQEAKIAkJCQlGRDMxNjBBRjEy
QjAyNkY3MDBDMUEzNTkgLyogVmVjdG9yTWF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMjU3
MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RFODNEQjIxODNDNDQwNjAwMzFFQUEzIC8qIFZpZGVvUGxheWJhY2tRdWFsaXR5
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDREU1OTU5NzFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4OEUwREYxNzE1
RDJBMjAwNjU4RDk4IC8qIFZpZGVvVHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJFODhFMEUy
MTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRlb1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q4QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yODU2OCw3ICsyODU4MCw3IEBACiAJCQkJQ0QzMTg2MjIxOTlGMUUyQTAw
MzBBMEY3IC8qIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRERFMDJFRDE4QjNFRDZEMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9i
akMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREU4QjVGMDFBNjk3NzhCMDBCNEI2NkEgLyogQ0RN
U2Vzc2lvbkNsZWFyS2V5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNEREUwMkYwMThCNTY1MTMw
MENGN0ZGMSAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJQ0RERTAyRjAxOEI1NjUxMzAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVlN0cmVhbVNlc3Np
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1RjJEQkJFOTE3OEUzQzgxMDAxNDE0ODYgLyogQ2Vy
dGlmaWNhdGVJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBOEU1NjYxNzU1MkIyQTAw
NzQ4OEU3IC8qIENGVVJMRXh0cmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2OURDMTUw
NUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI4OTEwLDYgKzI4OTIyLDcgQEAKIAkJCQk4NURGMkVFRTBBQTM4N0NCMDBBRDY0QzUgLyog
RE9NSFRNTEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUMwNTBCQjBBRDg0RjVFMDA1
NTMyRTcgLyogRE9NSFRNTEVtYmVkRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0
Q0UwMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MRmllbGRTZXRFbGVtZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJQ0RFNTk1OUQxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUVDQkVGMDBBQTc2MjY5MDA1NDRG
MEIgLyogRE9NSFRNTEZvbnRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjJDNUQw
QUEzNDFGNjAwQUQ2NEM1IC8qIERPTUhUTUxGb3JtRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1REY4MTk2MEFBNzdFNEIwMDQ4NkFENyAvKiBET01IVE1MRnJhbWVFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCkBAIC0yOTAwNCw2ICsyOTAxNyw3IEBACiAJCQkJQ0Q5REUxODExN0FBRDZB
NDAwRUEzODZEIC8qIERPTVVSTE1lZGlhU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1
RkNDOUZDMUI0REY3RjIwMEU3MjMyNiAvKiBET01VUkxNZWRpYVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzFBMzdCRjA5N0M3MTVGMDAxOUYzRDggLyogRE9NVXRpbGl0eS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUNERTU5NTk1MUJGMTZERjMwMEExQ0JFOCAvKiBDRE1TZXNzaW9uQVZD
b250ZW50S2V5U2Vzc2lvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MEE1MTAwRDQxQ0Qw
MDVCQTI2NyAvKiBET01WYWxpZGl0eVN0YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZG
NEEwRTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwNjAzN0ExNDMyODFDRDAwQUJGNEJBIC8qIERPTVdlYktpdENTU0ZpbHRl
clZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9DRE1TZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DRE1TZXNzaW9uLmgKaW5kZXggZDMwYmZlMzAzNWUzNjExZTc2NmIwNjJmZjc2NGNlZThk
NGZmYTFkYy4uNDU1MTQwNTJhOTBiZTgzMDYxNDcxN2M3OWIxMmQ2MTdiNzRiYjM5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ0RNU2Vzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NETVNlc3Npb24uaApAQCAtNTgsNyAr
NTgsOCBAQCBlbnVtIENETVNlc3Npb25UeXBlIHsKICAgICBDRE1TZXNzaW9uVHlwZVVua25vd24s
CiAgICAgQ0RNU2Vzc2lvblR5cGVDbGVhcktleSwKICAgICBDRE1TZXNzaW9uVHlwZUFWRm91bmRh
dGlvbk9iakMsCi0gICAgQ0RNU2Vzc2lvblR5cGVNZWRpYVNvdXJjZUFWRk9iakMsCisgICAgQ0RN
U2Vzc2lvblR5cGVBVlN0cmVhbVNlc3Npb24sCisgICAgQ0RNU2Vzc2lvblR5cGVBVkNvbnRlbnRL
ZXlTZXNzaW9uLAogfTsKIAogY2xhc3MgQ0RNU2Vzc2lvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTBmNjM3NWM3MmY3ZjRi
ZTg3ZGMyZTg1NTVhYjlkMWVlMGQ4MGMzOC4uNDk2NzhlNDQ5NTI2YzM5MWI3Y2RkOTZjNDNjN2Rh
Mzc2YzA1ZWMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmNwcApAQCAtNTMyLDkgKzUzMiw5IEBAIE1lZGlhUGxheWVyOjpNZWRpYUtleUV4
Y2VwdGlvbiBNZWRpYVBsYXllcjo6Y2FuY2VsS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIGtleVN5
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCi1zdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gTWVkaWFQbGF5ZXI6OmNyZWF0ZVNlc3Npb24oY29uc3QgU3RyaW5nJiBr
ZXlTeXN0ZW0pCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gTWVkaWFQbGF5ZXI6OmNyZWF0
ZVNlc3Npb24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIENETVNlc3Npb25DbGllbnQqIGNsaWVu
dCkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVTZXNzaW9uKGtleVN5c3RlbSk7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlU2Vzc2lvbihrZXlTeXN0ZW0sIGNsaWVudCk7CiB9
CiAKIHZvaWQgTWVkaWFQbGF5ZXI6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbiogc2Vzc2lvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4
IGRiY2UyMmQ3ZjQ5NmFmMzcyOThiZmU0NmEyMzRhZjE5MzcxYzY5N2UuLmFmN2FlYWIzZTczMjlh
YzJjNjMxZTgyODUyYzRjOTZlMDgwMGJkYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMTE2LDYgKzExNiw3IEBAIHN0cnVjdCBNZWRp
YUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHsKIAogZXh0ZXJuIGNvbnN0IFBsYXRmb3JtTWVkaWEg
Tm9QbGF0Zm9ybU1lZGlhOwogCitjbGFzcyBDRE1TZXNzaW9uQ2xpZW50OwogY2xhc3MgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDb250ZW50VHlwZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKQEAgLTM1OSw3ICszNjAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUFfVjIpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNl
c3Npb24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1T
ZXNzaW9uPiBjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBDRE1TZXNzaW9u
Q2xpZW50Kik7CiAgICAgdm9pZCBzZXRDRE1TZXNzaW9uKENETVNlc3Npb24qKTsKICAgICB2b2lk
IGtleUFkZGVkKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggOTYwYTJjM2NlZGFhZDA0YzMzMDUy
NDQwMTc4ODJiYTg4YjRiMjQwZS4uMjU3ZjRhYTk5MmI2YmVkODlhYmExODRkNGQyNTFjMGY1YWQ2
YzVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmgKQEAgLTIzMCw3ICsyMzAsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcmKSB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vz
c2lvbihjb25zdCBTdHJpbmcmLCBDRE1TZXNzaW9uQ2xpZW50KikgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRDRE1TZXNzaW9uKENETVNlc3Npb24qKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQga2V5QWRkZWQoKSB7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKaW5kZXggN2E4MmI3YWNlZDBjNDBmNjRi
ZTYzZjZmMmRkMTVjNjE5MTZhZjYwYi4uYTFjNzFiMTQ2OWE4NjQ1MzJjMWY5ZDM4YzUzNGNiOGJh
MGYxMDc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oCkBAIC0yOSwyOCArMjksMzMgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
X1YyKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
RE07CitjbGFzcyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOwogCiBjbGFzcyBDRE1Qcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDIDogcHVibGljIENETVByaXZhdGVJbnRlcmZhY2UgewogcHVi
bGljOgogICAgIGV4cGxpY2l0IENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoQ0RNKiBjZG0p
CiAgICAgICAgIDogbV9jZG0oY2RtKQogICAgIHsgfQotICAgIHZpcnR1YWwgfkNETVByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMoKSB7IH0KKyAgICB2aXJ0dWFsIH5DRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDKCk7CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBT
dHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbUFuZE1pbWVUeXBlKGNv
bnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Np
b24oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBj
cmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqKSBvdmVycmlkZTsKIAogICAgIENETSogY2Rt
KCkgY29uc3QgeyByZXR1cm4gbV9jZG07IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZVNlc3Npb24o
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ0RNKiBt
X2NkbTsKKyAgICBWZWN0b3I8Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyo+IG1fc2Vzc2lv
bnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLm1tCmluZGV4IGIxY2ZlYjFiYTQ2NzYyMDc5Zjk4YjNhOWY0MzczMzUyYzBlZTI1
M2QuLjhiMWJmMzJhZmFkNGJhMDFkZTkxOWMwODRjZjNkN2I4NjQwY2I3YmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCkBAIC0yOSw3
ICsyOSw4IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKIAogI2ltcG9ydCAiQ0RNLmgiCi0jaW1wb3J0ICJDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDLmgiCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oIgor
I2ltcG9ydCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5oIgogI2ltcG9ydCAiQ29udGVudFR5
cGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgpAQCAtNDMsMTAgKzQ0LDE2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uJiB2YWxpZEtleVN5c3RlbVJFKCkK
IHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVndWxhckV4cHJlc3Npb24+IGtleVN5c3Rl
bVJFKCJeY29tXFwuYXBwbGVcXC5mcHNcXC4yX1xcZCsoPzosXFxkKykqJCIsIFRleHRDYXNlSW5z
ZW5zaXRpdmUpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWd1bGFyRXhwcmVzc2lvbj4g
a2V5U3lzdGVtUkUoIl5jb21cXC5hcHBsZVxcLmZwc1xcLlsyM11fXFxkKyg/OixcXGQrKSokIiwg
VGV4dENhc2VJbnNlbnNpdGl2ZSk7CiAgICAgcmV0dXJuIGtleVN5c3RlbVJFOwogfQogCitDRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp+Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQygp
Cit7CisgICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9zZXNzaW9ucykKKyAgICAgICAgc2Vzc2lv
bi0+aW52YWxpZGF0ZUNETSgpOworfQorCiBib29sIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akM6OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogewogICAgIGlm
ICghd2tRdWVyeURlY29kZXJBdmFpbGFiaWxpdHkoKSkKQEAgLTU1LDYgKzYyLDkgQEAgYm9vbCBD
RE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJp
bmcmIGtleVN5c3RlbSkKICAgICBpZiAoIWtleVN5c3RlbS5pc0VtcHR5KCkgJiYgdmFsaWRLZXlT
eXN0ZW1SRSgpLm1hdGNoKGtleVN5c3RlbSkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBpZiAoa2V5U3lzdGVtLnN1YnN0cmluZygxNCwgMSkudG9JbnQoKSA9PSAzICYmICFDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg5LDcgKzk5LDcgQEAgYm9vbCBD
RE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBv
cnRlZDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IENETVByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmNyZWF0ZVNlc3Npb24oKQorc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+
IENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNs
aWVudCogY2xpZW50KQogewogICAgIFN0cmluZyBrZXlTeXN0ZW0gPSBtX2NkbS0+a2V5U3lzdGVt
KCk7CiAgICAgQVNTRVJUKHZhbGlkS2V5U3lzdGVtUkUoKS5tYXRjaChrZXlTeXN0ZW0pID49IDAp
OwpAQCAtMTAxLDcgKzExMSwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbigpCiAgICAgZm9yIChhdXRvJiBw
cm90b2NvbFZlcnNpb25TdHJpbmcgOiBwcm90b2NvbFZlcnNpb25zU3RyaW5ncykKICAgICAgICAg
cHJvdG9jb2xWZXJzaW9ucy5hcHBlbmQocHJvdG9jb2xWZXJzaW9uU3RyaW5nLnRvSW50KCkpOwog
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2Jq
Qz4ocHJvdG9jb2xWZXJzaW9ucyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakM+IHNlc3Npb247CisgICAgaWYgKGtleVN5c3RlbS5zdWJzdHJpbmcoMTQs
IDEpLnRvSW50KCkgPT0gMyAmJiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFp
bGFibGUoKSkKKyAgICAgICAgc2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb24+KHByb3RvY29sVmVyc2lvbnMsICp0aGlzLCBjbGllbnQpOworICAg
IGVsc2UKKyAgICAgICAgc2Vzc2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbj4ocHJvdG9jb2xWZXJzaW9ucywgKnRoaXMsIGNsaWVudCk7CisKKyAgICBtX3Nl
c3Npb25zLmFwcGVuZChzZXNzaW9uLmdldCgpKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHNlc3Np
b24pOworfQorCit2b2lkIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmludmFsaWRhdGVT
ZXNzaW9uKENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMqIHNlc3Npb24pCit7CisgICAgQVNT
RVJUKG1fc2Vzc2lvbnMuY29udGFpbnMoc2Vzc2lvbikpOworICAgIG1fc2Vzc2lvbnMucmVtb3Zl
QWxsKHNlc3Npb24pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWNmZDIwNjFjOGRm
ODFmMmI1NWNkOTBhZDkyNDVjOWIyMjVlMDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29u
dGVudEtleVNlc3Npb24uaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbl9oCisjZGVmaW5lIENETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uX2gKKworI2luY2x1ZGUgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMu
aCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCisKK09CSkNfQ0xBU1MgQVZDb250ZW50S2V5U2Vzc2lvbjsKK09CSkNf
Q0xBU1MgQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZTsKKworQHByb3RvY29s
IEFWQ29udGVudEtleVNlc3Npb25SZXF1ZXN0SGFuZGxpbmc7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzsKKworY2xhc3MgQ0RNU2Vz
c2lvbkFWQ29udGVudEtleVNlc3Npb24gOiBwdWJsaWMgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQyB7CitwdWJsaWM6CisgICAgQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24oY29uc3Qg
VmVjdG9yPGludD4mIHByb3RvY29sVmVyc2lvbnMsIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMmLCBDRE1TZXNzaW9uQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q0RNU2Vzc2lvbkFWQ29udGVu
dEtleVNlc3Npb24oKTsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICAv
LyBDRE1TZXNzaW9uCisgICAgdmlydHVhbCBDRE1TZXNzaW9uVHlwZSB0eXBlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gQ0RNU2Vzc2lvblR5cGVBVkNvbnRlbnRLZXlTZXNzaW9uOyB9CisgICAgdmlydHVh
bCBSZWZQdHI8VWludDhBcnJheT4gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCB1bnNp
Z25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUtleXMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlKFVpbnQ4QXJyYXkqLCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdl
LCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKSBv
dmVycmlkZTsKKworICAgIC8vIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMKKyAgICB2b2lk
IGFkZFBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92
ZVBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGlkUHJv
dmlkZUNvbnRlbnRLZXlJbml0aWFsaXphdGlvbkRhdGEoQXJyYXlCdWZmZXIqLCBpZDxBVkNvbnRl
bnRLZXlTZXNzaW9uUmVxdWVzdEhhbmRsaW5nPiByZXF1ZXN0SGFuZGxlcik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2Uo
dW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSk7CisK
KyAgICBib29sIGhhc0NvbnRlbnRLZXlTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
S2V5U2Vzc2lvbjsgfQorICAgIEFWQ29udGVudEtleVNlc3Npb24qIGNvbnRlbnRLZXlTZXNzaW9u
KCk7CisKKyAgICBSZXRhaW5QdHI8QVZDb250ZW50S2V5U2Vzc2lvbj4gbV9jb250ZW50S2V5U2Vz
c2lvbjsKKyAgICBSZXRhaW5QdHI8Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0
ZT4gbV9jb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlOworICAgIFJldGFpblB0cjxpZDxBVkNvbnRl
bnRLZXlTZXNzaW9uUmVxdWVzdEhhbmRsaW5nPj4gbV9yZXF1ZXN0SGFuZGxlcjsKKyAgICBSZWZQ
dHI8VWludDhBcnJheT4gbV9pbml0RGF0YTsKKyAgICBSZWZQdHI8VWludDhBcnJheT4gbV9jb250
ZW50SWQ7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gbV9leHBpcmVkU2Vzc2lvbjsKKyAgICBWZWN0
b3I8aW50PiBtX3Byb3RvY29sVmVyc2lvbnM7CisgICAgaW50MzJfdCBtX3Byb3RlY3RlZFRyYWNr
SUQgeyAxIH07CisgICAgZW51bSB7IE5vcm1hbCwgS2V5UmVsZWFzZSB9IG1fbW9kZTsKK307CisK
K2lubGluZSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbiogdG9DRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGlmICghc2Vzc2lvbiB8
fCBzZXNzaW9uLT50eXBlKCkgIT0gQ0RNU2Vzc2lvblR5cGVBVkNvbnRlbnRLZXlTZXNzaW9uKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNU2Vzc2lv
bkFWQ29udGVudEtleVNlc3Npb24qPihzZXNzaW9uKTsKK30KKworfQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25B
VkNvbnRlbnRLZXlTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWEyMjAxNjA4NTU1NjlkZDQ5YzVlOTk5MTdlNTk4YmQ3NWMzMWQ0YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tCkBAIC0wLDAgKzEsMzkyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKKworI2ltcG9ydCAiQ0RNLmgiCisjaW1wb3J0ICJDRE1Qcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLmgiCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlLmgiCisjaW1wb3J0
ICJGaWxlU3lzdGVtLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVBsYXll
ci5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDLmgiCisjaW1wb3J0ICJVVUlELmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZF
cnJvci5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNQmFzZS5oPgorI2ltcG9ydCA8Y3N0ZGxpYj4K
KyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDxydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworU09GVF9MSU5L
X0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3Vu
ZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXIpOworU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFW
Rm91bmRhdGlvbiwgQVZDb250ZW50S2V5U2Vzc2lvbik7CitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZ
X0ZBSUwoQVZGb3VuZGF0aW9uLCBBVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tl
eSwgTlNTdHJpbmcgKikKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgQVZDb250ZW50S2V5
U2Vzc2lvblN0YXR1cykgeworICAgIEFWQ29udGVudEtleVNlc3Npb25TdGF0dXNOb0tleSwKKyAg
ICBBVkNvbnRlbnRLZXlTZXNzaW9uU3RhdHVzUmVxdWVzdGluZ0tleSwKKyAgICBBVkNvbnRlbnRL
ZXlTZXNzaW9uU3RhdHVzS2V5UHJlc2VudCwKKyAgICBBVkNvbnRlbnRLZXlTZXNzaW9uU3RhdHVz
RXhwaXJlZCwKKyAgICBBVkNvbnRlbnRLZXlTZXNzaW9uU3RhdHVzRmFpbGVkCit9OworCitAcHJv
dG9jb2wgQVZDb250ZW50S2V5U2Vzc2lvblJlcXVlc3RIYW5kbGluZzsKKworQGludGVyZmFjZSBB
VkNvbnRlbnRLZXlTZXNzaW9uIDogTlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0
b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJMOworQHByb3BlcnR5IChhc3Np
Z24pIGlkIGRlbGVnYXRlOworQHByb3BlcnR5IChyZWFkb25seSkgQVZDb250ZW50S2V5U2Vzc2lv
blN0YXR1cyBzdGF0dXM7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU0Vycm9yICplcnJvcjsKKy0g
KHZvaWQpYWRkU3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0
YVBhcnNlcjsKKy0gKHZvaWQpcmVtb3ZlU3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFy
c2VyICopc3RyZWFtRGF0YVBhcnNlcjsKKy0gKHZvaWQpZXhwaXJlOworQHByb3BlcnR5IChyZWFk
b25seSkgTlNEYXRhICpjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyOworQHByb3Bl
cnR5IChyZWFkb25seSkgTlNBcnJheSAqc3RyZWFtRGF0YVBhcnNlcnM7CistIChCT09MKWJlZ2lu
Q29udGVudFByb3RlY3Rpb25XaXRoS2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YTooTlNEYXRh
ICopaW5pdGlhbGl6YXRpb25EYXRhIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnM7Cisr
IChOU0FycmF5ICopcGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVy
OihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilz
dG9yYWdlVVJMOworKyAodm9pZClyZW1vdmVQZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzOihO
U0FycmF5ICopZXhwaXJlZFNlc3Npb25SZXBvcnRzIHdpdGhBcHBJZGVudGlmaWVyOihOU0RhdGEg
KilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJM
OworQGVuZAorCitAcHJvdG9jb2wgQVZDb250ZW50S2V5U2Vzc2lvblJlcXVlc3RIYW5kbGluZyA8
TlNPYmplY3Q+CistIChOU0RhdGEgKiljb250ZW50S2V5UmVxdWVzdERhdGFGb3JBcHA6KE5TRGF0
YSAqKWFwcElkZW50aWZpZXIgY29udGVudElkZW50aWZpZXI6KE5TRGF0YSAqKWNvbnRlbnRJZGVu
dGlmaWVyIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiop
b3V0RXJyb3I7CistICh2b2lkKXByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VEYXRhOihOU0RhdGEg
Kiljb250ZW50S2V5UmVzcG9uc2VEYXRhOworLSAodm9pZClwcm9jZXNzQ29udGVudEtleVJlc3Bv
bnNlRXJyb3I6KE5TRXJyb3IgKillcnJvcjsKKy0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRL
ZXlSZXNwb25zZURhdGE7CisKK0BlbmQKKworQGludGVyZmFjZSBDRE1TZXNzaW9uQVZDb250ZW50
S2V5U2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgeworICAgIFdlYkNvcmU6OkNETVNlc3Npb25B
VkNvbnRlbnRLZXlTZXNzaW9uICptX3BhcmVudDsKK30KKy0gKHZvaWQpaW52YWxpZGF0ZTsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uRGVsZWdh
dGUKKy0gKGlkKWluaXRXaXRoUGFyZW50OihXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5
U2Vzc2lvbiAqKXBhcmVudAoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIG1fcGFyZW50ID0gcGFyZW50OworICAgIHJldHVybiBzZWxmOworfQorCisKKy0gKHZvaWQp
aW52YWxpZGF0ZQoreworICAgIG1fcGFyZW50ID0gbnVsbHB0cjsKK30KKworLSAodm9pZCljb250
ZW50S2V5U2Vzc2lvbjooQVZDb250ZW50S2V5U2Vzc2lvbiAqKXNlc3Npb24gd2lsbFByb3ZpZGVL
ZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJ
RCl0cmFja0lECit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworICAgIFVOVVNFRF9QQVJB
TSh0cmFja0lEKTsKKworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKK30KKwor
LSAodm9pZCljb250ZW50S2V5U2Vzc2lvbjooQVZDb250ZW50S2V5U2Vzc2lvbiAqKXNlc3Npb24g
ZGlkUHJvdmlkZUtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGE6KE5TRGF0YSAqKWluaXRpYWxp
emF0aW9uRGF0YSByZXF1ZXN0SGFuZGxpbmc6KGlkPEFWQ29udGVudEtleVNlc3Npb25SZXF1ZXN0
SGFuZGxpbmc+KXJlcXVlc3RIYW5kbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOwor
CisgICAgaWYgKG1fcGFyZW50KQorICAgICAgICBtX3BhcmVudC0+ZGlkUHJvdmlkZUNvbnRlbnRL
ZXlJbml0aWFsaXphdGlvbkRhdGEoQXJyYXlCdWZmZXI6OmNyZWF0ZShpbml0aWFsaXphdGlvbkRh
dGEuYnl0ZXMsIGluaXRpYWxpemF0aW9uRGF0YS5sZW5ndGgpLmdldCgpLCByZXF1ZXN0SGFuZGxl
cik7Cit9CisKKy0gKHZvaWQpY29udGVudEtleVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Np
b25JZGVudGlmaWVyRGlkQ2hhbmdlOihBVkNvbnRlbnRLZXlTZXNzaW9uICopc2Vzc2lvbgorewor
ICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRGF0YSogaWRlbnRp
ZmllciA9IFtzZXNzaW9uIGNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJdOworICAg
IFJldGFpblB0cjxOU1N0cmluZz4gc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcgPSBpZGVudGlmaWVy
ID8gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aWRlbnRpZmllciBlbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pIDogbmlsOworICAgIG1fcGFyZW50LT5zZXRTZXNz
aW9uSWQoc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcuZ2V0KCkpOworfQorQGVuZAorCitzdGF0aWMg
Y29uc3QgTlNTdHJpbmcgKlBsYXliYWNrU2Vzc2lvbklkS2V5ID0gQCJQbGF5YmFja1Nlc3Npb25J
RCI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Np
b246OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm90
b2NvbFZlcnNpb25zLCBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiBjZG0sIENETVNlc3Np
b25DbGllbnQqIGNsaWVudCkKKyAgICA6IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoY2Rt
LCBjbGllbnQpCisgICAgLCBtX2NvbnRlbnRLZXlTZXNzaW9uRGVsZWdhdGUoYWRvcHROUyhbW0NE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUGFyZW50
OnRoaXNdKSkKKyAgICAsIG1fcHJvdG9jb2xWZXJzaW9ucyhwcm90b2NvbFZlcnNpb25zKQorICAg
ICwgbV9tb2RlKE5vcm1hbCkKK3sKK30KKworQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246
On5DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbigpCit7CisgICAgW21fY29udGVudEtleVNl
c3Npb25EZWxlZ2F0ZSBpbnZhbGlkYXRlXTsKKworICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVy
IDogbV9zb3VyY2VCdWZmZXJzKQorICAgICAgICByZW1vdmVQYXJzZXIoc291cmNlQnVmZmVyLT5w
YXJzZXIoKSk7Cit9CisKK2Jvb2wgQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmlzQXZh
aWxhYmxlKCkKK3sKKyAgICByZXR1cm4gZ2V0QVZDb250ZW50S2V5U2Vzc2lvbkNsYXNzKCk7Cit9
CisKK1JlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2Vu
ZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFVpbnQ4QXJyYXkqIGluaXRE
YXRhLCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1
bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQoreworICAgIFVOVVNFRF9QQVJBTShtaW1lVHlwZSk7
CisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVVJMKTsKKyAgICBBU1NFUlQoaW5pdERhdGEp
OworCisgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmdlbmVy
YXRlS2V5UmVxdWVzdCglcCkiLCB0aGlzKTsKKworICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVy
OjpOb0Vycm9yOworICAgIHN5c3RlbUNvZGUgPSAwOworCisgICAgbV9pbml0RGF0YSA9IGluaXRE
YXRhOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAia2V5cmVsZWFzZSIp
KSB7CisgICAgICAgIG1fbW9kZSA9IEtleVJlbGVhc2U7CisgICAgICAgIHJldHVybiBnZW5lcmF0
ZUtleVJlbGVhc2VNZXNzYWdlKGVycm9yQ29kZSwgc3lzdGVtQ29kZSk7CisgICAgfQorCisgICAg
aWYgKCFtX2NlcnRpZmljYXRlKSB7CisgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZVN0cmluZyhB
U0NJSUxpdGVyYWwoImNlcnRpZmljYXRlIikpOworICAgICAgICBSZWZQdHI8VWludDhBcnJheT4g
YXJyYXkgPSBVaW50OEFycmF5OjpjcmVhdGUoY2VydGlmaWNhdGVTdHJpbmcubGVuZ3RoKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSBjZXJ0aWZpY2F0ZVN0cmluZy5s
ZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgYXJyYXktPnNldChpLCBjZXJ0
aWZpY2F0ZVN0cmluZ1tpXSk7CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fY29udGVudElkKSB7CisgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZVN0cmluZyhBU0NJ
SUxpdGVyYWwoImNvbnRlbnQiKSk7CisgICAgICAgIFJlZlB0cjxVaW50OEFycmF5PiBhcnJheSA9
IFVpbnQ4QXJyYXk6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGNlcnRpZmljYXRlU3RyaW5nLmxlbmd0aCgp
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhcnJheS0+c2V0KGksIGNlcnRpZmljYXRl
U3RyaW5nW2ldKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIGlmICghbV9y
ZXF1ZXN0SGFuZGxlcikgeworICAgICAgICBOU0RhdGEqIG5zSW5pdERhdGEgPSBbTlNEYXRhIGRh
dGFXaXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0aDptX2luaXREYXRhLT5sZW5ndGgo
KV07CisgICAgICAgIFtjb250ZW50S2V5U2Vzc2lvbigpIGJlZ2luQ29udGVudFByb3RlY3Rpb25X
aXRoS2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YTpuc0luaXREYXRhIG9wdGlvbnM6bmlsXTsK
KyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbjo6cmVsZWFzZUtleXMoKQoreworICAgIGlmIChoYXNDb250ZW50S2V5U2Vz
c2lvbigpKSB7CisgICAgICAgIG1fc3RvcHBlZCA9IHRydWU7CisgICAgICAgIGZvciAoYXV0byYg
c291cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKQorICAgICAgICAgICAgc291cmNlQnVmZmVy
LT5mbHVzaCgpOworCisgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlT
ZXNzaW9uOjpyZWxlYXNlS2V5cyglcCkgLSBleHBpcmluZyBzdHJlYW0gc2Vzc2lvbiIsIHRoaXMp
OworICAgICAgICBbY29udGVudEtleVNlc3Npb24oKSBleHBpcmVdOworCisgICAgICAgIGlmICgh
bV9jZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIVtnZXRB
VkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBl
bmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0
b3J5QXRVUkw6KV0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmV0YWluUHRyPE5T
RGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgp
XSk7CisgICAgICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVkNvbnRlbnRLZXlT
ZXNzaW9uQ2xhc3MoKSBwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZp
ZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsKKyAgICAgICAgZm9yIChOU0RhdGEqIGV4cGly
ZWRTZXNzaW9uRGF0YSBpbiBleHBpcmVkU2Vzc2lvbnMpIHsKKyAgICAgICAgICAgIE5TRGljdGlv
bmFyeSAqZXhwaXJlZFNlc3Npb24gPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIHByb3Bl
cnR5TGlzdFdpdGhEYXRhOmV4cGlyZWRTZXNzaW9uRGF0YSBvcHRpb25zOmtDRlByb3BlcnR5TGlz
dEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKKyAgICAgICAgICAgIE5T
U3RyaW5nICpwbGF5YmFja1Nlc3Npb25JZFZhbHVlID0gKE5TU3RyaW5nICopW2V4cGlyZWRTZXNz
aW9uIG9iamVjdEZvcktleTpQbGF5YmFja1Nlc3Npb25JZEtleV07CisgICAgICAgICAgICBpZiAo
IVtwbGF5YmFja1Nlc3Npb25JZFZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChtX3Nlc3Npb25J
ZCA9PSBTdHJpbmcocGxheWJhY2tTZXNzaW9uSWRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBM
T0coTWVkaWEsICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6cmVsZWFzZUtleXMoJXAp
IC0gZm91bmQgc2Vzc2lvbiwgc2VuZGluZyBleHBpcmF0aW9uIG1lc3NhZ2UiKTsKKyAgICAgICAg
ICAgICAgICBtX2V4cGlyZWRTZXNzaW9uID0gZXhwaXJlZFNlc3Npb25EYXRhOworICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZShVaW50OEFycmF5OjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KFttX2V4cGlyZWRTZXNzaW9uIGJ5dGVzXSksIFttX2V4cGlyZWRT
ZXNzaW9uIGxlbmd0aF0pLmdldCgpLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGJvb2wg
aXNFcXVhbChVaW50OEFycmF5KiBkYXRhLCBjb25zdCBjaGFyKiBsaXRlcmFsKQoreworICAgIEFT
U0VSVChkYXRhKTsKKyAgICBBU1NFUlQobGl0ZXJhbCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
ZGF0YS0+bGVuZ3RoKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFsaXRlcmFsW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmIChkYXRhLT5pdGVtKGkpICE9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxp
dGVyYWxbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
IWxpdGVyYWxbbGVuZ3RoXTsKK30KKworYm9vbCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
bjo6dXBkYXRlKFVpbnQ4QXJyYXkqIGtleSwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0TWVzc2Fn
ZSwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0obmV4dE1lc3NhZ2UpOworCisgICAgYm9vbCBzaG91bGRHZW5l
cmF0ZUtleVJlcXVlc3QgPSAhbV9jZXJ0aWZpY2F0ZSB8fCAhbV9jb250ZW50SWQgfHwgaXNFcXVh
bChrZXksICJyZW5ldyIpOworICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkgeworICAgICAgICBMT0co
TWVkaWEsICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGNlcnRp
ZmljYXRlIGRhdGEiLCB0aGlzKTsKKworICAgICAgICBtX2NlcnRpZmljYXRlID0ga2V5OworCisg
ICAgICAgIGlmICghbV9jb250ZW50SWQpIHsKKyAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0
ZVN0cmluZyhBU0NJSUxpdGVyYWwoImNvbnRlbnQiKSk7CisgICAgICAgICAgICBSZWZQdHI8VWlu
dDhBcnJheT4gYXJyYXkgPSBVaW50OEFycmF5OjpjcmVhdGUoY2VydGlmaWNhdGVTdHJpbmcubGVu
Z3RoKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gY2VydGlm
aWNhdGVTdHJpbmcubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBh
cnJheS0+c2V0KGksIGNlcnRpZmljYXRlU3RyaW5nW2ldKTsKKyAgICAgICAgICAgIG5leHRNZXNz
YWdlID0gYXJyYXk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIW1fY29udGVudElkKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoJXApIC0gY29udGVudCBpZCIsIHRoaXMpOwor
ICAgICAgICBtX2NvbnRlbnRJZCA9IGtleTsKKyAgICB9CisKKyAgICBpZiAoaXNFcXVhbChrZXks
ICJhY2tub3dsZWRnZWQiKSkgeworICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGFja25vd2xlZGluZyBzZWN1cmUgc3RvcCBtZXNz
YWdlIiwgdGhpcyk7CisKKyAgICAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9uKSB7CisgICAgICAg
ICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7
CisKKyAgICAgICAgaWYgKFtnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6d2l0
aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOildKQorICAgICAgICAgICAgW2dl
dEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJl
cG9ydHM6QFttX2V4cGlyZWRTZXNzaW9uLmdldCgpXSB3aXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZp
Y2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6c3RvcmFnZVBhdGgoKV1dOworICAgICAgICBtX2V4cGlyZWRTZXNzaW9uID0gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBLZXlSZWxl
YXNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fcmVxdWVzdEhhbmRsZXIp
IHsKKyAgICAgICAgTlNEYXRhKiBuc0luaXREYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOm1f
aW5pdERhdGEtPmRhdGEoKSBsZW5ndGg6bV9pbml0RGF0YS0+bGVuZ3RoKCldOworICAgICAgICBb
Y29udGVudEtleVNlc3Npb24oKSBiZWdpbkNvbnRlbnRQcm90ZWN0aW9uV2l0aEtleVJlcXVlc3RJ
bml0aWFsaXphdGlvbkRhdGE6bnNJbml0RGF0YSBvcHRpb25zOm5pbF07CisgICAgfQorCisgICAg
aWYgKHNob3VsZEdlbmVyYXRlS2V5UmVxdWVzdCkgeworICAgICAgICBBU1NFUlQobV9yZXF1ZXN0
SGFuZGxlcik7CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgp
IGxlbmd0aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOworCisgICAgICAgIFJldGFpblB0cjxO
U0RhdGE+IGNvbnRlbnRJZERhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOm1fY29udGVudElkLT5kYXRhKCkgbGVuZ3RoOm1fY29udGVudElkLT5sZW5ndGgoKV0pOwor
CisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IG9wdGlvbnM7CisgICAgICAgIGlmICgh
bV9wcm90b2NvbFZlcnNpb25zLmlzRW1wdHkoKSAmJiBjYW5Mb2FkQVZDb250ZW50S2V5UmVxdWVz
dFByb3RvY29sVmVyc2lvbnNLZXkoKSkgeworICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBwcm90b2NvbFZlcnNpb25zT3B0aW9uID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHZlcnNpb24gOiBtX3Byb3Rv
Y29sVmVyc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZlcnNpb24pCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFtwcm90b2NvbFZlcnNpb25zT3B0
aW9uIGFkZE9iamVjdDpAKHZlcnNpb24pXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
b3B0aW9ucyA9IEB7IGdldEFWQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5KCk6
IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgfQorCisgICAgICAgIGVy
cm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOworICAgICAgICBzeXN0ZW1Db2RlID0gMDsK
KyAgICAgICAgTlNEYXRhKiByZXF1ZXN0RGF0YSA9IFttX3JlcXVlc3RIYW5kbGVyIGNvbnRlbnRL
ZXlSZXF1ZXN0RGF0YUZvckFwcDpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgY29udGVudElkZW50aWZp
ZXI6Y29udGVudElkRGF0YS5nZXQoKSBvcHRpb25zOm9wdGlvbnMuZ2V0KCkgZXJyb3I6bmlsXTsK
KyAgICAgICAgbmV4dE1lc3NhZ2UgPSBVaW50OEFycmF5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KFtyZXF1ZXN0RGF0YSBieXRlc10pLCBbcmVxdWVzdERhdGEgbGVuZ3RoXSk7
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIExPRyhNZWRpYSwgIkNETVNl
c3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoJXApIC0ga2V5IGRhdGEiLCB0aGlzKTsK
KyAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKKyAgICBzeXN0ZW1Db2RlID0g
MDsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBsZW5ndGg6a2V5LT5sZW5ndGgoKV0pOworICAg
IFttX3JlcXVlc3RIYW5kbGVyIHByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VEYXRhOmtleURhdGEu
Z2V0KCldOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFWQ29udGVu
dEtleVNlc3Npb246OmFkZFBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqIHBhcnNlcikKK3sKKyAg
ICBbY29udGVudEtleVNlc3Npb24oKSBhZGRTdHJlYW1EYXRhUGFyc2VyOnBhcnNlcl07Cit9CisK
K3ZvaWQgQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OnJlbW92ZVBhcnNlcihBVlN0cmVh
bURhdGFQYXJzZXIqIHBhcnNlcikKK3sKKyAgICBbY29udGVudEtleVNlc3Npb24oKSByZW1vdmVT
dHJlYW1EYXRhUGFyc2VyOnBhcnNlcl07Cit9CisKK1Bhc3NSZWZQdHI8VWludDhBcnJheT4gQ0RN
U2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5z
aWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkKK3sKKyAg
ICBBU1NFUlQobV9tb2RlID09IEtleVJlbGVhc2UpOworICAgIG1fY2VydGlmaWNhdGUgPSBtX2lu
aXREYXRhOworICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgpIGxlbmd0
aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOworCisgICAgaWYgKCFbZ2V0QVZDb250ZW50S2V5
U2Vzc2lvbkNsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZW5kaW5nRXhwaXJl
ZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOild
KSB7CisgICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0
ZWQ7CisgICAgICAgIHN5c3RlbUNvZGUgPSAnIW1vcic7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVkNvbnRlbnRL
ZXlTZXNzaW9uQ2xhc3MoKSBwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50
aWZpZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsKKyAgICBpZiAoIVtleHBpcmVkU2Vzc2lv
bnMgY291bnRdKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlT
ZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAtIG5vIGV4cGlyZWQgc2Vzc2lv
bnMgZm91bmQiLCB0aGlzKTsKKworICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6S2V5
U3lzdGVtTm90U3VwcG9ydGVkOworICAgICAgICBzeXN0ZW1Db2RlID0gJyFtb3InOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZD
b250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSglcCkgLSBmb3VuZCAl
ZCBleHBpcmVkIHNlc3Npb25zIiwgdGhpcywgW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0pOworCisg
ICAgZXJyb3JDb2RlID0gMDsKKyAgICBzeXN0ZW1Db2RlID0gMDsKKyAgICBtX2V4cGlyZWRTZXNz
aW9uID0gW2V4cGlyZWRTZXNzaW9ucyBmaXJzdE9iamVjdF07CisgICAgcmV0dXJuIFVpbnQ4QXJy
YXk6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW21fZXhwaXJlZFNlc3Npb24g
Ynl0ZXNdKSwgW21fZXhwaXJlZFNlc3Npb24gbGVuZ3RoXSk7Cit9CisKK3ZvaWQgQ0RNU2Vzc2lv
bkFWQ29udGVudEtleVNlc3Npb246OmRpZFByb3ZpZGVDb250ZW50S2V5SW5pdGlhbGl6YXRpb25E
YXRhKEFycmF5QnVmZmVyKiBkYXRhLCBpZDxBVkNvbnRlbnRLZXlTZXNzaW9uUmVxdWVzdEhhbmRs
aW5nPiByZXF1ZXN0SGFuZGxlcikKK3sKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisKKyAgICBt
X3JlcXVlc3RIYW5kbGVyID0gcmVxdWVzdEhhbmRsZXI7Cit9CisKK0FWQ29udGVudEtleVNlc3Np
b24qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpjb250ZW50S2V5U2Vzc2lvbigpCit7
CisgICAgaWYgKCFtX2NvbnRlbnRLZXlTZXNzaW9uKSB7CisgICAgICAgIG1fY29udGVudEtleVNl
c3Npb24gPSBhZG9wdE5TKFtbZ2V0QVZDb250ZW50S2V5U2Vzc2lvbkNsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoU3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFn
ZVBhdGgoKV1dKTsKKyAgICAgICAgbV9jb250ZW50S2V5U2Vzc2lvbi5nZXQoKS5kZWxlZ2F0ZSA9
IG1fY29udGVudEtleVNlc3Npb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bV9jb250ZW50S2V5U2Vzc2lvbi5nZXQoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNl
c3Npb25BVkZvdW5kYXRpb25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5oCmluZGV4IDIx
ODVmZjI2N2IwZmNkODRkNDgyNTE0YmNjYTk4ZWY0MzkxNThmMzkuLjVkOTMwNzM3OGIxYWUzNzZk
NTc1YjdiNDZiNTI0ZGUxZDg2MDVlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkZvdW5kYXRpb25PYmpD
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOwogCiBjbGFzcyBDRE1TZXNzaW9uQVZG
b3VuZGF0aW9uT2JqQyA6IHB1YmxpYyBDRE1TZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBDRE1TZXNz
aW9uQVZGb3VuZGF0aW9uT2JqQyhNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiBw
YXJlbnQpOworICAgIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMqIHBhcmVudCwgQ0RNU2Vzc2lvbkNsaWVudCopOwogICAgIHZpcnR1
YWwgfkNETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDKCkgeyB9CiAKICAgICB2aXJ0dWFsIENETVNl
c3Npb25UeXBlIHR5cGUoKSBvdmVycmlkZSB7IHJldHVybiBDRE1TZXNzaW9uVHlwZUFWRm91bmRh
dGlvbk9iakM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
Rm91bmRhdGlvbk9iakMubW0KaW5kZXggMjRkZDEwODE0MmY1MmMxNTYzMGNhMzJmYzg4MjRlNTc1
ZDliMmFkMi4uY2JkZTE5ODk1YWM5N2U3MDExOGIzZDhmOTFkZDJlNTJhMjBlMWFkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMu
bW0KQEAgLTQ2LDkgKzQ2LDkgQEAgU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZBc3Nl
dFJlc291cmNlTG9hZGluZ1JlcXVlc3QpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0RNU2Vz
c2lvbkFWRm91bmRhdGlvbk9iakM6OkNETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqIHBhcmVudCkKK0NETVNlc3Npb25BVkZvdW5kYXRp
b25PYmpDOjpDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQyhNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDKiBwYXJlbnQsIENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKICAgICA6IG1f
cGFyZW50KHBhcmVudCkKLSAgICAsIG1fY2xpZW50KG51bGxwdHIpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCiAgICAgLCBtX3Nlc3Npb25JZChjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZTdHJlYW1TZXNz
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGFhNDZiZTk4ZWRlMTM4MDNiNTk2YTUxZTVhZGI0MTZhMmI2MWJm
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaApAQCAtMCwwICsxLDg0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uX2gKKyNk
ZWZpbmUgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbl9oCisKKyNpbmNsdWRlICJDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisKK09CSkNfQ0xBU1MgQVZTdHJlYW1TZXNzaW9uOworT0JKQ19DTEFTUyBDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzsKKworY2xhc3MgQ0RNU2Vzc2lvbkFWU3RyZWFt
U2Vzc2lvbiA6IHB1YmxpYyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDIHsKK3B1YmxpYzoK
KyAgICBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm90b2Nv
bFZlcnNpb25zLCBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiwgQ0RNU2Vzc2lvbkNsaWVu
dCopOworICAgIHZpcnR1YWwgfkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb24oKTsKKworICAgIC8v
IENETVNlc3Npb24KKyAgICB2aXJ0dWFsIENETVNlc3Npb25UeXBlIHR5cGUoKSBvdmVycmlkZSB7
IHJldHVybiBDRE1TZXNzaW9uVHlwZUFWU3RyZWFtU2Vzc2lvbjsgfQorICAgIHZpcnR1YWwgUmVm
UHRyPFVpbnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQg
c2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VLZXlzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHVwZGF0ZShVaW50OEFycmF5KiwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0TWVzc2FnZSwgdW5z
aWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJp
ZGU7CisKKyAgICAvLyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDCisgICAgdm9pZCBhZGRQ
YXJzZXIoQVZTdHJlYW1EYXRhUGFyc2VyKikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVQYXJz
ZXIoQVZTdHJlYW1EYXRhUGFyc2VyKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFN0cmVhbVNl
c3Npb24oQVZTdHJlYW1TZXNzaW9uKik7CisKK3Byb3RlY3RlZDoKKyAgICBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQgc2hvcnQmIGVycm9y
Q29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSk7CisKKyAgICBXZWFrUHRyRmFjdG9yeTxD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIFJldGFpblB0
cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vzc2lvbjsKKyAgICBSZWZQdHI8VWludDhBcnJh
eT4gbV9pbml0RGF0YTsKKyAgICBSZWZQdHI8VWludDhBcnJheT4gbV9jZXJ0aWZpY2F0ZTsKKyAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBtX2V4cGlyZWRTZXNzaW9uOworICAgIFJldGFpblB0cjxDRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXI+IG1fZGF0YVBhcnNlck9ic2VydmVyOworICAg
IFZlY3RvcjxpbnQ+IG1fcHJvdG9jb2xWZXJzaW9uczsKKyAgICBlbnVtIHsgTm9ybWFsLCBLZXlS
ZWxlYXNlIH0gbV9tb2RlOworfTsKKworaW5saW5lIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24q
IHRvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNzaW9uKQoreworICAg
IGlmICghc2Vzc2lvbiB8fCBzZXNzaW9uLT50eXBlKCkgIT0gQ0RNU2Vzc2lvblR5cGVBVlN0cmVh
bVNlc3Npb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKj4oc2Vzc2lvbik7Cit9CisKK30KKworI2VuZGlm
CisKKyNlbmRpZiAvLyBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25BVlN0cmVhbVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE1NDBjOTZhNThhMDVjZmRiMjFlZmMyOGRjZTkxYTZiOGFlOWMxNzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUoTUVESUFfU09V
UkNFKQorCisjaW1wb3J0ICJDRE0uaCIKKyNpbXBvcnQgIkNETVByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbXBvcnQgIkZpbGVTeXN0ZW0u
aCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhUGxheWVyLmgiCisjaW1wb3J0
ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIK
KyNpbXBvcnQgIlVVSUQuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkVycm9yLmg+CisjaW1w
b3J0IDxDb3JlTWVkaWEvQ01CYXNlLmg+CisjaW1wb3J0IDxjc3RkbGliPgorI2ltcG9ydCA8b2Jq
Yy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
KyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09Q
VElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWU3Ry
ZWFtRGF0YVBhcnNlcik7CitTT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZGb3VuZGF0aW9uLCBB
VlN0cmVhbVNlc3Npb24pOworU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKEFWRm91bmRhdGlv
biwgQVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5
LCBOU1N0cmluZyAqKQorU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMKEFWRm91bmRhdGlvbiwg
QVZTdHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWRO
b3RpZmljYXRpb24sIE5TU3RyaW5nICopCisKK0BpbnRlcmZhY2UgQVZTdHJlYW1EYXRhUGFyc2Vy
IDogTlNPYmplY3QKKy0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZURhdGE6KE5TRGF0
YSAqKWNvbnRlbnRLZXlSZXNwb25zZURhdGEgZm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJ
RCl0cmFja0lEOworLSAodm9pZClwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRXJyb3I6KE5TRXJy
b3IgKillcnJvciBmb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CistICh2
b2lkKXJlbmV3RXhwaXJpbmdDb250ZW50S2V5UmVzcG9uc2VEYXRhRm9yVHJhY2tJRDooQ01QZXJz
aXN0ZW50VHJhY2tJRCl0cmFja0lEOworLSAoTlNEYXRhICopc3RyZWFtaW5nQ29udGVudEtleVJl
cXVlc3REYXRhRm9yQXBwOihOU0RhdGEgKilhcHBJZGVudGlmaWVyIGNvbnRlbnRJZGVudGlmaWVy
OihOU0RhdGEgKiljb250ZW50SWRlbnRpZmllciB0cmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lE
KXRyYWNrSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAq
KilvdXRFcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBBVlN0cmVhbVNlc3Npb24gOiBOU09iamVj
dAorLSAodm9pZClhZGRTdHJlYW1EYXRhUGFyc2VyOihBVlN0cmVhbURhdGFQYXJzZXIgKilzdHJl
YW1EYXRhUGFyc2VyOworLSAodm9pZClyZW1vdmVTdHJlYW1EYXRhUGFyc2VyOihBVlN0cmVhbURh
dGFQYXJzZXIgKilzdHJlYW1EYXRhUGFyc2VyOworLSAodm9pZClleHBpcmU7CistIChOU0RhdGEg
Kiljb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyOworKyAoTlNBcnJheSAqKXBlbmRp
bmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjooTlNEYXRhICopYXBwSWRl
bnRpZmllciBzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZVVSTDsKKysgKHZv
aWQpcmVtb3ZlUGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0czooTlNBcnJheSAqKWV4cGlyZWRT
ZXNzaW9uUmVwb3J0cyB3aXRoQXBwSWRlbnRpZmllcjooTlNEYXRhICopYXBwSWRlbnRpZmllciBz
dG9yYWdlRGlyZWN0b3J5QXRVUkw6KE5TVVJMICopc3RvcmFnZVVSTDsKK0BlbmQKKworQGludGVy
ZmFjZSBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXIgOiBOU09iamVjdCB7CisgICAg
V2ViQ29yZTo6Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbiAqbV9wYXJlbnQ7Cit9CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXIKKy0gKGlk
KWluaXRXaXRoUGFyZW50OihXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uICopcGFy
ZW50Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgbV9wYXJlbnQg
PSBwYXJlbnQ7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY29udGVudFByb3RlY3Rp
b25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgQVZTdHJlYW1TZXNzaW9uKiBzdHJlYW1TZXNzaW9uID0gKEFWU3RyZWFtU2Vzc2lv
biopW25vdGlmaWNhdGlvbiBvYmplY3RdOworCisgICAgTlNEYXRhKiBpZGVudGlmaWVyID0gW3N0
cmVhbVNlc3Npb24gY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcl07CisgICAgUmV0
YWluUHRyPE5TU3RyaW5nPiBzZXNzaW9uSWRlbnRpZmllclN0cmluZyA9IGlkZW50aWZpZXIgPyBh
ZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppZGVudGlmaWVyIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSkgOiBuaWw7CisKKyAgICBpZiAobV9wYXJlbnQpCisgICAg
ICAgIG1fcGFyZW50LT5zZXRTZXNzaW9uSWQoc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcuZ2V0KCkp
OworfQorQGVuZAorCitzdGF0aWMgY29uc3QgTlNTdHJpbmcgKlBsYXliYWNrU2Vzc2lvbklkS2V5
ID0gQCJQbGF5YmFja1Nlc3Npb25JRCI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0RNU2Vz
c2lvbkFWU3RyZWFtU2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbihjb25zdCBWZWN0
b3I8aW50PiYgcHJvdG9jb2xWZXJzaW9ucywgQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyYg
Y2RtLCBDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDKGNkbSwgY2xpZW50KQorICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQorICAg
ICwgbV9kYXRhUGFyc2VyT2JzZXJ2ZXIoYWRvcHROUyhbW0NETVNlc3Npb25BVlN0cmVhbVNlc3Np
b25PYnNlcnZlciBhbGxvY10gaW5pdFdpdGhQYXJlbnQ6dGhpc10pKQorICAgICwgbV9wcm90b2Nv
bFZlcnNpb25zKHByb3RvY29sVmVyc2lvbnMpCisgICAgLCBtX21vZGUoTm9ybWFsKQoreworfQor
CitDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp+Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbigp
Cit7CisgICAgc2V0U3RyZWFtU2Vzc2lvbihudWxscHRyKTsKKworICAgIGZvciAoYXV0byYgc291
cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKQorICAgICAgICByZW1vdmVQYXJzZXIoc291cmNl
QnVmZmVyLT5wYXJzZXIoKSk7Cit9CisKK1JlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZT
dHJlYW1TZXNzaW9uOjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VWludDhBcnJheSogaW5pdERhdGEsIFN0cmluZyYgZGVzdGluYXRpb25VUkwsIHVuc2lnbmVkIHNo
b3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpCit7CisgICAgVU5VU0VE
X1BBUkFNKG1pbWVUeXBlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOworICAg
IEFTU0VSVChpbml0RGF0YSk7CisKKyAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1T
ZXNzaW9uOjpnZW5lcmF0ZUtleVJlcXVlc3QoJXApIiwgdGhpcyk7CisKKyAgICBlcnJvckNvZGUg
PSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKKyAgICBzeXN0ZW1Db2RlID0gMDsKKworICAgIG1faW5p
dERhdGEgPSBpbml0RGF0YTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwg
ImtleXJlbGVhc2UiKSkgeworICAgICAgICBtX21vZGUgPSBLZXlSZWxlYXNlOworICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZShlcnJvckNvZGUsIHN5c3RlbUNvZGUpOwor
ICAgIH0KKworICAgIFN0cmluZyBjZXJ0aWZpY2F0ZVN0cmluZyhBU0NJSUxpdGVyYWwoImNlcnRp
ZmljYXRlIikpOworICAgIFJlZlB0cjxVaW50OEFycmF5PiBhcnJheSA9IFVpbnQ4QXJyYXk6OmNy
ZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgbGVuZ3RoID0gY2VydGlmaWNhdGVTdHJpbmcubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkK
KyAgICAgICAgYXJyYXktPnNldChpLCBjZXJ0aWZpY2F0ZVN0cmluZ1tpXSk7CisgICAgcmV0dXJu
IGFycmF5OworfQorCit2b2lkIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnJlbGVhc2VLZXlz
KCkKK3sKKyAgICBpZiAobV9zdHJlYW1TZXNzaW9uKSB7CisgICAgICAgIG1fc3RvcHBlZCA9IHRy
dWU7CisgICAgICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKQor
ICAgICAgICAgICAgc291cmNlQnVmZmVyLT5mbHVzaCgpOworCisgICAgICAgIExPRyhNZWRpYSwg
IkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnJlbGVhc2VLZXlzKCVwKSAtIGV4cGlyaW5nIHN0
cmVhbSBzZXNzaW9uIiwgdGhpcyk7CisgICAgICAgIFttX3N0cmVhbVNlc3Npb24gZXhwaXJlXTsK
KworICAgICAgICBpZiAoIW1fY2VydGlmaWNhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKCFbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpz
dG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxv
Y10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNh
dGUtPmxlbmd0aCgpXSk7CisgICAgICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRB
VlN0cmVhbVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBw
SWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOworICAgICAgICBmb3IgKE5TRGF0
YSogZXhwaXJlZFNlc3Npb25EYXRhIGluIGV4cGlyZWRTZXNzaW9ucykgeworICAgICAgICAgICAg
TlNEaWN0aW9uYXJ5ICpleHBpcmVkU2Vzc2lvbiA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRp
b24gcHJvcGVydHlMaXN0V2l0aERhdGE6ZXhwaXJlZFNlc3Npb25EYXRhIG9wdGlvbnM6a0NGUHJv
cGVydHlMaXN0SW1tdXRhYmxlIGZvcm1hdDpudWxscHRyIGVycm9yOm51bGxwdHJdOworICAgICAg
ICAgICAgTlNTdHJpbmcgKnBsYXliYWNrU2Vzc2lvbklkVmFsdWUgPSAoTlNTdHJpbmcgKilbZXhw
aXJlZFNlc3Npb24gb2JqZWN0Rm9yS2V5OlBsYXliYWNrU2Vzc2lvbklkS2V5XTsKKyAgICAgICAg
ICAgIGlmICghW3BsYXliYWNrU2Vzc2lvbklkVmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKG1f
c2Vzc2lvbklkID09IFN0cmluZyhwbGF5YmFja1Nlc3Npb25JZFZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnJlbGVhc2VLZXlz
KCVwKSAtIGZvdW5kIHNlc3Npb24sIHNlbmRpbmcgZXhwaXJhdGlvbiBtZXNzYWdlIik7CisgICAg
ICAgICAgICAgICAgbV9leHBpcmVkU2Vzc2lvbiA9IGV4cGlyZWRTZXNzaW9uRGF0YTsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2UoVWludDhBcnJheTo6Y3JlYXRlKHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBieXRlc10pLCBbbV9leHBp
cmVkU2Vzc2lvbiBsZW5ndGhdKS5nZXQoKSwgZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGlzRXF1YWwoVWludDhBcnJheSogZGF0YSwgY29uc3QgY2hhciogbGl0ZXJhbCkKK3sKKyAg
ICBBU1NFUlQoZGF0YSk7CisgICAgQVNTRVJUKGxpdGVyYWwpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGRhdGEtPmxlbmd0aCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGlmICghbGl0ZXJhbFtpXSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoZGF0YS0+aXRlbShpKSAhPSBzdGF0aWNfY2FzdDx1aW50OF90
PihsaXRlcmFsW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuICFsaXRlcmFsW2xlbmd0aF07Cit9CisKK2Jvb2wgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lv
bjo6dXBkYXRlKFVpbnQ4QXJyYXkqIGtleSwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0TWVzc2Fn
ZSwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkK
K3sKKyAgICBib29sIHNob3VsZEdlbmVyYXRlS2V5UmVxdWVzdCA9ICFtX2NlcnRpZmljYXRlIHx8
IGlzRXF1YWwoa2V5LCAicmVuZXciKTsKKyAgICBpZiAoIW1fY2VydGlmaWNhdGUpIHsKKyAgICAg
ICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGNl
cnRpZmljYXRlIGRhdGEiLCB0aGlzKTsKKworICAgICAgICBtX2NlcnRpZmljYXRlID0ga2V5Owor
ICAgIH0KKworICAgIGlmIChpc0VxdWFsKGtleSwgImFja25vd2xlZGdlZCIpKSB7CisgICAgICAg
IExPRyhNZWRpYSwgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnVwZGF0ZSglcCkgLSBhY2tu
b3dsZWRpbmcgc2VjdXJlIHN0b3AgbWVzc2FnZSIsIHRoaXMpOworCisgICAgICAgIGlmICghbV9l
eHBpcmVkU2Vzc2lvbikgeworICAgICAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6Oklu
dmFsaWRQbGF5ZXJTdGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgpIGxlbmd0aDpt
X2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOworCisgICAgICAgIGlmIChbZ2V0QVZTdHJlYW1TZXNz
aW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZVBlbmRpbmdFeHBp
cmVkU2Vzc2lvblJlcG9ydHM6d2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJM
OildKQorICAgICAgICAgICAgW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkgcmVtb3ZlUGVuZGlu
Z0V4cGlyZWRTZXNzaW9uUmVwb3J0czpAW21fZXhwaXJlZFNlc3Npb24uZ2V0KCldIHdpdGhBcHBJ
ZGVudGlmaWVyOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBzdG9yYWdlRGlyZWN0b3J5QXRVUkw6W05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgpXV07CisgICAgICAgIG1fZXhwaXJlZFNl
c3Npb24gPSBudWxscHRyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
bV9tb2RlID09IEtleVJlbGVhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQz4gcHJvdGVjdGVkU291cmNlQnVmZmVyOworICAg
IGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKSB7CisgICAgICAgIGlm
IChzb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKSAhPSAtMSkgeworICAgICAgICAgICAg
cHJvdGVjdGVkU291cmNlQnVmZmVyID0gc291cmNlQnVmZmVyOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR2VuZXJhdGVLZXlSZXF1ZXN0KSB7
CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgpIGxlbmd0aDpt
X2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOworCisgICAgICAgIGlmIChtX3NvdXJjZUJ1ZmZlcnMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKCFwcm90
ZWN0ZWRTb3VyY2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBpbml0RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0aDptX2luaXREYXRhLT5sZW5ndGgoKV0p
OworCisKKyAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gb3B0aW9uczsKKyAgICAgICAg
aWYgKCFtX3Byb3RvY29sVmVyc2lvbnMuaXNFbXB0eSgpICYmIGNhbkxvYWRBVlN0cmVhbURhdGFQ
YXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXkoKSkgeworICAgICAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZlcnNpb25zT3B0aW9uID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIHZlcnNpb24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IFtwcm90b2NvbFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZlcnNpb24pXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgb3B0aW9ucyA9IEB7IGdldEFWU3RyZWFtRGF0YVBhcnNlckNv
bnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpOiBwcm90b2NvbFZlcnNpb25zT3B0
aW9uLmdldCgpIH07CisgICAgICAgIH0KKworICAgICAgICBOU0Vycm9yKiBlcnJvciA9IG5pbDsK
KyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gcmVxdWVzdCA9IFtwcm90ZWN0ZWRTb3VyY2VCdWZm
ZXItPnBhcnNlcigpIHN0cmVhbWluZ0NvbnRlbnRLZXlSZXF1ZXN0RGF0YUZvckFwcDpjZXJ0aWZp
Y2F0ZURhdGEuZ2V0KCkgY29udGVudElkZW50aWZpZXI6aW5pdERhdGEuZ2V0KCkgdHJhY2tJRDpw
cm90ZWN0ZWRTb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKSBvcHRpb25zOm9wdGlvbnMu
Z2V0KCkgZXJyb3I6JmVycm9yXTsKKworICAgICAgICBpZiAoIVtwcm90ZWN0ZWRTb3VyY2VCdWZm
ZXItPnBhcnNlcigpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudFByb3RlY3Rp
b25TZXNzaW9uSWRlbnRpZmllcildKQorICAgICAgICAgICAgbV9zZXNzaW9uSWQgPSBjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAg
ICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoJXApIC0gZXJy
b3I6JUAiLCB0aGlzLCBbZXJyb3IgZGVzY3JpcHRpb25dKTsKKyAgICAgICAgICAgIGVycm9yQ29k
ZSA9IE1lZGlhUGxheWVyOjpJbnZhbGlkUGxheWVyU3RhdGU7CisgICAgICAgICAgICBzeXN0ZW1D
b2RlID0gc3RkOjphYnMoc3lzdGVtQ29kZUZvckVycm9yKGVycm9yKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBuZXh0TWVzc2FnZSA9IFVpbnQ4QXJy
YXk6OmNyZWF0ZShbcmVxdWVzdCBsZW5ndGhdKTsKKyAgICAgICAgW3JlcXVlc3QgZ2V0Qnl0ZXM6
bmV4dE1lc3NhZ2UtPmRhdGEoKSBsZW5ndGg6bmV4dE1lc3NhZ2UtPmxlbmd0aCgpXTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVCghbV9zb3VyY2VCdWZmZXJzLmlz
RW1wdHkoKSk7CisgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBk
YXRlKCVwKSAtIGtleSBkYXRhIiwgdGhpcyk7CisgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6
Ok5vRXJyb3I7CisgICAgc3lzdGVtQ29kZSA9IDA7CisgICAgUmV0YWluUHRyPE5TRGF0YT4ga2V5
RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6a2V5LT5kYXRhKCkg
bGVuZ3RoOmtleS0+bGVuZ3RoKCldKTsKKyAgICBbcHJvdGVjdGVkU291cmNlQnVmZmVyLT5wYXJz
ZXIoKSBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRGF0YTprZXlEYXRhLmdldCgpIGZvclRyYWNr
SUQ6cHJvdGVjdGVkU291cmNlQnVmZmVyLT5wcm90ZWN0ZWRUcmFja0lEKCldOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6c2V0U3RyZWFt
U2Vzc2lvbihBVlN0cmVhbVNlc3Npb24gKnN0cmVhbVNlc3Npb24pCit7CisgICAgaWYgKG1fc3Ry
ZWFtU2Vzc2lvbiAmJiBjYW5Mb2FkQVZTdHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNz
aW9uSWRlbnRpZmllckNoYW5nZWROb3RpZmljYXRpb24oKSkKKyAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2RhdGFQYXJzZXJPYnNl
cnZlci5nZXQoKSBuYW1lOmdldEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lv
bklkZW50aWZpZXJDaGFuZ2VkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om1fc3RyZWFtU2Vzc2lvbi5n
ZXQoKV07CisKKyAgICBtX3N0cmVhbVNlc3Npb24gPSBzdHJlYW1TZXNzaW9uOworCisgICAgaWYg
KCFtX3N0cmVhbVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjYW5Mb2FkQVZT
dHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWROb3Rp
ZmljYXRpb24oKSkKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlcjptX2RhdGFQYXJzZXJPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0
b3IoY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWQ6KSBuYW1lOmdldEFW
U3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkTm90
aWZpY2F0aW9uKCkgb2JqZWN0Om1fc3RyZWFtU2Vzc2lvbi5nZXQoKV07CisKKyAgICBOU0RhdGEq
IGlkZW50aWZpZXIgPSBbc3RyZWFtU2Vzc2lvbiBjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVu
dGlmaWVyXTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHNlc3Npb25JZGVudGlmaWVyU3RyaW5n
ID0gaWRlbnRpZmllciA/IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmlk
ZW50aWZpZXIgZW5jb2Rpbmc6KE5TVVRGOFN0cmluZ0VuY29kaW5nKV0pIDogbmlsOworICAgIHNl
dFNlc3Npb25JZChzZXNzaW9uSWRlbnRpZmllclN0cmluZy5nZXQoKSk7Cit9CisKK3ZvaWQgQ0RN
U2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6YWRkUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciogcGFy
c2VyKQoreworICAgIGlmIChtX3N0cmVhbVNlc3Npb24pCisgICAgICAgIFttX3N0cmVhbVNlc3Np
b24gYWRkU3RyZWFtRGF0YVBhcnNlcjpwYXJzZXJdOworfQorCit2b2lkIENETVNlc3Npb25BVlN0
cmVhbVNlc3Npb246OnJlbW92ZVBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqIHBhcnNlcikKK3sK
KyAgICBpZiAobV9zdHJlYW1TZXNzaW9uKQorICAgICAgICBbbV9zdHJlYW1TZXNzaW9uIHJlbW92
ZVN0cmVhbURhdGFQYXJzZXI6cGFyc2VyXTsKK30KKworUGFzc1JlZlB0cjxVaW50OEFycmF5PiBD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKHVuc2ln
bmVkIHNob3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpCit7CisgICAg
QVNTRVJUKG1fbW9kZSA9PSBLZXlSZWxlYXNlKTsKKyAgICBtX2NlcnRpZmljYXRlID0gbV9pbml0
RGF0YTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6
bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsKKworICAgIGlmICghW2dldEFWU3RyZWFtU2Vzc2lv
bkNsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZW5kaW5nRXhwaXJlZFNlc3Np
b25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOildKSB7Cisg
ICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7Cisg
ICAgICAgIHN5c3RlbUNvZGUgPSAnIW1vcic7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVlN0cmVhbVNlc3Npb25D
bGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpjZXJ0
aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6c3RvcmFnZVBhdGgoKV1dOworICAgIGlmICghW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0p
IHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6Z2VuZXJh
dGVLZXlSZWxlYXNlTWVzc2FnZSglcCkgLSBubyBleHBpcmVkIHNlc3Npb25zIGZvdW5kIiwgdGhp
cyk7CisKKyAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBv
cnRlZDsKKyAgICAgICAgc3lzdGVtQ29kZSA9ICchbW9yJzsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6
Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSglcCkgLSBmb3VuZCAlZCBleHBpcmVkIHNlc3Npb25z
IiwgdGhpcywgW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0pOworCisgICAgZXJyb3JDb2RlID0gMDsK
KyAgICBzeXN0ZW1Db2RlID0gMDsKKyAgICBtX2V4cGlyZWRTZXNzaW9uID0gW2V4cGlyZWRTZXNz
aW9ucyBmaXJzdE9iamVjdF07CisgICAgcmV0dXJuIFVpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oW21fZXhwaXJlZFNlc3Npb24gYnl0ZXNdKSwgW21fZXhwaXJl
ZFNlc3Npb24gbGVuZ3RoXSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmgKaW5kZXggNjgwZTVl
ZjliNDM3ODk3ZTkxZDYwNDhkMzk2MWIwMmNlYzhhYzZhYi4uZWY4YmUyOWMzZmZlNjJhMzY0MTJj
MmRhNmZkYzJmNTQxN2M3OTc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNjIgKzI5LDYwIEBACiAjaW5jbHVkZSAiQ0RN
U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQogCi1PQkpD
X0NMQVNTIEFWU3RyZWFtU2Vzc2lvbjsKLU9CSkNfQ0xBU1MgQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQ09ic2VydmVyOworT0JKQ19DTEFTUyBBVlN0cmVhbURhdGFQYXJzZXI7CitPQkpDX0NM
QVNTIE5TRXJyb3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0RNUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzsKKwogY2xhc3MgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyA6
IHB1YmxpYyBDRE1TZXNzaW9uLCBwdWJsaWMgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakNFcnJv
ckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyhjb25z
dCBWZWN0b3I8aW50PiYgcHJvdG9jb2xWZXJzaW9ucyk7CisgICAgQ0RNU2Vzc2lvbk1lZGlhU291
cmNlQVZGT2JqQyhDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiwgQ0RNU2Vzc2lvbkNsaWVu
dCopOwogICAgIHZpcnR1YWwgfkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoKTsKIAotICAg
IHZpcnR1YWwgQ0RNU2Vzc2lvblR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJuIENETVNlc3Np
b25UeXBlTWVkaWFTb3VyY2VBVkZPYmpDOyB9CisgICAgdmlydHVhbCB2b2lkIGFkZFBhcnNlcihB
VlN0cmVhbURhdGFQYXJzZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVBhcnNlcihB
VlN0cmVhbURhdGFQYXJzZXIqKSA9IDA7CisKKyAgICAvLyBDRE1TZXNzaW9uCiAgICAgdmlydHVh
bCB2b2lkIHNldENsaWVudChDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQpIG92ZXJyaWRlIHsgbV9j
bGllbnQgPSBjbGllbnQ7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZXNzaW9uSWQ7IH0KLSAgICB2aXJ0dWFsIFJlZlB0
cjxVaW50OEFycmF5PiBnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VWludDhBcnJheSogaW5pdERhdGEsIFN0cmluZyYgZGVzdGluYXRpb25VUkwsIHVuc2lnbmVkIHNo
b3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlS2V5cygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGUoVWludDhBcnJheSosIFJlZlB0cjxVaW50OEFycmF5PiYgbmV4dE1lc3NhZ2UsIHVuc2ln
bmVkIHNob3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpIG92ZXJyaWRl
OwogCisgICAgLy8gU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakNFcnJvckNsaWVudAogICAgIHZp
cnR1YWwgdm9pZCBsYXllckRpZFJlY2VpdmVFcnJvcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ciAqLCBOU0Vycm9yICosIGJvb2wmIHNob3VsZElnbm9yZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHJlbmRlcmVyRGlkUmVjZWl2ZUVycm9yKEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJl
ciAqLCBOU0Vycm9yICosIGJvb2wmIHNob3VsZElnbm9yZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNldFN0cmVhbVNlc3Npb24oQVZTdHJlYW1TZXNzaW9uICopOwotCiAgICAgdm9pZCBhZGRTb3Vy
Y2VCdWZmZXIoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqKTsKICAgICB2b2lkIHJlbW92ZVNv
dXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopOwotCiAgICAgdm9pZCBzZXRT
ZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIHsgbV9zZXNzaW9uSWQgPSBzZXNzaW9u
SWQ7IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZUNETSgpIHsgbV9jZG0gPSBudWxscHRyOyB9CisK
IHByb3RlY3RlZDoKKyAgICBzdGF0aWMgbG9uZyBzeXN0ZW1Db2RlRm9yRXJyb3IoTlNFcnJvciAq
KTsKICAgICBTdHJpbmcgc3RvcmFnZVBhdGgoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFVpbnQ4
QXJyYXk+IGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQgc2hvcnQmIGVycm9yQ29k
ZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSk7CiAKKyAgICBDRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDKiBtX2NkbTsKKyAgICBDRE1TZXNzaW9uQ2xpZW50KiBtX2NsaWVudCB7IG51bGxw
dHIgfTsKICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPj4gbV9z
b3VyY2VCdWZmZXJzOwotICAgIENETVNlc3Npb25DbGllbnQqIG1fY2xpZW50OwotICAgIFJldGFp
blB0cjxBVlN0cmVhbVNlc3Npb24+IG1fc3RyZWFtU2Vzc2lvbjsKLSAgICBSZWZQdHI8VWludDhB
cnJheT4gbV9pbml0RGF0YTsKICAgICBSZWZQdHI8VWludDhBcnJheT4gbV9jZXJ0aWZpY2F0ZTsK
LSAgICBSZXRhaW5QdHI8TlNEYXRhPiBtX2V4cGlyZWRTZXNzaW9uOwotICAgIFJldGFpblB0cjxD
RE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDT2JzZXJ2ZXI+IG1fZGF0YVBhcnNlck9ic2VydmVy
OwotICAgIFZlY3RvcjxpbnQ+IG1fcHJvdG9jb2xWZXJzaW9uczsKICAgICBTdHJpbmcgbV9zZXNz
aW9uSWQ7Ci0gICAgZW51bSB7IE5vcm1hbCwgS2V5UmVsZWFzZSB9IG1fbW9kZTsKLSAgICBib29s
IG1fc3RvcHBlZCA9IHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RvcHBlZCB7IGZhbHNlIH07CiB9
OwogCiBpbmxpbmUgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogdG9DRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDKENETVNlc3Npb24qIHNlc3Npb24pCiB7Ci0gICAgaWYgKCFzZXNzaW9u
IHx8IHNlc3Npb24tPnR5cGUoKSAhPSBDRE1TZXNzaW9uVHlwZU1lZGlhU291cmNlQVZGT2JqQykK
KyAgICBpZiAoIXNlc3Npb24gfHwgKHNlc3Npb24tPnR5cGUoKSAhPSBDRE1TZXNzaW9uVHlwZUFW
U3RyZWFtU2Vzc2lvbiAmJiBzZXNzaW9uLT50eXBlKCkgIT0gQ0RNU2Vzc2lvblR5cGVBVkNvbnRl
bnRLZXlTZXNzaW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMqPihzZXNzaW9uKTsKIH0KIAogfQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUo
TUVESUFfU09VUkNFKQogCiAjZW5kaWYgLy8gQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQ19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQy5tbQppbmRleCBmYzk3NzNlOWJmYmRjYmNhN2UxZWYyYTY4NDZmMjdjMmZmZDc2Yzky
Li5kOWIxZTZkNWI3NzQ3NjNkYzkzYzU3MWUxODIzZmI4NjgyMWY4ODdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0K
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDI2
NSArMjgsMjMgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShN
RURJQV9TT1VSQ0UpCiAKLSNpbXBvcnQgIkNETS5oIgotI2ltcG9ydCAiQ0RNU2Vzc2lvbi5oIgot
I2ltcG9ydCAiRXhjZXB0aW9uQ29kZS5oIgorI2ltcG9ydCAiQ0RNUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiTWVkaWFQbGF5ZXIuaCIKLSNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDLmgiCi0jaW1wb3J0ICJTb2Z0TGlua2luZy5oIgotI2ltcG9ydCAiVVVJRC5oIgogI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWRXJyb3IuaD4KLSNpbXBvcnQgPENvcmVNZWRpYS9DTUJhc2UuaD4K
ICNpbXBvcnQgPGNzdGRsaWI+Ci0jaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDxydW50aW1lL1R5cGVkQXJyYXlJbmxp
bmVzLmg+Ci0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQotU09G
VF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRhUGFyc2VyKTsKLVNPRlRfTElO
S19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbik7Ci1TT0ZUX0xJ
TktfQ09OU1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXJDb250
ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXksIE5TU3RyaW5nICopCi1TT0ZUX0xJTktf
Q09OU1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbVNlc3Npb25Db250ZW50UHJv
dGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikK
LQotQGludGVyZmFjZSBBVlN0cmVhbURhdGFQYXJzZXIgOiBOU09iamVjdAotLSAodm9pZClwcm9j
ZXNzQ29udGVudEtleVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0
YSBmb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Ci0tICh2b2lkKXByb2Nl
c3NDb250ZW50S2V5UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENN
UGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRDsKLS0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRL
ZXlSZXNwb25zZURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Ci0t
IChOU0RhdGEgKilzdHJlYW1pbmdDb250ZW50S2V5UmVxdWVzdERhdGFGb3JBcHA6KE5TRGF0YSAq
KWFwcElkZW50aWZpZXIgY29udGVudElkZW50aWZpZXI6KE5TRGF0YSAqKWNvbnRlbnRJZGVudGlm
aWVyIHRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRCBvcHRpb25zOihOU0RpY3Rp
b25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICoqKW91dEVycm9yOwotQGVuZAotCi1AaW50
ZXJmYWNlIEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0Ci0tICh2b2lkKWFkZFN0cmVhbURhdGFQ
YXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJzZXI7Ci0tICh2b2lkKXJl
bW92ZVN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJz
ZXI7Ci0tICh2b2lkKWV4cGlyZTsKLS0gKE5TRGF0YSAqKWNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lv
bklkZW50aWZpZXI7Ci0rIChOU0FycmF5ICopcGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dp
dGhBcHBJZGVudGlmaWVyOihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlB
dFVSTDooTlNVUkwgKilzdG9yYWdlVVJMOwotKyAodm9pZClyZW1vdmVQZW5kaW5nRXhwaXJlZFNl
c3Npb25SZXBvcnRzOihOU0FycmF5ICopZXhwaXJlZFNlc3Npb25SZXBvcnRzIHdpdGhBcHBJZGVu
dGlmaWVyOihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNV
UkwgKilzdG9yYWdlVVJMOwotQGVuZAotCi1AaW50ZXJmYWNlIENETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakNPYnNlcnZlciA6IE5TT2JqZWN0IHsKLSAgICBXZWJDb3JlOjpDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDICptX3BhcmVudDsKLX0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIENE
TVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakNPYnNlcnZlcgotLSAoaWQpaW5pdFdpdGhQYXJlbnQ6
KFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMgKilwYXJlbnQKLXsKLSAgICBp
ZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBtX3BhcmVudCA9IHBhcmVudDsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCljb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVu
dGlmaWVyQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBBVlN0
cmVhbVNlc3Npb24qIHN0cmVhbVNlc3Npb24gPSAoQVZTdHJlYW1TZXNzaW9uKilbbm90aWZpY2F0
aW9uIG9iamVjdF07Ci0KLSAgICBOU0RhdGEqIGlkZW50aWZpZXIgPSBbc3RyZWFtU2Vzc2lvbiBj
b250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyXTsKLSAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IHNlc3Npb25JZGVudGlmaWVyU3RyaW5nID0gaWRlbnRpZmllciA/IGFkb3B0TlMoW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmlkZW50aWZpZXIgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddKSA6IG5pbDsKLQotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAgbV9wYXJlbnQt
PnNldFNlc3Npb25JZChzZXNzaW9uSWRlbnRpZmllclN0cmluZy5nZXQoKSk7Ci19Ci1AZW5kCi0K
LXN0YXRpYyBjb25zdCBOU1N0cmluZyAqUGxheWJhY2tTZXNzaW9uSWRLZXkgPSBAIlBsYXliYWNr
U2Vzc2lvbklEIjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKGNvbnN0IFZlY3RvcjxpbnQ+
JiBwcm90b2NvbFZlcnNpb25zKQotICAgIDogbV9jbGllbnQobnVsbHB0cikKLSAgICAsIG1fZGF0
YVBhcnNlck9ic2VydmVyKGFkb3B0TlMoW1tDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDT2Jz
ZXJ2ZXIgYWxsb2NdIGluaXRXaXRoUGFyZW50OnRoaXNdKSkKLSAgICAsIG1fcHJvdG9jb2xWZXJz
aW9ucyhwcm90b2NvbFZlcnNpb25zKQotICAgICwgbV9tb2RlKE5vcm1hbCkKK0NETVNlc3Npb25N
ZWRpYVNvdXJjZUFWRk9iakM6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoQ0RNUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQyYgY2RtLCBDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX2NkbSgmY2RtKQorICAgICwgbV9jbGllbnQoY2xpZW50KQogewogfQogCiBDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDOjp+Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQygpCiB7Ci0g
ICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKLSAgICAgICAg
aWYgKG1fc3RyZWFtU2Vzc2lvbikKLSAgICAgICAgICAgIFttX3N0cmVhbVNlc3Npb24gcmVtb3Zl
U3RyZWFtRGF0YVBhcnNlcjpzb3VyY2VCdWZmZXItPnBhcnNlcigpXTsKLSAgICB9Ci0KLSAgICBz
ZXRTdHJlYW1TZXNzaW9uKG51bGxwdHIpOwotfQotCi1SZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQzo6Z2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCB1
bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQotewot
ICAgIFVOVVNFRF9QQVJBTShtaW1lVHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
VVJMKTsKLSAgICBBU1NFUlQoaW5pdERhdGEpOwotCi0gICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lv
bk1lZGlhU291cmNlQVZGT2JqQzo6Z2VuZXJhdGVLZXlSZXF1ZXN0KCVwKSIsIHRoaXMpOwotCi0g
ICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Ci0gICAgc3lzdGVtQ29kZSA9IDA7
Ci0KLSAgICBtX2luaXREYXRhID0gaW5pdERhdGE7Ci0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobWltZVR5cGUsICJrZXlyZWxlYXNlIikpIHsKLSAgICAgICAgbV9tb2RlID0gS2V5UmVsZWFz
ZTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UoZXJyb3JDb2RlLCBz
eXN0ZW1Db2RlKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgY2VydGlmaWNhdGVTdHJpbmcoQVNDSUlM
aXRlcmFsKCJjZXJ0aWZpY2F0ZSIpKTsKLSAgICBSZWZQdHI8VWludDhBcnJheT4gYXJyYXkgPSBV
aW50OEFycmF5OjpjcmVhdGUoY2VydGlmaWNhdGVTdHJpbmcubGVuZ3RoKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGNlcnRpZmljYXRlU3RyaW5nLmxlbmd0aCgpOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIGFycmF5LT5zZXQoaSwgY2VydGlmaWNhdGVTdHJpbmdbaV0p
OwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdm9pZCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZP
YmpDOjpyZWxlYXNlS2V5cygpCi17Ci0gICAgaWYgKG1fc3RyZWFtU2Vzc2lvbikgewotICAgICAg
ICBtX3N0b3BwZWQgPSB0cnVlOwotICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1f
c291cmNlQnVmZmVycykKLSAgICAgICAgICAgIHNvdXJjZUJ1ZmZlci0+Zmx1c2goKTsKLQotICAg
ICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpyZWxlYXNlS2V5
cyglcCkgLSBleHBpcmluZyBzdHJlYW0gc2Vzc2lvbiIsIHRoaXMpOwotICAgICAgICBbbV9zdHJl
YW1TZXNzaW9uIGV4cGlyZV07Ci0KLSAgICAgICAgaWYgKCFtX2NlcnRpZmljYXRlKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRz
V2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOildKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgp
IGxlbmd0aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOwotICAgICAgICBOU0FycmF5KiBleHBp
cmVkU2Vzc2lvbnMgPSBbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSBwZW5kaW5nRXhwaXJlZFNl
c3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3Jh
Z2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsK
LSAgICAgICAgZm9yIChOU0RhdGEqIGV4cGlyZWRTZXNzaW9uRGF0YSBpbiBleHBpcmVkU2Vzc2lv
bnMpIHsKLSAgICAgICAgICAgIE5TRGljdGlvbmFyeSAqZXhwaXJlZFNlc3Npb24gPSBbTlNQcm9w
ZXJ0eUxpc3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOmV4cGlyZWRTZXNzaW9u
RGF0YSBvcHRpb25zOmtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJv
cjpudWxscHRyXTsKLSAgICAgICAgICAgIE5TU3RyaW5nICpwbGF5YmFja1Nlc3Npb25JZFZhbHVl
ID0gKE5TU3RyaW5nICopW2V4cGlyZWRTZXNzaW9uIG9iamVjdEZvcktleTpQbGF5YmFja1Nlc3Np
b25JZEtleV07Ci0gICAgICAgICAgICBpZiAoIVtwbGF5YmFja1Nlc3Npb25JZFZhbHVlIGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIGlmIChtX3Nlc3Npb25JZCA9PSBTdHJpbmcocGxheWJhY2tTZXNzaW9uSWRW
YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpyZWxlYXNlS2V5cyglcCkgLSBmb3VuZCBzZXNzaW9uLCBzZW5kaW5nIGV4cGly
YXRpb24gbWVzc2FnZSIpOwotICAgICAgICAgICAgICAgIG1fZXhwaXJlZFNlc3Npb24gPSBleHBp
cmVkU2Vzc2lvbkRhdGE7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlKFVp
bnQ4QXJyYXk6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW21fZXhwaXJlZFNl
c3Npb24gYnl0ZXNdKSwgW21fZXhwaXJlZFNlc3Npb24gbGVuZ3RoXSkuZ2V0KCksIGVtcHR5U3Ry
aW5nKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBpc0VxdWFsKFVpbnQ4QXJyYXkqIGRhdGEsIGNvbnN0
IGNoYXIqIGxpdGVyYWwpCi17Ci0gICAgQVNTRVJUKGRhdGEpOwotICAgIEFTU0VSVChsaXRlcmFs
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLT5sZW5ndGgoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWxpdGVyYWxbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGEtPml0ZW0oaSkg
IT0gc3RhdGljX2Nhc3Q8dWludDhfdD4obGl0ZXJhbFtpXSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiAhbGl0ZXJhbFtsZW5ndGhdOwotfQotCi1zdGF0aWMg
TlNJbnRlZ2VyIHN5c3RlbUNvZGVGb3JFcnJvcihOU0Vycm9yICplcnJvcikKLXsKLSAgICBOU0lu
dGVnZXIgY29kZSA9IFtlcnJvciBjb2RlXTsKLSAgICBpZiAoY29kZSAhPSBBVkVycm9yVW5rbm93
bikKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0KLSAgICBOU0Vycm9yKiB1bmRlcmx5aW5nRXJyb3Ig
PSBbZXJyb3IudXNlckluZm8gdmFsdWVGb3JLZXk6TlNVbmRlcmx5aW5nRXJyb3JLZXldOwotICAg
IGlmICghdW5kZXJseWluZ0Vycm9yIHx8ICFbdW5kZXJseWluZ0Vycm9yIGlzS2luZE9mQ2xhc3M6
W05TRXJyb3IgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgCi0gICAgcmV0dXJu
IFt1bmRlcmx5aW5nRXJyb3IgY29kZV07Ci19Ci0KLWJvb2wgQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQzo6dXBkYXRlKFVpbnQ4QXJyYXkqIGtleSwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0
TWVzc2FnZSwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVt
Q29kZSkKLXsKLSAgICBib29sIHNob3VsZEdlbmVyYXRlS2V5UmVxdWVzdCA9ICFtX2NlcnRpZmlj
YXRlIHx8IGlzRXF1YWwoa2V5LCAicmVuZXciKTsKLSAgICBpZiAoIW1fY2VydGlmaWNhdGUpIHsK
LSAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRl
KCVwKSAtIGNlcnRpZmljYXRlIGRhdGEiLCB0aGlzKTsKLQotICAgICAgICBtX2NlcnRpZmljYXRl
ID0ga2V5OwotICAgIH0KLQotICAgIGlmIChpc0VxdWFsKGtleSwgImFja25vd2xlZGdlZCIpKSB7
Ci0gICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnVwZGF0
ZSglcCkgLSBhY2tub3dsZWRpbmcgc2VjdXJlIHN0b3AgbWVzc2FnZSIsIHRoaXMpOwotCi0gICAg
ICAgIGlmICghbV9leHBpcmVkU2Vzc2lvbikgewotICAgICAgICAgICAgZXJyb3JDb2RlID0gTWVk
aWFQbGF5ZXI6OkludmFsaWRQbGF5ZXJTdGF0ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0
YSgpIGxlbmd0aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOwotCi0gICAgICAgIGlmIChbZ2V0
QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92
ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6d2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURp
cmVjdG9yeUF0VVJMOildKQotICAgICAgICAgICAgW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkg
cmVtb3ZlUGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0czpAW21fZXhwaXJlZFNlc3Npb24uZ2V0
KCldIHdpdGhBcHBJZGVudGlmaWVyOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBzdG9yYWdlRGlyZWN0
b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgpXV07Ci0gICAgICAg
IG1fZXhwaXJlZFNlc3Npb24gPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAobV9tb2RlID09IEtleVJlbGVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQz4gcHJvdGVjdGVkU291cmNl
QnVmZmVyOwotICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKSB7
Ci0gICAgICAgIGlmIChzb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKSAhPSAtMSkgewot
ICAgICAgICAgICAgcHJvdGVjdGVkU291cmNlQnVmZmVyID0gc291cmNlQnVmZmVyOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkR2VuZXJhdGVL
ZXlSZXF1ZXN0KSB7Ci0gICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0
YSgpIGxlbmd0aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOwotCi0gICAgICAgIGlmIChtX3Nv
dXJjZUJ1ZmZlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgaWYgKCFwcm90ZWN0ZWRTb3VyY2VCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBpbml0RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0aDptX2luaXREYXRh
LT5sZW5ndGgoKV0pOwotCi0KLSAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gb3B0aW9u
czsKLSAgICAgICAgaWYgKCFtX3Byb3RvY29sVmVyc2lvbnMuaXNFbXB0eSgpICYmIGNhbkxvYWRB
VlN0cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXkoKSkg
ewotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZlcnNpb25z
T3B0aW9uID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIHZlcnNpb24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIFtwcm90b2NvbFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZlcnNpb24p
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3B0aW9ucyA9IEB7IGdldEFWU3RyZWFt
RGF0YVBhcnNlckNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpOiBwcm90b2Nv
bFZlcnNpb25zT3B0aW9uLmdldCgpIH07Ci0gICAgICAgIH0KLQotICAgICAgICBOU0Vycm9yKiBl
cnJvciA9IG5pbDsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gcmVxdWVzdCA9IFtwcm90ZWN0
ZWRTb3VyY2VCdWZmZXItPnBhcnNlcigpIHN0cmVhbWluZ0NvbnRlbnRLZXlSZXF1ZXN0RGF0YUZv
ckFwcDpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgY29udGVudElkZW50aWZpZXI6aW5pdERhdGEuZ2V0
KCkgdHJhY2tJRDpwcm90ZWN0ZWRTb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKSBvcHRp
b25zOm9wdGlvbnMuZ2V0KCkgZXJyb3I6JmVycm9yXTsKLQotICAgICAgICBpZiAoIVtwcm90ZWN0
ZWRTb3VyY2VCdWZmZXItPnBhcnNlcigpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29u
dGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcildKQotICAgICAgICAgICAgbV9zZXNzaW9u
SWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0KLSAgICAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjp1
cGRhdGUoJXApIC0gZXJyb3I6JUAiLCB0aGlzLCBbZXJyb3IgZGVzY3JpcHRpb25dKTsKLSAgICAg
ICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpJbnZhbGlkUGxheWVyU3RhdGU7Ci0gICAg
ICAgICAgICBzeXN0ZW1Db2RlID0gc3RkOjphYnMoc3lzdGVtQ29kZUZvckVycm9yKGVycm9yKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBuZXh0TWVz
c2FnZSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShbcmVxdWVzdCBsZW5ndGhdKTsKLSAgICAgICAgW3Jl
cXVlc3QgZ2V0Qnl0ZXM6bmV4dE1lc3NhZ2UtPmRhdGEoKSBsZW5ndGg6bmV4dE1lc3NhZ2UtPmxl
bmd0aCgpXTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVCghbV9z
b3VyY2VCdWZmZXJzLmlzRW1wdHkoKSk7Ci0gICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQzo6dXBkYXRlKCVwKSAtIGtleSBkYXRhIiwgdGhpcyk7Ci0gICAgZXJyb3JD
b2RlID0gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Ci0gICAgc3lzdGVtQ29kZSA9IDA7Ci0gICAgUmV0
YWluUHRyPE5TRGF0YT4ga2V5RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6a2V5LT5kYXRhKCkgbGVuZ3RoOmtleS0+bGVuZ3RoKCldKTsKLSAgICBbcHJvdGVjdGVk
U291cmNlQnVmZmVyLT5wYXJzZXIoKSBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRGF0YTprZXlE
YXRhLmdldCgpIGZvclRyYWNrSUQ6cHJvdGVjdGVkU291cmNlQnVmZmVyLT5wcm90ZWN0ZWRUcmFj
a0lEKCldOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fY2RtKQorICAgICAgICBtX2Nk
bS0+aW52YWxpZGF0ZVNlc3Npb24odGhpcyk7CiB9CiAKIHZvaWQgQ0RNU2Vzc2lvbk1lZGlhU291
cmNlQVZGT2JqQzo6bGF5ZXJEaWRSZWNlaXZlRXJyb3IoQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXIgKiwgTlNFcnJvciAqZXJyb3IsIGJvb2wmIHNob3VsZElnbm9yZSkKQEAgLTMxNSwyOSArNzMs
MTQgQEAgdm9pZCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpyZW5kZXJlckRpZFJlY2Vp
dmVFcnJvcihBVlNhbXBsZUJ1ZmZlckF1ZGlvUmUKICAgICAgICAgbV9jbGllbnQtPnNlbmRFcnJv
cihDRE1TZXNzaW9uQ2xpZW50OjpNZWRpYUtleUVycm9yRG9tYWluLCBjb2RlKTsKIH0KIAotdm9p
ZCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRTdHJlYW1TZXNzaW9uKEFWU3RyZWFt
U2Vzc2lvbiAqc3RyZWFtU2Vzc2lvbikKLXsKLSAgICBpZiAobV9zdHJlYW1TZXNzaW9uICYmIGNh
bkxvYWRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hh
bmdlZE5vdGlmaWNhdGlvbigpKQotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fZGF0YVBhcnNlck9ic2VydmVyLmdldCgpIG5hbWU6
Z2V0QVZTdHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5n
ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bV9zdHJlYW1TZXNzaW9uLmdldCgpXTsKLQotICAgIG1f
c3RyZWFtU2Vzc2lvbiA9IHN0cmVhbVNlc3Npb247Ci0KLSAgICBpZiAoIW1fc3RyZWFtU2Vzc2lv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNhbkxvYWRBVlN0cmVhbVNlc3Npb25Db250
ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbigpKQotICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1f
ZGF0YVBhcnNlck9ic2VydmVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50UHJvdGVj
dGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZDopIG5hbWU6Z2V0QVZTdHJlYW1TZXNzaW9uQ29u
dGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWROb3RpZmljYXRpb24oKSBvYmpl
Y3Q6bV9zdHJlYW1TZXNzaW9uLmdldCgpXTsKLQotICAgIE5TRGF0YSogaWRlbnRpZmllciA9IFtz
dHJlYW1TZXNzaW9uIGNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJdOwotICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcgPSBpZGVudGlmaWVyID8g
YWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aWRlbnRpZmllciBlbmNvZGlu
ZzooTlNVVEY4U3RyaW5nRW5jb2RpbmcpXSkgOiBuaWw7Ci0gICAgc2V0U2Vzc2lvbklkKHNlc3Np
b25JZGVudGlmaWVyU3RyaW5nLmdldCgpKTsKLX0KIAogdm9pZCBDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDOjphZGRTb3VyY2VCdWZmZXIoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMqIHNv
dXJjZUJ1ZmZlcikKIHsKICAgICBBU1NFUlQoIW1fc291cmNlQnVmZmVycy5jb250YWlucyhzb3Vy
Y2VCdWZmZXIpKTsKICAgICBBU1NFUlQoc291cmNlQnVmZmVyKTsKIAorICAgIGFkZFBhcnNlcihz
b3VyY2VCdWZmZXItPnBhcnNlcigpKTsKKwogICAgIG1fc291cmNlQnVmZmVycy5hcHBlbmQoc291
cmNlQnVmZmVyKTsKICAgICBzb3VyY2VCdWZmZXItPnJlZ2lzdGVyRm9yRXJyb3JOb3RpZmljYXRp
b25zKHRoaXMpOwogfQpAQCAtMzQ3LDQ3ICs5MCwzMCBAQCB2b2lkIENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QwogICAgIEFTU0VSVChtX3NvdXJjZUJ1ZmZlcnMuY29udGFpbnMoc291cmNlQnVmZmVyKSk7CiAg
ICAgQVNTRVJUKHNvdXJjZUJ1ZmZlcik7CiAKLSAgICBpZiAobV9zdHJlYW1TZXNzaW9uKQotICAg
ICAgICBbbV9zdHJlYW1TZXNzaW9uIHJlbW92ZVN0cmVhbURhdGFQYXJzZXI6c291cmNlQnVmZmVy
LT5wYXJzZXIoKV07CisgICAgcmVtb3ZlUGFyc2VyKHNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkpOwog
CiAgICAgc291cmNlQnVmZmVyLT51bnJlZ2lzdGVyRm9yRXJyb3JOb3RpZmljYXRpb25zKHRoaXMp
OwogICAgIG1fc291cmNlQnVmZmVycy5yZW1vdmUobV9zb3VyY2VCdWZmZXJzLmZpbmQoc291cmNl
QnVmZmVyKSk7CiB9CiAKLVN0cmluZyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpzdG9y
YWdlUGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2xpZW50ID8gcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fY2xpZW50LT5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCksICJTZWN1cmVT
dG9wLnBsaXN0IikgOiBlbXB0eVN0cmluZygpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2Uo
dW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkKK2xv
bmcgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6c3lzdGVtQ29kZUZvckVycm9yKE5TRXJy
b3IgKmVycm9yKQogewotICAgIEFTU0VSVChtX21vZGUgPT0gS2V5UmVsZWFzZSk7Ci0gICAgbV9j
ZXJ0aWZpY2F0ZSA9IG1faW5pdERhdGE7Ci0gICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNh
dGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmlj
YXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7Ci0KLSAgICBpZiAo
IVtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
cGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOnN0b3JhZ2VEaXJl
Y3RvcnlBdFVSTDopXSkgewotICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6S2V5U3lz
dGVtTm90U3VwcG9ydGVkOwotICAgICAgICBzeXN0ZW1Db2RlID0gJyFtb3InOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBOU0FycmF5KiBleHBpcmVkU2Vzc2lvbnMgPSBb
Z2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSBwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0
aEFwcElkZW50aWZpZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVS
TDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsKLSAgICBpZiAoIVtleHBp
cmVkU2Vzc2lvbnMgY291bnRdKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakM6OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UoJXApIC0gbm8gZXhwaXJl
ZCBzZXNzaW9ucyBmb3VuZCIsIHRoaXMpOworICAgIE5TSW50ZWdlciBjb2RlID0gW2Vycm9yIGNv
ZGVdOworICAgIGlmIChjb2RlICE9IEFWRXJyb3JVbmtub3duKQorICAgICAgICByZXR1cm4gY29k
ZTsKIAotICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6S2V5U3lzdGVtTm90U3VwcG9y
dGVkOwotICAgICAgICBzeXN0ZW1Db2RlID0gJyFtb3InOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9CisgICAgTlNFcnJvciogdW5kZXJseWluZ0Vycm9yID0gW2Vycm9yLnVzZXJJbmZv
IHZhbHVlRm9yS2V5Ok5TVW5kZXJseWluZ0Vycm9yS2V5XTsKKyAgICBpZiAoIXVuZGVybHlpbmdF
cnJvciB8fCAhW3VuZGVybHlpbmdFcnJvciBpc0tpbmRPZkNsYXNzOltOU0Vycm9yIGNsYXNzXV0p
CisgICAgICAgIHJldHVybiBjb2RlOwogCi0gICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlh
U291cmNlQVZGT2JqQzo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSglcCkgLSBmb3VuZCAlZCBl
eHBpcmVkIHNlc3Npb25zIiwgdGhpcywgW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0pOworICAgIHJl
dHVybiBbdW5kZXJseWluZ0Vycm9yIGNvZGVdOworfQogCi0gICAgZXJyb3JDb2RlID0gMDsKLSAg
ICBzeXN0ZW1Db2RlID0gMDsKLSAgICBtX2V4cGlyZWRTZXNzaW9uID0gW2V4cGlyZWRTZXNzaW9u
cyBmaXJzdE9iamVjdF07Ci0gICAgcmV0dXJuIFVpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oW21fZXhwaXJlZFNlc3Npb24gYnl0ZXNdKSwgW21fZXhwaXJlZFNl
c3Npb24gbGVuZ3RoXSk7CitTdHJpbmcgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6c3Rv
cmFnZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaWVudCA/IHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX2NsaWVudC0+bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpLCAiU2VjdXJl
U3RvcC5wbGlzdCIpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogfQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oCmluZGV4IGY4YmFkZGRmNDI4YzhjNjQwYTU4NDk2Nzc0M2VkYjNkZDNk
ODVkMzMuLjRhYjNmMTk1OWQwNDBiNWQxNzcxNDk5ODdiOTEwM2MwYmVhY2I3MGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLmgKQEAgLTI0NCw3ICsyNDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNz
aW9uPiBjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKSBvdmVycmlkZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSwgQ0RNU2Vzc2lvbkNsaWVudCopIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2
aXJ0dWFsIFN0cmluZyBsYW5ndWFnZU9mUHJpbWFyeUF1ZGlvVHJhY2soKSBjb25zdCBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IDUwM2M0ZmIwMmI5YzRlYWRjMDBmMzc1NGY1
MzUwNDNmZTQ2OWU3ZmEuLjM0ZDZjNTk0OGYxMzA4MGJlNjk5NWRiYTllMDQ5ZmJkMWFjM2U2MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMTU0LDYgKzE1NCw3IEBAIHR5cGVkZWYgQVZN
ZWRpYVNlbGVjdGlvbk9wdGlvbiBBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZTsKICNpbXBvcnQg
IkNvcmVNZWRpYVNvZnRMaW5rLmgiCiAKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZG
b3VuZGF0aW9uKQorCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVJbWFnZSkKIFNP
RlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZVZpZGVvKQogCkBAIC0yNDg1LDEyICsyNDg2
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6a2V5QWRkZWQo
KQogICAgICAgICBtX2tleVVSSVRvUmVxdWVzdE1hcC5yZW1vdmUoa2V5SWQpOwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3N0ZDo6dW5pcXVlX3B0
cjxDRE1TZXNzaW9uPiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVT
ZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQp
CiB7CiAgICAgaWYgKCFrZXlTeXN0ZW1Jc1N1cHBvcnRlZChrZXlTeXN0ZW0pKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENETVNlc3Npb25B
VkZvdW5kYXRpb25PYmpDPih0aGlzKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDRE1T
ZXNzaW9uQVZGb3VuZGF0aW9uT2JqQz4odGhpcywgY2xpZW50KTsKIH0KICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5oCmluZGV4IDUzNzFkNjYyN2VjZTE0M2Q1OThlNTQ4YTVmZTkwYjMz
YjczY2EwMGUuLjdlYjk5ZGE4ZmMxMWM5MjYzM2YxNmI4YmM5ZjM1NzBmZDYxZmQwZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCkBAIC04Niw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc1N0cmVhbVNlc3Npb24oKSB7IHJldHVybiBtX3N0cmVhbVNlc3Npb247IH0KICAgICBBVlN0
cmVhbVNlc3Npb24gKnN0cmVhbVNlc3Npb24oKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q0RNU2Vz
c2lvbihDRE1TZXNzaW9uKikgb3ZlcnJpZGU7CisgICAgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQyogY2RtU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbjsgfQogICAgIHZvaWQg
a2V5TmVlZGVkKFVpbnQ4QXJyYXkqKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KaW5kZXggYmM0YzY5ODdkYzYyNmQ0MzdjOTVhNDYzODUzZWMxMTQ3MzJjMjI2ZS4uMTU1NzE5
YjU2MTMxMDQ0ZjA0M2ZlYzk5YTBjMzZmZWRkZDc4NjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYg
VVNFKEFWRk9VTkRBVElPTikKIAorI2ltcG9ydCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5o
IgogI2ltcG9ydCAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIgogI2ltcG9ydCAiRmls
ZVN5c3RlbS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgpAQCAtNzAzLDE5ICs3MDQsMTUgQEAgQVZT
dHJlYW1TZXNzaW9uKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0cmVh
bVNlc3Npb24oKQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6
c2V0Q0RNU2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNzaW9uKQogewotICAgIGlmIChtX3Nlc3Npb24p
IHsKLSAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX21lZGlhU291cmNlUHJpdmF0
ZS0+c291cmNlQnVmZmVycygpKQotICAgICAgICAgICAgbV9zZXNzaW9uLT5yZW1vdmVTb3VyY2VC
dWZmZXIoc291cmNlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgbV9zZXNzaW9uID0gbnVsbHB0cjsK
LSAgICB9CisgICAgaWYgKHNlc3Npb24gPT0gbV9zZXNzaW9uKQorICAgICAgICByZXR1cm47CiAK
ICAgICBtX3Nlc3Npb24gPSB0b0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoc2Vzc2lvbik7
CiAKLSAgICBpZiAobV9zZXNzaW9uKSB7Ci0gICAgICAgIG1fc2Vzc2lvbi0+c2V0U3RyZWFtU2Vz
c2lvbihtX3N0cmVhbVNlc3Npb24uZ2V0KCkpOwotICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1
ZmZlciA6IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zb3VyY2VCdWZmZXJzKCkpCi0gICAgICAgICAg
ICBtX3Nlc3Npb24tPmFkZFNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXIuZ2V0KCkpOwotICAgIH0K
KyAgICBpZiAoQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbiogY2RtU3RyZWFtU2Vzc2lvbiA9IHRv
Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbihtX3Nlc3Npb24pKQorICAgICAgICBjZG1TdHJlYW1T
ZXNzaW9uLT5zZXRTdHJlYW1TZXNzaW9uKG1fc3RyZWFtU2Vzc2lvbi5nZXQoKSk7CisgICAgZm9y
IChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX21lZGlhU291cmNlUHJpdmF0ZS0+c291cmNlQnVmZmVy
cygpKQorICAgICAgICBzb3VyY2VCdWZmZXItPnNldENETVNlc3Npb24obV9zZXNzaW9uKTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmtleU5lZWRlZChV
aW50OEFycmF5KiBpbml0RGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCmluZGV4IDc3N2JhMzA5NThlYjM0ZDMyMDY4ODI3Njdm
MTYzMTE0ZjdhYTZjYmYuLmY5NDhjODY2N2VkMWY4NGY0MjI5NTQ2NDIyOTkyZmYwNzJkZDQ1Y2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMuaApAQCAtMjksOSArMjksMTEgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQogCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPGRpc3BhdGNoL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9PU09iamVjdFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTMsNiArNTUs
NyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZv
cm1hdERlc2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENETVNl
c3Npb25NZWRpYVNvdXJjZUFWRk9iakM7CiBjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
OwogY2xhc3MgVGltZVJhbmdlczsKIGNsYXNzIEF1ZGlvVHJhY2tQcml2YXRlOwpAQCAtODAsNyAr
ODMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChp
bnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCB1
bnNpZ25lZCBmbGFncyk7CiAgICAgdm9pZCBkaWRSZWFjaEVuZE9mVHJhY2tXaXRoVHJhY2tJRChp
bnQgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpOwogICAgIHZvaWQgd2lsbFByb3Zp
ZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoaW50IHRyYWNr
SUQpOwotICAgIHZvaWQgZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRChOU0RhdGEqLCBpbnQgdHJhY2tJRCk7CisgICAgdm9pZCBkaWRQcm92aWRl
Q29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKE5TRGF0YSosIGlu
dCB0cmFja0lELCBPU09iamVjdFB0cjxkaXNwYXRjaF9zZW1hcGhvcmVfdD4pOwogCiAgICAgYm9v
bCBwcm9jZXNzQ29kZWRGcmFtZShpbnQgdHJhY2tJRCwgQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0
IFN0cmluZyYgbWVkaWFUeXBlKTsKIApAQCAtOTYsNiArOTksNyBAQCBwdWJsaWM6CiAKICAgICBp
bnQgcHJvdGVjdGVkVHJhY2tJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdGVjdGVkVHJhY2tJRDsg
fQogICAgIEFWU3RyZWFtRGF0YVBhcnNlciogcGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJz
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQyopOwogCiAgICAgdm9pZCBmbHVzaCgpOwogCkBAIC0xNDIsOSArMTQ2LDExIEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxpbnQsIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlckF1ZGlvUmVu
ZGVyZXI+PiBtX2F1ZGlvUmVuZGVyZXJzOwogICAgIFJldGFpblB0cjxXZWJBVlN0cmVhbURhdGFQ
YXJzZXJMaXN0ZW5lcj4gbV9kZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8V2ViQVZTYW1wbGVCdWZm
ZXJFcnJvckxpc3RlbmVyPiBtX2Vycm9yTGlzdGVuZXI7CisgICAgT1NPYmplY3RQdHI8ZGlzcGF0
Y2hfc2VtYXBob3JlX3Q+IG1faGFzU2Vzc2lvblNlbWFwaG9yZTsKIAogICAgIE1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakMqIG1fbWVkaWFTb3VyY2U7CiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudCogbV9jbGllbnQ7CisgICAgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogbV9zZXNz
aW9uIHsgbnVsbHB0ciB9OwogCiAgICAgRmxvYXRTaXplIG1fY2FjaGVkU2l6ZTsKICAgICBib29s
IG1fcGFyc2luZ1N1Y2NlZWRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KaW5kZXggZWZmYmQ3MTY0YTMyZmI2ZjZlNTQ1ODJh
MGIyZmVmNThjNzFjZTQ1NC4uZTVkZjc1ZmUyMTk1MjUwM2JiYjM5ZTdhMGVhZGIwN2I3ODY1NjY1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakMubW0KQEAgLTI1NSwxMSArMjU1LDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UKEFWRm91
bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJGYWlsZWRUb0RlY29kZU5vdGlmaWMK
ICNlbmRpZgogICAgIEFTU0VSVChzdHJlYW1EYXRhUGFyc2VyID09IF9wYXJzZXIpOwogCi0gICAg
aWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIF9wYXJlbnQtPndpbGxQcm92aWRlQ29udGVu
dEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKHRyYWNrSUQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gV2UgbXVzdCBjYWxsIHN5bmNocm9ub3VzbHkgdG8g
dGhlIG1haW4gdGhyZWFkLCBhcyB0aGUgQVZTdHJlYW1TZXNzaW9uIG11c3QgYmUgYXNzb2NpYXRl
ZAogICAgIC8vIHdpdGggdGhlIHN0cmVhbURhdGFQYXJzZXIgYmVmb3JlIHRoZSBkZWxlZ2F0ZSBt
ZXRob2QgcmV0dXJucy4KICAgICBSZXRhaW5QdHI8V2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVu
ZXI+IHN0cm9uZ1NlbGYgPSBzZWxmOwpAQCAtMjc4LDEwICsyNzMsMTIgQEAgU09GVF9MSU5LX0NP
TlNUQU5UKEFWRm91bmRhdGlvbiwgQVZTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJGYWlsZWRUb0Rl
Y29kZU5vdGlmaWMKICAgICBSZXRhaW5QdHI8V2ViQVZTdHJlYW1EYXRhUGFyc2VyTGlzdGVuZXI+
IHN0cm9uZ1NlbGYgPSBzZWxmOwogCiAgICAgUmV0YWluUHRyPE5TRGF0YT4gc3Ryb25nRGF0YSA9
IGluaXREYXRhOwotICAgIGNhbGxPbk1haW5UaHJlYWQoW3N0cm9uZ1NlbGYsIHN0cm9uZ0RhdGEs
IHRyYWNrSURdIHsKKyAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9zZW1hcGhvcmVfdD4gaGFzU2Vz
c2lvblNlbWFwaG9yZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfc2VtYXBob3JlX2NyZWF0ZSgw
KSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbc3Ryb25nU2VsZiwgc3Ryb25nRGF0YSwgdHJhY2tJ
RCwgIGhhc1Nlc3Npb25TZW1hcGhvcmVdIHsKICAgICAgICAgaWYgKHN0cm9uZ1NlbGYtPl9wYXJl
bnQpCi0gICAgICAgICAgICBzdHJvbmdTZWxmLT5fcGFyZW50LT5kaWRQcm92aWRlQ29udGVudEtl
eVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKHN0cm9uZ0RhdGEuZ2V0KCksIHRy
YWNrSUQpOworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X3BhcmVudC0+ZGlkUHJvdmlkZUNvbnRl
bnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChzdHJvbmdEYXRhLmdldCgp
LCB0cmFja0lELCBoYXNTZXNzaW9uU2VtYXBob3JlKTsKICAgICB9KTsKKyAgICBkaXNwYXRjaF9z
ZW1hcGhvcmVfd2FpdChoYXNTZXNzaW9uU2VtYXBob3JlLmdldCgpLCBESVNQQVRDSF9USU1FX0ZP
UkVWRVIpOwogfQogQGVuZAogCkBAIC02MTQsNiArNjExLDkgQEAgU291cmNlQnVmZmVyUHJpdmF0
ZUFWRk9iakM6On5Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQygpCiAgICAgQVNTRVJUKCFtX2Ns
aWVudCk7CiAgICAgZGVzdHJveVBhcnNlcigpOwogICAgIGRlc3Ryb3lSZW5kZXJlcnMoKTsKKwor
ICAgIGlmIChtX2hhc1Nlc3Npb25TZW1hcGhvcmUpCisgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV9zaWduYWwobV9oYXNTZXNzaW9uU2VtYXBob3JlLmdldCgpKTsKIH0KIAogdm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChBVkFzc2V0KiBh
c3NldCkKQEAgLTcxOSwxNSArNzE5LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akM6OndpbGxQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGCiAgICAg
TE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OndpbGxQcm92aWRl
Q29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKCVwKSAtIHRyYWNr
OiVkIiwgdGhpcywgdHJhY2tJRCk7CiAgICAgbV9wcm90ZWN0ZWRUcmFja0lEID0gdHJhY2tJRDsK
IAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBbbV9tZWRpYVNvdXJjZS0+
cGxheWVyKCktPnN0cmVhbVNlc3Npb24oKSBhZGRTdHJlYW1EYXRhUGFyc2VyOm1fcGFyc2VyLmdl
dCgpXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIGlmIChDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDKiBzZXNzaW9uID0gbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPmNk
bVNlc3Npb24oKSkKKyAgICAgICAgc2Vzc2lvbi0+YWRkUGFyc2VyKG1fcGFyc2VyLmdldCgpKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRyYWNrSUQpOwogI2VuZGlmCiB9CiAKLXZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRp
YWxpemF0aW9uRGF0YUZvclRyYWNrSUQoTlNEYXRhKiBpbml0RGF0YSwgaW50IHRyYWNrSUQpCit2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQcm92aWRlQ29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKE5TRGF0YSogaW5pdERhdGEsIGludCB0cmFj
a0lELCBPU09iamVjdFB0cjxkaXNwYXRjaF9zZW1hcGhvcmVfdD4gaGFzU2Vzc2lvblNlbWFwaG9y
ZSkKIHsKICAgICBpZiAoIW1fbWVkaWFTb3VyY2UpCiAgICAgICAgIHJldHVybjsKQEAgLTczOSw2
ICs3MzgsMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZUNv
bnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm8KICAgICBSZWZQdHI8VWludDhBcnJh
eT4gaW5pdERhdGFBcnJheSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShbaW5pdERhdGEgbGVuZ3RoXSk7
CiAgICAgW2luaXREYXRhIGdldEJ5dGVzOmluaXREYXRhQXJyYXktPmRhdGEoKSBsZW5ndGg6aW5p
dERhdGFBcnJheS0+bGVuZ3RoKCldOwogICAgIG1fbWVkaWFTb3VyY2UtPnNvdXJjZUJ1ZmZlcktl
eU5lZWRlZCh0aGlzLCBpbml0RGF0YUFycmF5LmdldCgpKTsKKyAgICBpZiAoYXV0byBzZXNzaW9u
ID0gbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPmNkbVNlc3Npb24oKSkgeworICAgICAgICBzZXNz
aW9uLT5hZGRQYXJzZXIobV9wYXJzZXIuZ2V0KCkpOworICAgICAgICBkaXNwYXRjaF9zZW1hcGhv
cmVfc2lnbmFsKGhhc1Nlc3Npb25TZW1hcGhvcmUuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChtX2hhc1Nlc3Npb25TZW1hcGhvcmUpCisgICAgICAgICAgICBkaXNwYXRjaF9zZW1h
cGhvcmVfc2lnbmFsKG1faGFzU2Vzc2lvblNlbWFwaG9yZS5nZXQoKSk7CisgICAgICAgIG1faGFz
U2Vzc2lvblNlbWFwaG9yZSA9IGhhc1Nlc3Npb25TZW1hcGhvcmU7CisgICAgfQogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oaW5pdERhdGEpOwogI2VuZGlmCkBAIC05MjEsNiArOTI4LDI1IEBAIHZv
aWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnRyYWNrRGlkQ2hhbmdlRW5hYmxlZChBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU291CiAgICAgfQogfQogCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOjpzZXRDRE1TZXNzaW9uKENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMqIHNl
c3Npb24pCit7CisgICAgaWYgKHNlc3Npb24gPT0gbV9zZXNzaW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zZXNzaW9uKQorICAgICAgICBtX3Nlc3Npb24tPnJlbW92ZVNvdXJjZUJ1
ZmZlcih0aGlzKTsKKworICAgIG1fc2Vzc2lvbiA9IHNlc3Npb247CisKKyAgICBpZiAobV9zZXNz
aW9uKSB7CisgICAgICAgIG1fc2Vzc2lvbi0+YWRkU291cmNlQnVmZmVyKHRoaXMpOworICAgICAg
ICBpZiAobV9oYXNTZXNzaW9uU2VtYXBob3JlKSB7CisgICAgICAgICAgICBkaXNwYXRjaF9zZW1h
cGhvcmVfc2lnbmFsKG1faGFzU2Vzc2lvblNlbWFwaG9yZS5nZXQoKSk7CisgICAgICAgICAgICBt
X2hhc1Nlc3Npb25TZW1hcGhvcmUgPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorfQorCiB2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpmbHVzaCgpCiB7CiAgICAgaWYgKG1fZGlz
cGxheUxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQppbmRleCBkYTQwZDRi
Mjg3NzY5NmVmMmU2ZWM0ZTg5OTc0YjFlM2Q0MDc1NGMxLi5kZjViYjNiMTg5ODE5ZGRmZmE2Mzdl
ZGUwZmRiOGFkOWQ0ZTY4ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbQpA
QCAtNjcsNiArNjcsNyBAQAogI2VuZGlmCiAKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
QVZGb3VuZGF0aW9uKQorCiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxh
eWVyKQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0u
Y3BwCmluZGV4IGRmMjUxOGZlYjg4ZTljNzRkODQ0MWU2ZTQ2ZWM5MjA1YTAwMDhkZTUuLmI3MzRm
ZmRhNTRlZTE2MDBjNmU5NjlkZmM0YjlmZjQxNWVhM2M0OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9N
b2NrQ0RNLmNwcApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IE1vY2tDRE1TZXNzaW9uIDogcHVibGljIENETVNlc3Npb24gewogcHVibGljOgotICAgIE1vY2tD
RE1TZXNzaW9uKCk7CisgICAgTW9ja0NETVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCopOwogICAg
IHZpcnR1YWwgfk1vY2tDRE1TZXNzaW9uKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xp
ZW50KENETVNlc3Npb25DbGllbnQqIGNsaWVudCkgb3ZlcnJpZGUgeyBtX2NsaWVudCA9IGNsaWVu
dDsgfQpAQCAtNzEsOSArNzEsOSBAQCBib29sIE1vY2tDRE06OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5
cGUsICJ2aWRlby9tb2NrIik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBNb2Nr
Q0RNOjpjcmVhdGVTZXNzaW9uKCkKK3N0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBNb2NrQ0RN
OjpjcmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxNb2NrQ0RNU2Vzc2lvbj4oKTsKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxNb2NrQ0RNU2Vzc2lvbj4oY2xpZW50KTsKIH0KIAogc3RhdGljIFVpbnQ4QXJyYXkq
IGluaXREYXRhUHJlZml4KCkKQEAgLTEwNiw4ICsxMDYsOSBAQCBzdGF0aWMgU3RyaW5nIGdlbmVy
YXRlU2Vzc2lvbklkKCkKICAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdTZXNzaW9uSWQrKyk7CiB9CiAKLU1vY2tDRE1TZXNzaW9uOjpNb2NrQ0RNU2Vzc2lv
bigpCi0gICAgOiBtX3Nlc3Npb25JZChnZW5lcmF0ZVNlc3Npb25JZCgpKQorTW9ja0NETVNlc3Np
b246Ok1vY2tDRE1TZXNzaW9uKENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fc2Vzc2lvbklkKGdlbmVyYXRlU2Vzc2lvbklkKCkpCiB7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5oIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmgKaW5kZXggNzRmMzhiOTcyNzVmNzZkOGQzODIyZDg5
N2E1NDVmNzJjODdhMDYwMi4uMmNkODE4ZGYxOWJmM2YwYTY4ZmVjYzBlZjI2NjMzMzkzYjE0OTBl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfk1vY2tDRE0oKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgc3Rk
Ojp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKENETVNlc3Np
b25DbGllbnQqKSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIENETSogbV9jZG07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266468</attachid>
            <date>2015-12-02 13:14:46 -0800</date>
            <delta_ts>2015-12-03 14:29:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151221-20151202131423.patch</filename>
            <type>text/plain</type>
            <size>107694</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E0NjZmNzk3YjQ2MDc3
NmU2ODFmODEzN2RjNjFlN2U5NzQwNTY3MC4uYjdlNTdmMDIwYjQ4ZGQ3MTMzNzI5NzIzZjg5NmRh
Yzc3MGFmN2RkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxNS0xMi0wMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBBVkNvbnRlbnRL
ZXlTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTEyMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNE
TTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0u
aDoKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5Lmg6CisgICAgICAg
ICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhUGxheWVyOjpjcmVhdGVTZXNzaW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktleTo6Q0RNU2Vzc2lvbkNsZWFyS2V5
KToKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5o
OgorICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhS2V5U2Vzc2lvbjo6TWVkaWFLZXlTZXNzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhS2V5U2Vzc2lvbjo6a2V5UmVxdWVzdFRpbWVyRmlyZWQpOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9DRE1TZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNyZWF0
ZVNlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmNyZWF0ZVNlc3Npb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkS2V5U3lzdGVtUkUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6fkNETVByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6c3VwcG9ydHNLZXlTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbnZhbGlkYXRlU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c01JTUVUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDLmguCisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbjo6aGFzQ29udGVudEtleVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9DRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW06IEFkZGVkLgor
ICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRo
UGFyZW50Ol0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVn
YXRlIGludmFsaWRhdGVdKToKKyAgICAgICAgKC1bQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Np
b25EZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lvbjp3aWxsUHJvdmlkZUtleVJlcXVlc3RJbml0aWFs
aXphdGlvbkRhdGFGb3JUcmFja0lEOl0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZDb250ZW50
S2V5U2Vzc2lvbkRlbGVnYXRlIGNvbnRlbnRLZXlTZXNzaW9uOmRpZFByb3ZpZGVLZXlSZXF1ZXN0
SW5pdGlhbGl6YXRpb25EYXRhOnJlcXVlc3RIYW5kbGluZzpdKToKKyAgICAgICAgKC1bQ0RNU2Vz
c2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lvbkNvbnRlbnRQ
cm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJEaWRDaGFuZ2U6XSk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246
On5DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6cmVsZWFzZUtl
eXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjphZGRQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OnJlbW92ZVBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZWxl
YXNlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbjo6ZGlkUHJvdmlkZUNvbnRlbnRLZXlJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmNvbnRlbnRLZXlTZXNzaW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakM6OkNETVNlc3Npb25BVkZvdW5kYXRpb25P
YmpDKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMuaC4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
U3RyZWFtU2Vzc2lvbi5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbS4K
KyAgICAgICAgKC1bQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbk9ic2VydmVyIGluaXRXaXRoUGFy
ZW50Ol0pOgorICAgICAgICAoLVtDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uT2JzZXJ2ZXIgY29u
dGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWQ6XSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246On5DRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVh
bVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uOjpyZWxlYXNlS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjppc0Vx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpzZXRTdHJl
YW1TZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246
OmFkZFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
OjpyZW1vdmVQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vz
c2lvbjo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6aW52YWxpZGF0
ZUNETSk6CisgICAgICAgIChXZWJDb3JlOjp0b0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDOjpDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6On5DRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakM6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDOjpyZW1vdmVTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6c3lzdGVtQ29kZUZvckVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnN0b3JhZ2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OmxheWVyRGlk
UmVjZWl2ZUVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakM6OnJlbmRlcmVyRGlkUmVjZWl2ZUVycm9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVNl
c3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjZG1TZXNzaW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldENETVNlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjprZXlOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgICgt
W1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlk
ZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRyYWNrSUQ6XSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjp3aWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJh
Y2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q0RNU2Vzc2lv
bik6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQ
YXJzZXJXaWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRy
YWNrSUQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUxheWVyQ29jb2EubW06CisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE06OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0NETVNlc3Npb246Ok1vY2tDRE1TZXNzaW9uKToKKyAgICAgICAgKiB0ZXN0aW5n
L01vY2tDRE0uaDoKKwogMjAxNS0xMi0wMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5Mjg5NCBhbmQg
cjE5MjkwNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVk
aWEvQ0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNw
cAppbmRleCBkNjNhNGY0ZTA4NzdjNDIyYzQ3OGQ5MzgzZDVhOGNlZTkxYjIwYzQzLi4wMmI4OTdi
NTA5ODEzMTdlNDg5MTczNzliNDU1YjE3NDA2YTM2N2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwCkBAIC0xMzIsOSArMTMyLDkgQEAgYm9vbCBD
RE06OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKICAgICBy
ZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c01JTUVUeXBlKG1pbWVUeXBlKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPENETVNlc3Npb24+IENETTo6Y3JlYXRlU2Vzc2lvbigpCitzdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gQ0RNOjpjcmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqIGNsaWVu
dCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gc2Vzc2lvbiA9IG1fcHJpdmF0
ZS0+Y3JlYXRlU2Vzc2lvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBzZXNz
aW9uID0gbV9wcml2YXRlLT5jcmVhdGVTZXNzaW9uKGNsaWVudCk7CiAgICAgaWYgKG1lZGlhUGxh
eWVyKCkpCiAgICAgICAgIG1lZGlhUGxheWVyKCktPnNldENETVNlc3Npb24oc2Vzc2lvbi5nZXQo
KSk7CiAgICAgcmV0dXJuIHNlc3Npb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9DRE0uaAppbmRleCA1YWVjZmM5ZjZjNWQyYWQ0ZWYxODdhNGIyNjkzMDMwZTA2OTZj
M2U3Li45YmZkMWJjMjU3MDVmZmY1NmQyM2FlZDdkMTBlMzQzZGE5YzAwNjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmgKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgIH5DRE0oKTsKIAogICAgIGJvb2wgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vz
c2lvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKENE
TVNlc3Npb25DbGllbnQqKTsKIAogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaAppbmRleCA0NmJkNzhkOTNiMjRjMDYyZTVjNTRk
MzZkZjE2NzBkYzEzNGI4ZjFlLi40M2RmM2NiYjhkZjBmNDc2Y2M4NzU4ZmI5YWZmYTllYWJmZTkz
M2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NE
TVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NE
TVByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDRE1TZXNzaW9uOworY2xhc3MgQ0RNU2Vzc2lvbkNsaWVudDsKIAogY2xhc3MgQ0RNUHJpdmF0
ZUludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC00MSw3ICs0Miw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYpID0gMDsKIAotICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSA9IDA7Cisg
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihDRE1T
ZXNzaW9uQ2xpZW50KikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlQ2xlYXJLZXkuY3BwCmluZGV4
IGQ2MTdhZDNhNDNjMzM2MzIwY2VhODY0NTczMWIxNjYxNTczMGE1NWUuLjhhMzZmM2IxYWRjNmVk
NTg0ODNmYTg1MGFiZGE0NTMzNTI4NjAwOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVhcktleS5jcHAKQEAg
LTU5LDkgKzU5LDkgQEAgYm9vbCBDRE1Qcml2YXRlQ2xlYXJLZXk6OnN1cHBvcnRzTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OnN1cHBvcnRz
S2V5U3lzdGVtKG1fY2RtLT5rZXlTeXN0ZW0oKSwgbWltZVR5cGUpOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKCkKK3N0
ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBDRE1Qcml2YXRlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Np
b24oQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPENETVNlc3Npb25DbGVhcktleT4oKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxD
RE1TZXNzaW9uQ2xlYXJLZXk+KGNsaWVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVDbGVhcktleS5oCmlu
ZGV4IGQ1M2I0OWNkYjRhZTY3OGZkMjVkYWNiNzczODE2YTJkM2JmYzdjYzYuLmVmZDFmYTJjNDE0
MmVhMDY2MzJmMDBkODJlYjQ5MzIwYWM0MTRlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlQ2xlYXJLZXkuaApAQCAt
NDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW1B
bmRNaW1lVHlwZShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9u
PiBjcmVhdGVTZXNzaW9uKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8
Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50Kikgb3ZlcnJpZGU7CiAK
IHByb3RlY3RlZDoKICAgICBDRE0qIG1fY2RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3Bw
CmluZGV4IDEyNzFhN2EyNmFjZjM1YzBhYmUwZjJhZGRmOGQzNDMxNzllODc1NWMuLmYyOWViNDg5
ZmRkNjMwNzYxZjIxNTNhNGY5YzM0NmQ1ODUwMmZhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBs
YXllci5jcHAKQEAgLTU1LDEzICs1NSwxMyBAQCBib29sIENETVByaXZhdGVNZWRpYVBsYXllcjo6
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgIHJldHVybiBNZWRp
YVBsYXllcjo6c3VwcG9ydHNLZXlTeXN0ZW0obV9jZG0tPmtleVN5c3RlbSgpLCBtaW1lVHlwZSk7
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBDRE1Qcml2YXRlTWVkaWFQbGF5ZXI6
OmNyZWF0ZVNlc3Npb24oKQorc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IENETVByaXZhdGVN
ZWRpYVBsYXllcjo6Y3JlYXRlU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQpCiB7CiAg
ICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gbV9jZG0tPm1lZGlhUGxheWVyKCk7CiAgICAg
aWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
bWVkaWFQbGF5ZXItPmNyZWF0ZVNlc3Npb24obV9jZG0tPmtleVN5c3RlbSgpKTsKKyAgICByZXR1
cm4gbWVkaWFQbGF5ZXItPmNyZWF0ZVNlc3Npb24obV9jZG0tPmtleVN5c3RlbSgpLCBjbGllbnQp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIuaAppbmRleCBlYjU4NTEwMTkxMzhlY2Vh
NTk5OTI3M2NkNzg1YmYyODg5NTQxMjA5Li5hM2M2NTMxZDhiZjVkZDBmOWExYzlhYzEzYWZkZTRl
MmY1ZGY2MzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkNETVByaXZhdGVNZWRpYVBsYXllcigpIHsgfQogCiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vz
c2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCopIG92ZXJyaWRlOwogCiAgICAgQ0RNKiBj
ZG0oKSBjb25zdCB7IHJldHVybiBtX2NkbTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5jcHAKaW5k
ZXggOGMxMmJkMmI3ZWZhYTUxMWE3ODM0NzM0ZTRhODZhMGE4ZWUzNmRlZC4uMWMyOTY0NDNhN2Uy
OWNkMmZkYTIwNjM3Yzk1NGQwNzBlMWY3ZWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcApA
QCAtNTksOCArNTksOSBAQCBzdGF0aWMgVk0mIGNsZWFyS2V5Vk0oKQogICAgIHJldHVybiAqdm0u
Z2V0KCk7CiB9CiAKLUNETVNlc3Npb25DbGVhcktleTo6Q0RNU2Vzc2lvbkNsZWFyS2V5KCkKLSAg
ICA6IG1fc2Vzc2lvbklkKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkKK0NETVNlc3Npb25D
bGVhcktleTo6Q0RNU2Vzc2lvbkNsZWFyS2V5KENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKKyAg
ICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2Vzc2lvbklkKGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9l
bmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmgKaW5kZXggYTkzMWQzNmViYmQz
MjI0YTJjM2Y0OTY1YzNmY2ZjMjU3NjA4ZWMzNS4uZTUwOWZiNmE2N2FmZGUyNzJhZDA5Nzk1Zjg2
MWFhMjk2M2Q3OGNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5oCkBAIC0zNSw3ICszNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0RNU2Vzc2lvbkNsZWFyS2V5IDogcHVibGljIENE
TVNlc3Npb24gewogcHVibGljOgotICAgIENETVNlc3Npb25DbGVhcktleSgpOworICAgIENETVNl
c3Npb25DbGVhcktleShDRE1TZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q0RNU2Vzc2lv
bkNsZWFyS2V5KCk7CiAKICAgICAvLyBDRE1TZXNzaW9uUHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3Bw
CmluZGV4IGIyMTgxMDRiZDdhNWU2YzYwYWZhYjE3NDI1OTc3NzQ3N2M4NTA0YTQuLmJmMTYyZGVj
NzA4YmFlM2I4OGM4ODU4NWNhYWEyYWU1YTJhNjYxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFLZXlTZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAg
LTUyLDExICs1MiwxMCBAQCBNZWRpYUtleVNlc3Npb246Ok1lZGlhS2V5U2Vzc2lvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYUtleXMqIGtleQogICAgICwgbV9rZXlzKGtl
eXMpCiAgICAgLCBtX2tleVN5c3RlbShrZXlTeXN0ZW0pCiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1
ZSgqdGhpcykKLSAgICAsIG1fc2Vzc2lvbihrZXlzLT5jZG0oKS0+Y3JlYXRlU2Vzc2lvbigpKQor
ICAgICwgbV9zZXNzaW9uKGtleXMtPmNkbSgpLT5jcmVhdGVTZXNzaW9uKHRoaXMpKQogICAgICwg
bV9rZXlSZXF1ZXN0VGltZXIoKnRoaXMsICZNZWRpYUtleVNlc3Npb246OmtleVJlcXVlc3RUaW1l
ckZpcmVkKQogICAgICwgbV9hZGRLZXlUaW1lcigqdGhpcywgJk1lZGlhS2V5U2Vzc2lvbjo6YWRk
S2V5VGltZXJGaXJlZCkKIHsKLSAgICBtX3Nlc3Npb24tPnNldENsaWVudCh0aGlzKTsKIH0KIAog
TWVkaWFLZXlTZXNzaW9uOjp+TWVkaWFLZXlTZXNzaW9uKCkKQEAgLTExOSw3ICsxMTgsNyBAQCB2
b2lkIE1lZGlhS2V5U2Vzc2lvbjo6a2V5UmVxdWVzdFRpbWVyRmlyZWQoKQogICAgICAgICBSZWZQ
dHI8VWludDhBcnJheT4ga2V5UmVxdWVzdCA9IG1fc2Vzc2lvbi0+Z2VuZXJhdGVLZXlSZXF1ZXN0
KHJlcXVlc3QubWltZVR5cGUsIHJlcXVlc3QuaW5pdERhdGEuZ2V0KCksIGRlc3RpbmF0aW9uVVJM
LCBlcnJvckNvZGUsIHN5c3RlbUNvZGUpOwogCiAgICAgICAgIC8vIE90aGVyd2lzZSBbaWYgYSBy
ZXF1ZXN0IGlzIG5vdCBzdWNjZXNzZnVsbHkgZ2VuZXJhdGVkXToKLSAgICAgICAgaWYgKCFrZXlS
ZXF1ZXN0KSB7CisgICAgICAgIGlmIChlcnJvckNvZGUpIHsKICAgICAgICAgICAgIC8vIDMuMS4g
Q3JlYXRlIGEgbmV3IE1lZGlhS2V5RXJyb3Igb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBhdHRy
aWJ1dGVzOgogICAgICAgICAgICAgLy8gICAgICBjb2RlID0gdGhlIGFwcHJvcHJpYXRlIE1lZGlh
S2V5RXJyb3IgY29kZQogICAgICAgICAgICAgLy8gICAgICBzeXN0ZW1Db2RlID0gYSBLZXkgU3lz
dGVtLXNwZWNpZmljIHZhbHVlLCBpZiBwcm92aWRlZCwgYW5kIDAgb3RoZXJ3aXNlCkBAIC0xMzQs
NyArMTMzLDggQEAgdm9pZCBNZWRpYUtleVNlc3Npb246OmtleVJlcXVlc3RUaW1lckZpcmVkKCkK
ICAgICAgICAgLy8gICAgVGhlIGV2ZW50IGlzIG9mIHR5cGUgTWVkaWFLZXlNZXNzYWdlRXZlbnQg
YW5kIGhhczoKICAgICAgICAgLy8gICAgbWVzc2FnZSA9IGtleSByZXF1ZXN0CiAgICAgICAgIC8v
ICAgIGRlc3RpbmF0aW9uVVJMID0gZGVzdGluYXRpb25VUkwKLSAgICAgICAgc2VuZE1lc3NhZ2Uo
a2V5UmVxdWVzdC5nZXQoKSwgZGVzdGluYXRpb25VUkwpOworICAgICAgICBpZiAoa2V5UmVxdWVz
dCkKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKGtleVJlcXVlc3QuZ2V0KCksIGRlc3RpbmF0aW9u
VVJMKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3MjE5MjgxZjk2MDUyNGZhYjhhMTdkZjE4YTU0N2UxZGY4
MGNjOGFiLi42ZDE1ZGJlM2YyNmZjMjUzMWFiNTM0MzZjMjNmM2EwNmQ4ZTliYmJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02
MDY4LDEwICs2MDY4LDEzIEBACiAJCUNEREMxRTdBMThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVD
bGllbnQuaCAqLzsgfTsKIAkJQ0RERDU3MTUxOEI1N0E4MjAwQTk0RkNCIC8qIENETVNlc3Npb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkU5
MThCM0RGQzcwMENGN0ZGMSAvKiBDRE1TZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RERTAyRUQxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENE
TVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0RERTAyRUIxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25B
VkZvdW5kYXRpb25PYmpDLm1tICovOyB9OwotCQlDRERFMDJGMDE4QjU2NTEzMDBDRjdGRjEgLyog
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkVGMThCNTY1MTIwMENGN0ZGMSAvKiBDRE1TZXNz
aW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9OworCQlDRERFMDJGMDE4QjU2NTEzMDBDRjdG
RjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkVGMThCNTY1MTIwMENGN0ZGMSAvKiBDRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tICovOyB9OwogCQlDREUzQTg1NDE3RjVGQ0U2MDBDNUJF
MjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENERTNBODUyMTdGNUZDRTYwMEM1QkUyMCAvKiBBdWRpb1RyYWNr
UHJpdmF0ZUFWRi5oICovOyB9OwogCQlDREUzQTg1NzE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9U
cmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RFM0E4NTUxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRl
QVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RFM0E4NTgxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJh
Y2tQcml2YXRlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RFM0E4NTYxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZG
T2JqQy5oICovOyB9OworCQlDREU1OTU5NTFCRjE2REYzMDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREU1OTU5MzFCRjE2NkFEMDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFWQ29udGVu
dEtleVNlc3Npb24ubW0gKi87IH07CisJCUNERTU5NTk3MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREU1OTU5NjFCRjI2RTIxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQy5oICovOyB9OworCQlDREU1OTU5RDFCRjI3NTcxMDBBMUNCRTggLyog
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTU5NTlDMUJGMjc1NzEwMEExQ0JFOCAvKiBDRE1TZXNz
aW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9OwogCQlDREU3RkM0NDE4MTkwNEIxMDAyQkJC
NzcgLyogT3JkZXJJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREU3RkM0MjE4MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5j
cHAgKi87IH07CiAJCUNERTdGQzQ1MTgxOTA0QjEwMDJCQkI3NyAvKiBPcmRlckl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU3RkM0MzE4
MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNERTgzREIxMTgzQzQ0MDYwMDMxRUFBMyAvKiBW
aWRlb1BsYXliYWNrUXVhbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREU4M0RBRjE4M0M0NDA2MDAzMUVBQTMgLyogVmlkZW9QbGF5YmFja1F1
YWxpdHkuY3BwICovOyB9OwpAQCAtMTM5NTQsMTEgKzEzOTU3LDE1IEBACiAJCUNEREUwMkU5MThC
M0RGQzcwMENGN0ZGMSAvKiBDRE1TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RERTAyRUExOEIzRUQ2RDAwQ0Y3RkYx
IC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEREUwMkVCMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3Vu
ZGF0aW9uT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENE
TVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlDRERFMDJFRTE4QjU2NEZBMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2Jq
Qy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEREUwMkVGMThCNTY1MTIwMENGN0ZGMSAvKiBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RERTAyRUUxOEI1NjRGQTAwQ0Y3RkYxIC8qIENETVNlc3Npb25B
VlN0cmVhbVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRERFMDJFRjE4QjU2NTEyMDBDRjdG
RjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERTNBODUyMTdGNUZDRTYwMEM1QkUyMCAvKiBBdWRpb1Ry
YWNrUHJpdmF0ZUFWRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1Ry
YWNrUHJpdmF0ZUFWRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREUzQTg1NTE3
RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREUzQTg1NjE3RjYwMjA0MDBDNUJFMjAg
LyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREU1OTU5MzFCRjE2NkFEMDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFWQ29udGVudEtl
eVNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0RFNTk1OTQxQkYxNjZEMTAwQTFDQkU4IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERTU5NTk2MUJG
MjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RFNTk1OUMxQkYyNzU3MTAwQTFDQkU4IC8q
IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREU2NTYwRTE3Q0E2RTc2MDA1MjZCQTcgLyogbWVkaWFD
b250cm9sc0FwcGxlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gbWVkaWFDb250cm9sc0FwcGxl
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREU3RkM0MjE4MTkwNEIxMDAyQkJC
NzcgLyogT3JkZXJJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcmRlckl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RF
N0ZDNDMxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3JkZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjI4ODksMTAgKzIyODk2LDE0IEBACiAJCQkJQ0RFM0E4NTUxN0Y2MDIwNDAwQzVC
RTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLywKIAkJCQlDRDU0QTc2MDE4MEY5
RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwICov
LAogCQkJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5oICovLAorCQkJCUNERTU5NTk0MUJGMTY2RDEwMEExQ0JFOCAvKiBDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oICovLAorCQkJCUNERTU5NTkzMUJGMTY2QUQwMEEx
Q0JFOCAvKiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbSAqLywKIAkJCQlDRERFMDJF
QTE4QjNFRDZEMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaCAqLywKIAkJ
CQlDRERFMDJFQjE4QjNFRDZEMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMu
bW0gKi8sCi0JCQkJQ0RERTAyRUUxOEI1NjRGQTAwQ0Y3RkYxIC8qIENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMuaCAqLywKLQkJCQlDRERFMDJFRjE4QjU2NTEyMDBDRjdGRjEgLyogQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSAqLywKKwkJCQlDRERFMDJFRTE4QjU2NEZBMDBDRjdG
RjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5oICovLAorCQkJCUNEREUwMkVGMThCNTY1
MTIwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tICovLAorCQkJCUNERTU5
NTk2MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8s
CisJCQkJQ0RFNTk1OUMxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakMubW0gKi8sCiAJCQkJMDdBQTZCNjkxNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZPYmpDLmggKi8sCiAJCQkJMDdBQTZCNkExNjZEMDE5NTAwRDQ1NjcxIC8q
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tICovLAogCQkJCTA3MzY3REREMTcyQ0E2
N0YwMEQ4NjFCOSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlTGVnYWN5QVZGT2JqQy5oICovLApA
QCAtMjgwMDgsNiArMjgwMTksNyBAQAogCQkJCUZEMzE2MEFGMTJCMDI2RjcwMEMxQTM1OSAvKiBW
ZWN0b3JNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EyNTcxNTEyOTNDMDEwMDA3QTI2M0Qg
LyogVmVydGljYWxQb3NpdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU4M0RCMjE4
M0M0NDA2MDAzMUVBQTMgLyogVmlkZW9QbGF5YmFja1F1YWxpdHkuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNERTU5NTk3MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZP
YmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTg4RTBERjE3MTVEMkEyMDA2NThEOTggLyogVmlk
ZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4OEUwRTIxNzE1RDJBMjAwNjU4RDk4IC8q
IFZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0NjE4MERGRjRFMDA4
QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NzIw
LDcgKzI4NzMyLDcgQEAKIAkJCQlDRDMxODYyMjE5OUYxRTJBMDAzMEEwRjcgLyogQ0RNUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEREUwMkVEMThCM0VE
NkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUNERThCNUYwMUE2OTc3OEIwMEI0QjY2QSAvKiBDRE1TZXNzaW9uQ2xlYXJLZXkuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RERTAyRjAxOEI1NjUxMzAwQ0Y3RkYxIC8qIENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRERFMDJGMDE4QjU2
NTEzMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTVGMkRCQkU5MTc4RTNDODEwMDE0MTQ4NiAvKiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlFMUE4RTU2NjE3NTUyQjJBMDA3NDg4RTcgLyogQ0ZVUkxFeHRy
YXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzY5REMxNTA1RjA3NjAwMUI3NEFDIC8qIENo
YW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkwNjIsNiArMjkwNzQs
NyBAQAogCQkJCTg1REYyRUVFMEFBMzg3Q0IwMEFENjRDNSAvKiBET01IVE1MRWxlbWVudC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTg1QzA1MEJCMEFEODRGNUUwMDU1MzJFNyAvKiBET01IVE1MRW1i
ZWRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQTRDRTAwQUE2ODYxQjAwODgwNTJE
IC8qIERPTUhUTUxGaWVsZFNldEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREU1OTU5
RDFCRjI3NTcxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTg1RUNCRUYwMEFBNzYyNjkwMDU0NEYwQiAvKiBET01IVE1MRm9udEVs
ZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGMkM1RDBBQTM0MUY2MDBBRDY0QzUgLyog
RE9NSFRNTEZvcm1FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjgxOTYwQUE3N0U0
QjAwNDg2QUQ3IC8qIERPTUhUTUxGcmFtZUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKQEAgLTI5
MTU1LDYgKzI5MTY4LDcgQEAKIAkJCQlDRDlERTE4MTE3QUFENkE0MDBFQTM4NkQgLyogRE9NVVJM
TWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTVGQ0M5RkMxQjRERjdGMjAwRTcy
MzI2IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMUEzN0JG
MDk3QzcxNUYwMDE5RjNEOCAvKiBET01VdGlsaXR5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RF
NTk1OTUxQkYxNkRGMzAwQTFDQkU4IC8qIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTVDNzcwQTUxMDBENDFDRDAwNUJBMjY3IC8qIERPTVZhbGlk
aXR5U3RhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUMwRkY0QTBFNENFRkREMDA3RDZGRTUg
LyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTA2MDM3
QTE0MzI4MUNEMDBBQkY0QkEgLyogRE9NV2ViS2l0Q1NTRmlsdGVyVmFsdWUubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NETVNl
c3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NETVNlc3Npb24uaApp
bmRleCBkMzBiZmUzMDM1ZTM2MTFlNzY2YjA2MmZmNzY0Y2VlOGQ0ZmZhMWRjLi40NTUxNDA1MmE5
MGJlODMwNjE0NzE3Yzc5YjEyZDYxN2I3NGJiMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9DRE1TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ0RNU2Vzc2lvbi5oCkBAIC01OCw3ICs1OCw4IEBAIGVudW0gQ0RNU2Vz
c2lvblR5cGUgewogICAgIENETVNlc3Npb25UeXBlVW5rbm93biwKICAgICBDRE1TZXNzaW9uVHlw
ZUNsZWFyS2V5LAogICAgIENETVNlc3Npb25UeXBlQVZGb3VuZGF0aW9uT2JqQywKLSAgICBDRE1T
ZXNzaW9uVHlwZU1lZGlhU291cmNlQVZGT2JqQywKKyAgICBDRE1TZXNzaW9uVHlwZUFWU3RyZWFt
U2Vzc2lvbiwKKyAgICBDRE1TZXNzaW9uVHlwZUFWQ29udGVudEtleVNlc3Npb24sCiB9OwogCiBj
bGFzcyBDRE1TZXNzaW9uIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcAppbmRleCBhNzllODkxM2FlODViNDFlMmNiMzQxNGFjZWMyZTliOWZh
ZjEyMDAyLi41MGNlYTMzNGU5YTI1NzY3MDk3MTJlYWYyN2E2NDkzMjQxMzI5Mzg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01
MzIsOSArNTMyLDkgQEAgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVy
OjpjYW5jZWxLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYga2V5U3kKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBNZWRp
YVBsYXllcjo6Y3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcmIGtleVN5c3RlbSkKK3N0ZDo6dW5p
cXVlX3B0cjxDRE1TZXNzaW9uPiBNZWRpYVBsYXllcjo6Y3JlYXRlU2Vzc2lvbihjb25zdCBTdHJp
bmcmIGtleVN5c3RlbSwgQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBt
X3ByaXZhdGUtPmNyZWF0ZVNlc3Npb24oa2V5U3lzdGVtKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5jcmVhdGVTZXNzaW9uKGtleVN5c3RlbSwgY2xpZW50KTsKIH0KIAogdm9pZCBNZWRpYVBsYXll
cjo6c2V0Q0RNU2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKaW5kZXggMDkzNjQxZmE4ZjYyZThjZTEx
YjM5ZDY0ZTIwOThhNGQ0ZTJhYzFjZS4uMzQ1Nzc1YjNlOGI5ZmYxMTAxOWE1MzljZTAwZDFmZDg2
YTJmNjcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oCkBAIC0xMTYsNiArMTE2LDcgQEAgc3RydWN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFt
ZXRlcnMgewogCiBleHRlcm4gY29uc3QgUGxhdGZvcm1NZWRpYSBOb1BsYXRmb3JtTWVkaWE7CiAK
K2NsYXNzIENETVNlc3Npb25DbGllbnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNs
YXNzIENvbnRlbnRUeXBlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtMzU5LDcgKzM2MCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Np
b24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIENETVNlc3Npb25DbGllbnQqKTsKICAgICB2b2lk
IHNldENETVNlc3Npb24oQ0RNU2Vzc2lvbiopOwogICAgIHZvaWQga2V5QWRkZWQoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
clByaXZhdGUuaAppbmRleCBiOWZkMGU0Y2EwNjBlNGIwNWYxYzA3YTE4NjIxN2VjMWU3NDA3MGE0
Li4xZjcwZmYwYTAyNzA4ZjQ5YjhiZjZkOGZiNmIzZDQ5NTZkZTIxODQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApA
QCAtMjMwLDcgKzIzMCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQV9WMikKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVh
dGVTZXNzaW9uKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYs
IENETVNlc3Npb25DbGllbnQqKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldENETVNlc3Npb24oQ0RNU2Vzc2lvbiopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBrZXlBZGRl
ZCgpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaAppbmRleCA3YTgyYjdhY2VkMGM0MGY2NGJlNjNmNmYyZGQxNWM2MTkxNmFm
NjBiLi5hMWM3MWIxNDY5YTg2NDUzMmMxZjlkMzhjNTM0Y2I4YmEwZjEwNzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTI5LDI4
ICsyOSwzMyBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCiAKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETTsKK2NsYXNzIENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakM7CiAKIGNsYXNzIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMgOiBwdWJsaWMgQ0RNUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhDRE0qIGNkbSkKICAgICAgICAgOiBtX2NkbShj
ZG0pCiAgICAgeyB9Ci0gICAgdmlydHVhbCB+Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQygp
IHsgfQorICAgIHZpcnR1YWwgfkNETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKTsKIAogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzS2V5U3lzdGVtQW5kTWltZVR5cGUoY29uc3QgU3RyaW5nJiBrZXlTeXN0
ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vz
c2lvbkNsaWVudCopIG92ZXJyaWRlOwogCiAgICAgQ0RNKiBjZG0oKSBjb25zdCB7IHJldHVybiBt
X2NkbTsgfQogCisgICAgdm9pZCBpbnZhbGlkYXRlU2Vzc2lvbihDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDKik7CisKIHByb3RlY3RlZDoKICAgICBDRE0qIG1fY2RtOworICAgIFZlY3RvcjxD
RE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKj4gbV9zZXNzaW9uczsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXgg
YjFjZmViMWJhNDY3NjIwNzlmOThiM2E5ZjQzNzMzNTJjMGVlMjUzZC4uOGIxYmYzMmFmYWQ0YmEw
MWRlOTE5YzA4NGNmM2Q3Yjg2NDBjYjdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KQEAgLTI5LDcgKzI5LDggQEAKICNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW1wb3J0
ICJDRE0uaCIKLSNpbXBvcnQgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCIKKyNpbXBv
cnQgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmgiCisjaW1wb3J0ICJDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uLmgiCiAjaW1wb3J0ICJDb250ZW50VHlwZS5oIgogI2ltcG9ydCAiRXhj
ZXB0aW9uQ29kZS5oIgogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLmgiCkBAIC00MywxMCArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
UmVndWxhckV4cHJlc3Npb24mIHZhbGlkS2V5U3lzdGVtUkUoKQogewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZWd1bGFyRXhwcmVzc2lvbj4ga2V5U3lzdGVtUkUoIl5jb21cXC5hcHBsZVxc
LmZwc1xcLjJfXFxkKyg/OixcXGQrKSokIiwgVGV4dENhc2VJbnNlbnNpdGl2ZSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJlZ3VsYXJFeHByZXNzaW9uPiBrZXlTeXN0ZW1SRSgiXmNvbVxc
LmFwcGxlXFwuZnBzXFwuWzIzXV9cXGQrKD86LFxcZCspKiQiLCBUZXh0Q2FzZUluc2Vuc2l0aXZl
KTsKICAgICByZXR1cm4ga2V5U3lzdGVtUkU7CiB9CiAKK0NETVByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6On5DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKCkKK3sKKyAgICBmb3IgKGF1dG8m
IHNlc3Npb24gOiBtX3Nlc3Npb25zKQorICAgICAgICBzZXNzaW9uLT5pbnZhbGlkYXRlQ0RNKCk7
Cit9CisKIGJvb2wgQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNLZXlTeXN0
ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiB7CiAgICAgaWYgKCF3a1F1ZXJ5RGVjb2RlckF2
YWlsYWJpbGl0eSgpKQpAQCAtNTUsNiArNjIsOSBAQCBib29sIENETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQogICAg
IGlmICgha2V5U3lzdGVtLmlzRW1wdHkoKSAmJiB2YWxpZEtleVN5c3RlbVJFKCkubWF0Y2goa2V5
U3lzdGVtKSA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChrZXlTeXN0ZW0u
c3Vic3RyaW5nKDE0LCAxKS50b0ludCgpID09IDMgJiYgIUNETVNlc3Npb25BVkNvbnRlbnRLZXlT
ZXNzaW9uOjppc0F2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtODksNyArOTksNyBAQCBib29sIENETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUo
cGFyYW1ldGVycykgIT0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRl
U2Vzc2lvbigpCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50KiBjbGllbnQpCiB7CiAg
ICAgU3RyaW5nIGtleVN5c3RlbSA9IG1fY2RtLT5rZXlTeXN0ZW0oKTsKICAgICBBU1NFUlQodmFs
aWRLZXlTeXN0ZW1SRSgpLm1hdGNoKGtleVN5c3RlbSkgPj0gMCk7CkBAIC0xMDEsNyArMTExLDIw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpjcmVhdGVTZXNzaW9uKCkKICAgICBmb3IgKGF1dG8mIHByb3RvY29sVmVyc2lvblN0cmlu
ZyA6IHByb3RvY29sVmVyc2lvbnNTdHJpbmdzKQogICAgICAgICBwcm90b2NvbFZlcnNpb25zLmFw
cGVuZChwcm90b2NvbFZlcnNpb25TdHJpbmcudG9JbnQoKSk7CiAKLSAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDPihwcm90b2NvbFZlcnNpb25z
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQz4gc2Vz
c2lvbjsKKyAgICBpZiAoa2V5U3lzdGVtLnN1YnN0cmluZygxNCwgMSkudG9JbnQoKSA9PSAzICYm
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjppc0F2YWlsYWJsZSgpKQorICAgICAgICBz
ZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbj4o
cHJvdG9jb2xWZXJzaW9ucywgKnRoaXMsIGNsaWVudCk7CisgICAgZWxzZQorICAgICAgICBzZXNz
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uPihwcm90b2Nv
bFZlcnNpb25zLCAqdGhpcywgY2xpZW50KTsKKworICAgIG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Np
b24uZ2V0KCkpOworICAgIHJldHVybiBXVEY6Om1vdmUoc2Vzc2lvbik7Cit9CisKK3ZvaWQgQ0RN
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6aW52YWxpZGF0ZVNlc3Npb24oQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQyogc2Vzc2lvbikKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9ucy5jb250
YWlucyhzZXNzaW9uKSk7CisgICAgbV9zZXNzaW9ucy5yZW1vdmVBbGwoc2Vzc2lvbik7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50
S2V5U2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhOTQyYzc1ODI5MDE2MTk2MmQ4NmY3NGIwZDNjMWNj
MjI5ZDQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENETVNlc3Npb25BVkNvbnRlbnRL
ZXlTZXNzaW9uX2gKKyNkZWZpbmUgQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25faAorCisj
aW5jbHVkZSAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oIgorI2luY2x1ZGUgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKwor
T0JKQ19DTEFTUyBBVkNvbnRlbnRLZXlSZXF1ZXN0OworT0JKQ19DTEFTUyBBVkNvbnRlbnRLZXlT
ZXNzaW9uOworT0JKQ19DTEFTUyBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRl
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENETVByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM7CisKK2NsYXNzIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uIDogcHVibGljIENE
TVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMgeworcHVibGljOgorICAgIENETVNlc3Npb25BVkNv
bnRlbnRLZXlTZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm90b2NvbFZlcnNpb25zLCBDRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiwgQ0RNU2Vzc2lvbkNsaWVudCopOworICAgIHZpcnR1
YWwgfkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uKCk7CisKKyAgICBzdGF0aWMgYm9vbCBp
c0F2YWlsYWJsZSgpOworCisgICAgLy8gQ0RNU2Vzc2lvbgorICAgIHZpcnR1YWwgQ0RNU2Vzc2lv
blR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJuIENETVNlc3Npb25UeXBlQVZDb250ZW50S2V5
U2Vzc2lvbjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVx
dWVzdChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5n
JiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9u
ZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VLZXlzKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZShVaW50OEFycmF5KiwgUmVmUHRyPFVp
bnQ4QXJyYXk+JiBuZXh0TWVzc2FnZSwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWdu
ZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CisKKyAgICAvLyBDRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDCisgICAgdm9pZCBhZGRQYXJzZXIoQVZTdHJlYW1EYXRhUGFyc2VyICopIG92
ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciAqKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0KEFWQ29udGVudEtl
eVJlcXVlc3QgKik7CisKK3Byb3RlY3RlZDoKKyAgICBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGdl
bmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWdu
ZWQgbG9uZyYgc3lzdGVtQ29kZSk7CisKKyAgICBib29sIGhhc0NvbnRlbnRLZXlTZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50S2V5U2Vzc2lvbjsgfQorICAgIEFWQ29udGVudEtleVNl
c3Npb24qIGNvbnRlbnRLZXlTZXNzaW9uKCk7CisKKyAgICBSZXRhaW5QdHI8QVZDb250ZW50S2V5
U2Vzc2lvbj4gbV9jb250ZW50S2V5U2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8Q0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb25EZWxlZ2F0ZT4gbV9jb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlOwor
ICAgIFJldGFpblB0cjxBVkNvbnRlbnRLZXlSZXF1ZXN0PiBtX2tleVJlcXVlc3Q7CisgICAgUmVm
UHRyPFVpbnQ4QXJyYXk+IG1faW5pdERhdGE7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gbV9leHBp
cmVkU2Vzc2lvbjsKKyAgICBWZWN0b3I8aW50PiBtX3Byb3RvY29sVmVyc2lvbnM7CisgICAgaW50
MzJfdCBtX3Byb3RlY3RlZFRyYWNrSUQgeyAxIH07CisgICAgZW51bSB7IE5vcm1hbCwgS2V5UmVs
ZWFzZSB9IG1fbW9kZTsKK307CisKK2lubGluZSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
biogdG9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNzaW9uKQor
eworICAgIGlmICghc2Vzc2lvbiB8fCBzZXNzaW9uLT50eXBlKCkgIT0gQ0RNU2Vzc2lvblR5cGVB
VkNvbnRlbnRLZXlTZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24qPihzZXNzaW9uKTsKK30K
KworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9u
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVu
dEtleVNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2YmU1NGRmN2RjM2NmZmZjZDI0ZTMyZWM4MGRk
YTAzYTkzYjhjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1t
CkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2ltcG9ydCAiQ0RNLmgi
CisjaW1wb3J0ICJDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCisjaW1wb3J0ICJFeGNl
cHRpb25Db2RlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgi
CisjaW1wb3J0ICJNZWRpYVBsYXllci5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBv
cnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisjaW1wb3J0ICJVVUlELmgiCisjaW1w
b3J0IDxBVkZvdW5kYXRpb24vQVZFcnJvci5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNQmFzZS5o
PgorI2ltcG9ydCA8Y3N0ZGxpYj4KKyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1w
b3J0IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCitT
T0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXIpOworU09GVF9M
SU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZDb250ZW50S2V5U2Vzc2lvbik7CitT
T0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVkNvbnRlbnRLZXlSZXF1
ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSwgTlNTdHJpbmcgKikKKworQGludGVyZmFjZSBBVkNvbnRl
bnRLZXlTZXNzaW9uIDogTlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0b3JhZ2VE
aXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJMOworQHByb3BlcnR5IChhc3NpZ24pIGlk
IGRlbGVnYXRlOworLSAodm9pZClhZGRTdHJlYW1EYXRhUGFyc2VyOihBVlN0cmVhbURhdGFQYXJz
ZXIgKilzdHJlYW1EYXRhUGFyc2VyOworLSAodm9pZClyZW1vdmVTdHJlYW1EYXRhUGFyc2VyOihB
VlN0cmVhbURhdGFQYXJzZXIgKilzdHJlYW1EYXRhUGFyc2VyOworQHByb3BlcnR5IChyZWFkb25s
eSkgTlNBcnJheSAqc3RyZWFtRGF0YVBhcnNlcnM7CistICh2b2lkKWV4cGlyZTsKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIE5TRGF0YSAqY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcjsK
Ky0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOihOU0Rh
dGEgKilpbml0aWFsaXphdGlvbkRhdGEgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9uczsK
KysgKE5TQXJyYXkgKilwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZp
ZXI6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgc3RvcmFnZURpcmVjdG9yeUF0VVJMOihOU1VSTCAq
KXN0b3JhZ2VVUkw7CisrICh2b2lkKXJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6
KE5TQXJyYXkgKilleHBpcmVkU2Vzc2lvblJlcG9ydHMgd2l0aEFwcElkZW50aWZpZXI6KE5TRGF0
YSAqKWFwcElkZW50aWZpZXIgc3RvcmFnZURpcmVjdG9yeUF0VVJMOihOU1VSTCAqKXN0b3JhZ2VV
Ukw7CitAZW5kCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIEFWQ29udGVudEtleVJlcXVl
c3RTdGF0dXMpIHsKKyAgICBBVkNvbnRlbnRLZXlTZXNzaW9uU3RhdHVzTm9LZXksCisgICAgQVZD
b250ZW50S2V5U2Vzc2lvblN0YXR1c1JlcXVlc3RpbmdLZXksCisgICAgQVZDb250ZW50S2V5U2Vz
c2lvblN0YXR1c0tleVByZXNlbnQsCisgICAgQVZDb250ZW50S2V5U2Vzc2lvblN0YXR1c0V4cGly
ZWQsCisgICAgQVZDb250ZW50S2V5U2Vzc2lvblN0YXR1c0ZhaWxlZAorfTsKKworQGludGVyZmFj
ZSBBVkNvbnRlbnRLZXlSZXF1ZXN0IDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEFW
Q29udGVudEtleVJlcXVlc3RTdGF0dXMgc3RhdHVzOworQHByb3BlcnR5IChyZWFkb25seSkgTlNF
cnJvciAqZXJyb3I7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU0RhdGEgKmluaXRpYWxpemF0aW9u
RGF0YTsKKy0gKE5TRGF0YSAqKWNvbnRlbnRLZXlSZXF1ZXN0RGF0YUZvckFwcDooTlNEYXRhICop
YXBwSWRlbnRpZmllciBjb250ZW50SWRlbnRpZmllcjooTlNEYXRhICopY29udGVudElkZW50aWZp
ZXIgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqKilvdXRF
cnJvcjsKKy0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZURhdGE6KE5TRGF0YSAqKWNv
bnRlbnRLZXlSZXNwb25zZURhdGE7CistICh2b2lkKXByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VF
cnJvcjooTlNFcnJvciAqKWVycm9yOworLSAodm9pZClyZW5ld0V4cGlyaW5nQ29udGVudEtleVJl
c3BvbnNlRGF0YTsKK0BlbmQKKworQGludGVyZmFjZSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbkRlbGVnYXRlIDogTlNPYmplY3QgeworICAgIFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uICptX3BhcmVudDsKK30KKy0gKHZvaWQpaW52YWxpZGF0ZTsKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uRGVsZWdhdGUKKy0g
KGlkKWluaXRXaXRoUGFyZW50OihXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
biAqKXBhcmVudAoreworICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIG1f
cGFyZW50ID0gcGFyZW50OworICAgIHJldHVybiBzZWxmOworfQorCisKKy0gKHZvaWQpaW52YWxp
ZGF0ZQoreworICAgIG1fcGFyZW50ID0gbnVsbHB0cjsKK30KKworLSAodm9pZCljb250ZW50S2V5
U2Vzc2lvbjooQVZDb250ZW50S2V5U2Vzc2lvbiAqKXNlc3Npb24gZGlkUHJvdmlkZUNvbnRlbnRL
ZXlSZXF1ZXN0OihBVkNvbnRlbnRLZXlSZXF1ZXN0ICopa2V5UmVxdWVzdAoreworICAgIFVOVVNF
RF9QQVJBTShzZXNzaW9uKTsKKworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQt
PmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdChrZXlSZXF1ZXN0KTsKK30KKworLSAodm9pZClj
b250ZW50S2V5U2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJEaWRDaGFu
Z2U6KEFWQ29udGVudEtleVNlc3Npb24gKilzZXNzaW9uCit7CisgICAgaWYgKCFtX3BhcmVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNEYXRhKiBpZGVudGlmaWVyID0gW3Nlc3Npb24gY29u
dGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcl07CisgICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBzZXNzaW9uSWRlbnRpZmllclN0cmluZyA9IGlkZW50aWZpZXIgPyBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTppZGVudGlmaWVyIGVuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSkgOiBuaWw7CisgICAgbV9wYXJlbnQtPnNldFNlc3Npb25JZChzZXNzaW9uSWRlbnRp
ZmllclN0cmluZy5nZXQoKSk7Cit9CitAZW5kCisKK3N0YXRpYyBjb25zdCBOU1N0cmluZyAqUGxh
eWJhY2tTZXNzaW9uSWRLZXkgPSBAIlBsYXliYWNrU2Vzc2lvbklEIjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWQ29u
dGVudEtleVNlc3Npb24oY29uc3QgVmVjdG9yPGludD4mIHByb3RvY29sVmVyc2lvbnMsIENETVBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMmIGNkbSwgQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQor
ICAgIDogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyhjZG0sIGNsaWVudCkKKyAgICAsIG1f
Y29udGVudEtleVNlc3Npb25EZWxlZ2F0ZShhZG9wdE5TKFtbQ0RNU2Vzc2lvbkFWQ29udGVudEtl
eVNlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhQYXJlbnQ6dGhpc10pKQorICAgICwgbV9w
cm90b2NvbFZlcnNpb25zKHByb3RvY29sVmVyc2lvbnMpCisgICAgLCBtX21vZGUoTm9ybWFsKQor
eworfQorCitDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6fkNETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uKCkKK3sKKyAgICBbbV9jb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIGludmFs
aWRhdGVdOworCisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMp
CisgICAgICAgIHJlbW92ZVBhcnNlcihzb3VyY2VCdWZmZXItPnBhcnNlcigpKTsKK30KKworYm9v
bCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFpbGFibGUoKQoreworICAgIHJl
dHVybiBnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKTsKK30KKworUmVmUHRyPFVpbnQ4QXJy
YXk+IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpnZW5lcmF0ZUtleVJlcXVlc3QoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgVWludDhBcnJheSogaW5pdERhdGEsIFN0cmluZyYgZGVzdGlu
YXRpb25VUkwsIHVuc2lnbmVkIHNob3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3Rl
bUNvZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKG1pbWVUeXBlKTsKKyAgICBVTlVTRURfUEFSQU0o
ZGVzdGluYXRpb25VUkwpOworICAgIEFTU0VSVChpbml0RGF0YSk7CisKKyAgICBMT0coTWVkaWEs
ICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KCVwKSIs
IHRoaXMpOworCisgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7CisgICAgc3lz
dGVtQ29kZSA9IDA7CisKKyAgICBtX2luaXREYXRhID0gaW5pdERhdGE7CisKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJrZXlyZWxlYXNlIikpIHsKKyAgICAgICAgbV9tb2Rl
ID0gS2V5UmVsZWFzZTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2Uo
ZXJyb3JDb2RlLCBzeXN0ZW1Db2RlKTsKKyAgICB9CisKKyAgICBpZiAoIW1fY2VydGlmaWNhdGUp
IHsKKyAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY2VydGlm
aWNhdGUiKSk7CisgICAgICAgIFJlZlB0cjxVaW50OEFycmF5PiBhcnJheSA9IFVpbnQ4QXJyYXk6
OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIGxlbmd0aCA9IGNlcnRpZmljYXRlU3RyaW5nLmxlbmd0aCgpOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBhcnJheS0+c2V0KGksIGNlcnRpZmljYXRlU3RyaW5nW2ldKTsK
KyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIGlmICghbV9rZXlSZXF1ZXN0KSB7
CisgICAgICAgIE5TRGF0YSogbnNJbml0RGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczptX2lu
aXREYXRhLT5kYXRhKCkgbGVuZ3RoOm1faW5pdERhdGEtPmxlbmd0aCgpXTsKKyAgICAgICAgW2Nv
bnRlbnRLZXlTZXNzaW9uKCkgcHJvY2Vzc0NvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhOm5zSW5pdERhdGEgb3B0aW9uczpuaWxdOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpyZWxlYXNlS2V5cygp
Cit7CisgICAgaWYgKGhhc0NvbnRlbnRLZXlTZXNzaW9uKCkpIHsKKyAgICAgICAgbV9zdG9wcGVk
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZl
cnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPmZsdXNoKCk7CisKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OnJlbGVhc2VLZXlzKCVwKSAtIGV4
cGlyaW5nIHN0cmVhbSBzZXNzaW9uIiwgdGhpcyk7CisgICAgICAgIFtjb250ZW50S2V5U2Vzc2lv
bigpIGV4cGlyZV07CisKKyAgICAgICAgaWYgKCFtX2NlcnRpZmljYXRlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghW2dldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dp
dGhBcHBJZGVudGlmaWVyOnN0b3JhZ2VEaXJlY3RvcnlBdFVSTDopXSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRhdGEoKSBs
ZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsKKyAgICAgICAgTlNBcnJheSogZXhwaXJl
ZFNlc3Npb25zID0gW2dldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVk
U2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3Rv
cmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1d
OworICAgICAgICBmb3IgKE5TRGF0YSogZXhwaXJlZFNlc3Npb25EYXRhIGluIGV4cGlyZWRTZXNz
aW9ucykgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpleHBpcmVkU2Vzc2lvbiA9IFtOU1By
b3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gcHJvcGVydHlMaXN0V2l0aERhdGE6ZXhwaXJlZFNlc3Np
b25EYXRhIG9wdGlvbnM6a0NGUHJvcGVydHlMaXN0SW1tdXRhYmxlIGZvcm1hdDpudWxscHRyIGVy
cm9yOm51bGxwdHJdOworICAgICAgICAgICAgTlNTdHJpbmcgKnBsYXliYWNrU2Vzc2lvbklkVmFs
dWUgPSAoTlNTdHJpbmcgKilbZXhwaXJlZFNlc3Npb24gb2JqZWN0Rm9yS2V5OlBsYXliYWNrU2Vz
c2lvbklkS2V5XTsKKyAgICAgICAgICAgIGlmICghW3BsYXliYWNrU2Vzc2lvbklkVmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvbklkID09IFN0cmluZyhwbGF5YmFja1Nlc3Npb25J
ZFZhbHVlKSkgeworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uOjpyZWxlYXNlS2V5cyglcCkgLSBmb3VuZCBzZXNzaW9uLCBzZW5kaW5nIGV4
cGlyYXRpb24gbWVzc2FnZSIpOworICAgICAgICAgICAgICAgIG1fZXhwaXJlZFNlc3Npb24gPSBl
eHBpcmVkU2Vzc2lvbkRhdGE7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdl
KFVpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oW21fZXhwaXJl
ZFNlc3Npb24gYnl0ZXNdKSwgW21fZXhwaXJlZFNlc3Npb24gbGVuZ3RoXSkuZ2V0KCksIGVtcHR5
U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0VxdWFsKFVpbnQ4QXJyYXkqIGRhdGEsIGNv
bnN0IGNoYXIqIGxpdGVyYWwpCit7CisgICAgQVNTRVJUKGRhdGEpOworICAgIEFTU0VSVChsaXRl
cmFsKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLT5sZW5ndGgoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWxpdGVyYWxb
aV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGRhdGEtPml0ZW0o
aSkgIT0gc3RhdGljX2Nhc3Q8dWludDhfdD4obGl0ZXJhbFtpXSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAhbGl0ZXJhbFtsZW5ndGhdOworfQorCitib29s
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoVWludDhBcnJheSoga2V5LCBS
ZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2Rl
LCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQoreworICAgIFVOVVNFRF9QQVJBTShuZXh0TWVz
c2FnZSk7CisKKyAgICBib29sIHNob3VsZEdlbmVyYXRlS2V5UmVxdWVzdCA9ICFtX2NlcnRpZmlj
YXRlIHx8IGlzRXF1YWwoa2V5LCAicmVuZXciKTsKKyAgICBpZiAoIW1fY2VydGlmaWNhdGUpIHsK
KyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OnVwZGF0
ZSglcCkgLSBjZXJ0aWZpY2F0ZSBkYXRhIiwgdGhpcyk7CisKKyAgICAgICAgbV9jZXJ0aWZpY2F0
ZSA9IGtleTsKKyAgICB9CisKKyAgICBpZiAoaXNFcXVhbChrZXksICJhY2tub3dsZWRnZWQiKSkg
eworICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBk
YXRlKCVwKSAtIGFja25vd2xlZGluZyBzZWN1cmUgc3RvcCBtZXNzYWdlIiwgdGhpcyk7CisKKyAg
ICAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9uKSB7CisgICAgICAgICAgICBlcnJvckNvZGUgPSBN
ZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRh
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5k
YXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWYgKFtn
ZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6d2l0aEFwcElkZW50aWZpZXI6c3Rv
cmFnZURpcmVjdG9yeUF0VVJMOildKQorICAgICAgICAgICAgW2dldEFWQ29udGVudEtleVNlc3Np
b25DbGFzcygpIHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6QFttX2V4cGlyZWRT
ZXNzaW9uLmdldCgpXSB3aXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3Rv
cmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1d
OworICAgICAgICBtX2V4cGlyZWRTZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBLZXlSZWxlYXNlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fa2V5UmVxdWVzdCkgeworICAgICAgICBOU0RhdGEqIG5z
SW5pdERhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0
aDptX2luaXREYXRhLT5sZW5ndGgoKV07CisgICAgICAgIFtjb250ZW50S2V5U2Vzc2lvbigpIHBy
b2Nlc3NDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YTpuc0luaXREYXRhIG9wdGlv
bnM6bmlsXTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR2VuZXJhdGVLZXlSZXF1ZXN0KSB7Cisg
ICAgICAgIEFTU0VSVChtX2tleVJlcXVlc3QpOworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBj
ZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1f
Y2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBpbml0RGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0aDptX2luaXREYXRhLT5s
ZW5ndGgoKV0pOworCisgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IG9wdGlvbnM7Cisg
ICAgICAgIGlmICghbV9wcm90b2NvbFZlcnNpb25zLmlzRW1wdHkoKSAmJiBjYW5Mb2FkQVZDb250
ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXkoKSkgeworICAgICAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZlcnNpb25zT3B0aW9uID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHZlcnNp
b24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZlcnNpb24p
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFtwcm90b2Nv
bFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZlcnNpb24pXTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgb3B0aW9ucyA9IEB7IGdldEFWQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZl
cnNpb25zS2V5KCk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgfQor
CisgICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOworICAgICAgICBzeXN0
ZW1Db2RlID0gMDsKKyAgICAgICAgTlNEYXRhKiByZXF1ZXN0RGF0YSA9IFttX2tleVJlcXVlc3Qg
Y29udGVudEtleVJlcXVlc3REYXRhRm9yQXBwOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBjb250ZW50
SWRlbnRpZmllcjppbml0RGF0YS5nZXQoKSBvcHRpb25zOm9wdGlvbnMuZ2V0KCkgZXJyb3I6bmls
XTsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBVaW50OEFycmF5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KFtyZXF1ZXN0RGF0YSBieXRlc10pLCBbcmVxdWVzdERhdGEgbGVuZ3Ro
XSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIExPRyhNZWRpYSwgIkNE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoJXApIC0ga2V5IGRhdGEiLCB0aGlz
KTsKKyAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKKyAgICBzeXN0ZW1Db2Rl
ID0gMDsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBsZW5ndGg6a2V5LT5sZW5ndGgoKV0pOwor
ICAgIFttX2tleVJlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZURhdGE6a2V5RGF0YS5n
ZXQoKV07CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZDb250ZW50
S2V5U2Vzc2lvbjo6YWRkUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciogcGFyc2VyKQoreworICAg
IFtjb250ZW50S2V5U2Vzc2lvbigpIGFkZFN0cmVhbURhdGFQYXJzZXI6cGFyc2VyXTsKK30KKwor
dm9pZCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6cmVtb3ZlUGFyc2VyKEFWU3RyZWFt
RGF0YVBhcnNlciogcGFyc2VyKQoreworICAgIFtjb250ZW50S2V5U2Vzc2lvbigpIHJlbW92ZVN0
cmVhbURhdGFQYXJzZXI6cGFyc2VyXTsKK30KKworUGFzc1JlZlB0cjxVaW50OEFycmF5PiBDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNp
Z25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQoreworICAg
IEFTU0VSVChtX21vZGUgPT0gS2V5UmVsZWFzZSk7CisgICAgbV9jZXJ0aWZpY2F0ZSA9IG1faW5p
dERhdGE7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3Ro
Om1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7CisKKyAgICBpZiAoIVtnZXRBVkNvbnRlbnRLZXlT
ZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBlbmRpbmdFeHBpcmVk
U2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0p
IHsKKyAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRl
ZDsKKyAgICAgICAgc3lzdGVtQ29kZSA9ICchbW9yJzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgTlNBcnJheSogZXhwaXJlZFNlc3Npb25zID0gW2dldEFWQ29udGVudEtl
eVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRp
ZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOworICAgIGlmICghW2V4cGlyZWRTZXNzaW9u
cyBjb3VudF0pIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNl
c3Npb246OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UoJXApIC0gbm8gZXhwaXJlZCBzZXNzaW9u
cyBmb3VuZCIsIHRoaXMpOworCisgICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpLZXlT
eXN0ZW1Ob3RTdXBwb3J0ZWQ7CisgICAgICAgIHN5c3RlbUNvZGUgPSAnIW1vcic7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVkNv
bnRlbnRLZXlTZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAtIGZvdW5kICVk
IGV4cGlyZWQgc2Vzc2lvbnMiLCB0aGlzLCBbZXhwaXJlZFNlc3Npb25zIGNvdW50XSk7CisKKyAg
ICBlcnJvckNvZGUgPSAwOworICAgIHN5c3RlbUNvZGUgPSAwOworICAgIG1fZXhwaXJlZFNlc3Np
b24gPSBbZXhwaXJlZFNlc3Npb25zIGZpcnN0T2JqZWN0XTsKKyAgICByZXR1cm4gVWludDhBcnJh
eTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBi
eXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBsZW5ndGhdKTsKK30KKwordm9pZCBDRE1TZXNzaW9u
QVZDb250ZW50S2V5U2Vzc2lvbjo6ZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0KEFWQ29udGVu
dEtleVJlcXVlc3QgKmtleVJlcXVlc3QpCit7CisgICAgbV9rZXlSZXF1ZXN0ID0ga2V5UmVxdWVz
dDsKK30KKworQVZDb250ZW50S2V5U2Vzc2lvbiogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Np
b246OmNvbnRlbnRLZXlTZXNzaW9uKCkKK3sKKyAgICBpZiAoIW1fY29udGVudEtleVNlc3Npb24p
IHsKKyAgICAgICAgbV9jb250ZW50S2V5U2Vzc2lvbiA9IGFkb3B0TlMoW1tnZXRBVkNvbnRlbnRL
ZXlTZXNzaW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhTdG9yYWdlRGlyZWN0b3J5QXRVUkw6W05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgpXV0pOworICAgICAgICBtX2NvbnRlbnRL
ZXlTZXNzaW9uLmdldCgpLmRlbGVnYXRlID0gbV9jb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlLmdl
dCgpOworICAgIH0KKworICAgIHJldHVybiBtX2NvbnRlbnRLZXlTZXNzaW9uLmdldCgpOworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25B
VkZvdW5kYXRpb25PYmpDLmgKaW5kZXggMjE4NWZmMjY3YjBmY2Q4NGQ0ODI1MTRiY2NhOThlZjQz
OTE1OGYzOS4uNWQ5MzA3Mzc4YjFhZTM3NmQ1NzViN2I0NmI1MjRkZTFkODYwNWU3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5o
CkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM7CiAKIGNsYXNzIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDIDogcHVibGljIENETVNlc3Np
b24gewogcHVibGljOgotICAgIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqIHBhcmVudCk7CisgICAgQ0RNU2Vzc2lvbkFWRm91bmRh
dGlvbk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyogcGFyZW50LCBDRE1T
ZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMo
KSB7IH0KIAogICAgIHZpcnR1YWwgQ0RNU2Vzc2lvblR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIENETVNlc3Npb25UeXBlQVZGb3VuZGF0aW9uT2JqQzsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
Rm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCAyNGRkMTA4
MTQyZjUyYzE1NjMwY2EzMmZjODgyNGU1NzVkOWIyYWQyLi5jYmRlMTk4OTVhYzk3ZTcwMTE4YjNk
OGY5MWRkMmU1MmEyMGUxYWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtNDYsOSArNDYsOSBAQCBTT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVkFzc2V0UmVzb3VyY2VMb2FkaW5nUmVxdWVzdCkKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQzo6Q0RNU2Vzc2lv
bkFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyogcGFy
ZW50KQorQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakM6OkNETVNlc3Npb25BVkZvdW5kYXRpb25P
YmpDKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqIHBhcmVudCwgQ0RNU2Vzc2lv
bkNsaWVudCogY2xpZW50KQogICAgIDogbV9wYXJlbnQocGFyZW50KQotICAgICwgbV9jbGllbnQo
bnVsbHB0cikKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc2Vzc2lvbklkKGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNl
c3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWE0NmJlOThlZGUx
MzgwM2I1OTZhNTFlNWFkYjQxNmEyYjYxYmZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbi5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENETVNl
c3Npb25BVlN0cmVhbVNlc3Npb25faAorI2RlZmluZSBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
X2gKKworI2luY2x1ZGUgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCIKKyNpbmNsdWRl
ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QV9WMikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworT0JKQ19DTEFTUyBBVlN0cmVhbVNlc3Np
b247CitPQkpDX0NMQVNTIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlcjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOwor
CitjbGFzcyBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uIDogcHVibGljIENETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakMgeworcHVibGljOgorICAgIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24o
Y29uc3QgVmVjdG9yPGludD4mIHByb3RvY29sVmVyc2lvbnMsIENETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMmLCBDRE1TZXNzaW9uQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q0RNU2Vzc2lvbkFW
U3RyZWFtU2Vzc2lvbigpOworCisgICAgLy8gQ0RNU2Vzc2lvbgorICAgIHZpcnR1YWwgQ0RNU2Vz
c2lvblR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJuIENETVNlc3Npb25UeXBlQVZTdHJlYW1T
ZXNzaW9uOyB9CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhBcnJheT4gZ2VuZXJhdGVLZXlSZXF1
ZXN0KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJpbmcm
IGRlc3RpbmF0aW9uVVJMLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25n
JiBzeXN0ZW1Db2RlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUtleXMoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlKFVpbnQ4QXJyYXkqLCBSZWZQdHI8VWlu
dDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25l
ZCBsb25nJiBzeXN0ZW1Db2RlKSBvdmVycmlkZTsKKworICAgIC8vIENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMKKyAgICB2b2lkIGFkZFBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlbW92ZVBhcnNlcihBVlN0cmVhbURhdGFQYXJzZXIqKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgc2V0U3RyZWFtU2Vzc2lvbihBVlN0cmVhbVNlc3Npb24qKTsKKworcHJv
dGVjdGVkOgorICAgIFBhc3NSZWZQdHI8VWludDhBcnJheT4gZ2VuZXJhdGVLZXlSZWxlYXNlTWVz
c2FnZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2Rl
KTsKKworICAgIFdlYWtQdHJGYWN0b3J5PENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24+IG1fd2Vh
a1B0ckZhY3Rvcnk7CisgICAgUmV0YWluUHRyPEFWU3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1TZXNz
aW9uOworICAgIFJlZlB0cjxVaW50OEFycmF5PiBtX2luaXREYXRhOworICAgIFJlZlB0cjxVaW50
OEFycmF5PiBtX2NlcnRpZmljYXRlOworICAgIFJldGFpblB0cjxOU0RhdGE+IG1fZXhwaXJlZFNl
c3Npb247CisgICAgUmV0YWluUHRyPENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlcj4g
bV9kYXRhUGFyc2VyT2JzZXJ2ZXI7CisgICAgVmVjdG9yPGludD4gbV9wcm90b2NvbFZlcnNpb25z
OworICAgIGVudW0geyBOb3JtYWwsIEtleVJlbGVhc2UgfSBtX21vZGU7Cit9OworCitpbmxpbmUg
Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbiogdG9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKENE
TVNlc3Npb24qIHNlc3Npb24pCit7CisgICAgaWYgKCFzZXNzaW9uIHx8IHNlc3Npb24tPnR5cGUo
KSAhPSBDRE1TZXNzaW9uVHlwZUFWU3RyZWFtU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24qPihz
ZXNzaW9uKTsKK30KKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENETVNlc3Npb25BVlN0cmVh
bVNlc3Npb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0
cmVhbVNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0MGM5NmE1OGEwNWNmZGIyMWVmYzI4ZGNlOTFh
NmI4YWU5YzE3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KQEAg
LTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbXBvcnQgIkNETS5oIgorI2ltcG9y
dCAiQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIgorI2ltcG9ydCAiRXhjZXB0aW9uQ29k
ZS5oIgorI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFQbGF5ZXIuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9ydCAiVVVJRC5oIgorI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWRXJyb3IuaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTUJhc2UuaD4KKyNpbXBv
cnQgPGNzdGRsaWI+CisjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgorI2ltcG9ydCA8cnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5L
X0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRhUGFyc2VyKTsKK1NPRlRfTElOS19DTEFT
U19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbik7CitTT0ZUX0xJTktfQ09O
U1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXJDb250ZW50S2V5
UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXksIE5TU3RyaW5nICopCitTT0ZUX0xJTktfQ09OU1RB
TlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlv
blNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKKworQGlu
dGVyZmFjZSBBVlN0cmVhbURhdGFQYXJzZXIgOiBOU09iamVjdAorLSAodm9pZClwcm9jZXNzQ29u
dGVudEtleVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0YSBmb3JU
cmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CistICh2b2lkKXByb2Nlc3NDb250
ZW50S2V5UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENNUGVyc2lz
dGVudFRyYWNrSUQpdHJhY2tJRDsKKy0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNw
b25zZURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CistIChOU0Rh
dGEgKilzdHJlYW1pbmdDb250ZW50S2V5UmVxdWVzdERhdGFGb3JBcHA6KE5TRGF0YSAqKWFwcElk
ZW50aWZpZXIgY29udGVudElkZW50aWZpZXI6KE5TRGF0YSAqKWNvbnRlbnRJZGVudGlmaWVyIHRy
YWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zIGVycm9yOihOU0Vycm9yICoqKW91dEVycm9yOworQGVuZAorCitAaW50ZXJmYWNl
IEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistICh2b2lkKWFkZFN0cmVhbURhdGFQYXJzZXI6
KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJzZXI7CistICh2b2lkKXJlbW92ZVN0
cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQYXJzZXI7Cist
ICh2b2lkKWV4cGlyZTsKKy0gKE5TRGF0YSAqKWNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50
aWZpZXI7CisrIChOU0FycmF5ICopcGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJ
ZGVudGlmaWVyOihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDoo
TlNVUkwgKilzdG9yYWdlVVJMOworKyAodm9pZClyZW1vdmVQZW5kaW5nRXhwaXJlZFNlc3Npb25S
ZXBvcnRzOihOU0FycmF5ICopZXhwaXJlZFNlc3Npb25SZXBvcnRzIHdpdGhBcHBJZGVudGlmaWVy
OihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilz
dG9yYWdlVVJMOworQGVuZAorCitAaW50ZXJmYWNlIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25P
YnNlcnZlciA6IE5TT2JqZWN0IHsKKyAgICBXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNz
aW9uICptX3BhcmVudDsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENETVNlc3Npb25BVlN0
cmVhbVNlc3Npb25PYnNlcnZlcgorLSAoaWQpaW5pdFdpdGhQYXJlbnQ6KFdlYkNvcmU6OkNETVNl
c3Npb25BVlN0cmVhbVNlc3Npb24gKilwYXJlbnQKK3sKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICBtX3BhcmVudCA9IHBhcmVudDsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZCljb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZDooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBBVlN0cmVhbVNlc3Npb24qIHN0cmVh
bVNlc3Npb24gPSAoQVZTdHJlYW1TZXNzaW9uKilbbm90aWZpY2F0aW9uIG9iamVjdF07CisKKyAg
ICBOU0RhdGEqIGlkZW50aWZpZXIgPSBbc3RyZWFtU2Vzc2lvbiBjb250ZW50UHJvdGVjdGlvblNl
c3Npb25JZGVudGlmaWVyXTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHNlc3Npb25JZGVudGlm
aWVyU3RyaW5nID0gaWRlbnRpZmllciA/IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOmlkZW50aWZpZXIgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKSA6IG5pbDsK
KworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPnNldFNlc3Npb25JZChzZXNz
aW9uSWRlbnRpZmllclN0cmluZy5nZXQoKSk7Cit9CitAZW5kCisKK3N0YXRpYyBjb25zdCBOU1N0
cmluZyAqUGxheWJhY2tTZXNzaW9uSWRLZXkgPSBAIlBsYXliYWNrU2Vzc2lvbklEIjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm90b2NvbFZlcnNpb25zLCBDRE1Q
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiBjZG0sIENETVNlc3Npb25DbGllbnQqIGNsaWVudCkK
KyAgICA6IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoY2RtLCBjbGllbnQpCisgICAgLCBt
X3dlYWtQdHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX2RhdGFQYXJzZXJPYnNlcnZlcihhZG9wdE5T
KFtbQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbk9ic2VydmVyIGFsbG9jXSBpbml0V2l0aFBhcmVu
dDp0aGlzXSkpCisgICAgLCBtX3Byb3RvY29sVmVyc2lvbnMocHJvdG9jb2xWZXJzaW9ucykKKyAg
ICAsIG1fbW9kZShOb3JtYWwpCit7Cit9CisKK0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb246On5D
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKCkKK3sKKyAgICBzZXRTdHJlYW1TZXNzaW9uKG51bGxw
dHIpOworCisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisg
ICAgICAgIHJlbW92ZVBhcnNlcihzb3VyY2VCdWZmZXItPnBhcnNlcigpKTsKK30KKworUmVmUHRy
PFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVz
dChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBk
ZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYg
c3lzdGVtQ29kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWltZVR5cGUpOworICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvblVSTCk7CisgICAgQVNTRVJUKGluaXREYXRhKTsKKworICAgIExPRyhN
ZWRpYSwgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdCglcCki
LCB0aGlzKTsKKworICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOworICAgIHN5
c3RlbUNvZGUgPSAwOworCisgICAgbV9pbml0RGF0YSA9IGluaXREYXRhOworCisgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAia2V5cmVsZWFzZSIpKSB7CisgICAgICAgIG1fbW9k
ZSA9IEtleVJlbGVhc2U7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdl
KGVycm9yQ29kZSwgc3lzdGVtQ29kZSk7CisgICAgfQorCisgICAgU3RyaW5nIGNlcnRpZmljYXRl
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY2VydGlmaWNhdGUiKSk7CisgICAgUmVmUHRyPFVpbnQ4QXJy
YXk+IGFycmF5ID0gVWludDhBcnJheTo6Y3JlYXRlKGNlcnRpZmljYXRlU3RyaW5nLmxlbmd0aCgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSBjZXJ0aWZpY2F0ZVN0cmluZy5s
ZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBhcnJheS0+c2V0KGksIGNlcnRpZmlj
YXRlU3RyaW5nW2ldKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFW
U3RyZWFtU2Vzc2lvbjo6cmVsZWFzZUtleXMoKQoreworICAgIGlmIChtX3N0cmVhbVNlc3Npb24p
IHsKKyAgICAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VC
dWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPmZsdXNo
KCk7CisKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6cmVs
ZWFzZUtleXMoJXApIC0gZXhwaXJpbmcgc3RyZWFtIHNlc3Npb24iLCB0aGlzKTsKKyAgICAgICAg
W21fc3RyZWFtU2Vzc2lvbiBleHBpcmVdOworCisgICAgICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIVtnZXRBVlN0cmVhbVNlc3Npb25D
bGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGVuZGluZ0V4cGlyZWRTZXNzaW9u
UmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOnN0b3JhZ2VEaXJlY3RvcnlBdFVSTDopXSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURh
dGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUt
PmRhdGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsKKyAgICAgICAgTlNBcnJh
eSogZXhwaXJlZFNlc3Npb25zID0gW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkgcGVuZGluZ0V4
cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOmNlcnRpZmljYXRlRGF0YS5nZXQo
KSBzdG9yYWdlRGlyZWN0b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0
aCgpXV07CisgICAgICAgIGZvciAoTlNEYXRhKiBleHBpcmVkU2Vzc2lvbkRhdGEgaW4gZXhwaXJl
ZFNlc3Npb25zKSB7CisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmV4cGlyZWRTZXNzaW9uID0g
W05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRoRGF0YTpleHBpcmVk
U2Vzc2lvbkRhdGEgb3B0aW9uczprQ0ZQcm9wZXJ0eUxpc3RJbW11dGFibGUgZm9ybWF0Om51bGxw
dHIgZXJyb3I6bnVsbHB0cl07CisgICAgICAgICAgICBOU1N0cmluZyAqcGxheWJhY2tTZXNzaW9u
SWRWYWx1ZSA9IChOU1N0cmluZyAqKVtleHBpcmVkU2Vzc2lvbiBvYmplY3RGb3JLZXk6UGxheWJh
Y2tTZXNzaW9uSWRLZXldOworICAgICAgICAgICAgaWYgKCFbcGxheWJhY2tTZXNzaW9uSWRWYWx1
ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBpZiAobV9zZXNzaW9uSWQgPT0gU3RyaW5nKHBsYXliYWNrU2Vz
c2lvbklkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFW
U3RyZWFtU2Vzc2lvbjo6cmVsZWFzZUtleXMoJXApIC0gZm91bmQgc2Vzc2lvbiwgc2VuZGluZyBl
eHBpcmF0aW9uIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICBtX2V4cGlyZWRTZXNzaW9uID0g
ZXhwaXJlZFNlc3Npb25EYXRhOworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2Fn
ZShVaW50OEFycmF5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFttX2V4cGly
ZWRTZXNzaW9uIGJ5dGVzXSksIFttX2V4cGlyZWRTZXNzaW9uIGxlbmd0aF0pLmdldCgpLCBlbXB0
eVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNFcXVhbChVaW50OEFycmF5KiBkYXRhLCBj
b25zdCBjaGFyKiBsaXRlcmFsKQoreworICAgIEFTU0VSVChkYXRhKTsKKyAgICBBU1NFUlQobGl0
ZXJhbCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS0+bGVuZ3RoKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFsaXRlcmFs
W2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChkYXRhLT5pdGVt
KGkpICE9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpdGVyYWxbaV0pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gIWxpdGVyYWxbbGVuZ3RoXTsKK30KKworYm9v
bCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoVWludDhBcnJheSoga2V5LCBSZWZQ
dHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1
bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQoreworICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVLZXlS
ZXF1ZXN0ID0gIW1fY2VydGlmaWNhdGUgfHwgaXNFcXVhbChrZXksICJyZW5ldyIpOworICAgIGlm
ICghbV9jZXJ0aWZpY2F0ZSkgeworICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJl
YW1TZXNzaW9uOjp1cGRhdGUoJXApIC0gY2VydGlmaWNhdGUgZGF0YSIsIHRoaXMpOworCisgICAg
ICAgIG1fY2VydGlmaWNhdGUgPSBrZXk7CisgICAgfQorCisgICAgaWYgKGlzRXF1YWwoa2V5LCAi
YWNrbm93bGVkZ2VkIikpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFt
U2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGFja25vd2xlZGluZyBzZWN1cmUgc3RvcCBtZXNzYWdlIiwg
dGhpcyk7CisKKyAgICAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9uKSB7CisgICAgICAgICAgICBl
cnJvckNvZGUgPSBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2Vy
dGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2Nl
cnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7CisKKyAg
ICAgICAgaWYgKFtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocmVtb3ZlUGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0czp3aXRoQXBwSWRlbnRp
ZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pCisgICAgICAgICAgICBbZ2V0QVZTdHJlYW1T
ZXNzaW9uQ2xhc3MoKSByZW1vdmVQZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzOkBbbV9leHBp
cmVkU2Vzc2lvbi5nZXQoKV0gd2l0aEFwcElkZW50aWZpZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgp
IHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRo
KCldXTsKKyAgICAgICAgbV9leHBpcmVkU2Vzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChtX21vZGUgPT0gS2V5UmVsZWFzZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBw
cm90ZWN0ZWRTb3VyY2VCdWZmZXI7CisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3Nv
dXJjZUJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKHNvdXJjZUJ1ZmZlci0+cHJvdGVjdGVkVHJhY2tJ
RCgpICE9IC0xKSB7CisgICAgICAgICAgICBwcm90ZWN0ZWRTb3VyY2VCdWZmZXIgPSBzb3VyY2VC
dWZmZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChz
aG91bGRHZW5lcmF0ZUtleVJlcXVlc3QpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2Vy
dGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2Nl
cnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7CisKKyAg
ICAgICAgaWYgKG1fc291cmNlQnVmZmVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICBpZiAoIXByb3RlY3RlZFNvdXJjZUJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGluaXREYXRhID0gYWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2luaXREYXRhLT5kYXRhKCkgbGVu
Z3RoOm1faW5pdERhdGEtPmxlbmd0aCgpXSk7CisKKworICAgICAgICBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBvcHRpb25zOworICAgICAgICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5
KCkgJiYgY2FuTG9hZEFWU3RyZWFtRGF0YVBhcnNlckNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xW
ZXJzaW9uc0tleSgpKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHBy
b3RvY29sVmVyc2lvbnNPcHRpb24gPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9u
cykgeworICAgICAgICAgICAgICAgIGlmICghdmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2Jq
ZWN0OkAodmVyc2lvbildOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvcHRpb25zID0g
QHsgZ2V0QVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25z
S2V5KCk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgfQorCisgICAg
ICAgIE5TRXJyb3IqIGVycm9yID0gbmlsOworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXF1
ZXN0ID0gW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkgc3RyZWFtaW5nQ29udGVudEtl
eVJlcXVlc3REYXRhRm9yQXBwOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBjb250ZW50SWRlbnRpZmll
cjppbml0RGF0YS5nZXQoKSB0cmFja0lEOnByb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cHJvdGVjdGVk
VHJhY2tJRCgpIG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBlcnJvcjomZXJyb3JdOworCisgICAgICAg
IGlmICghW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyKV0pCisgICAgICAg
ICAgICBtX3Nlc3Npb25JZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKworICAgICAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVlN0cmVh
bVNlc3Npb246OnVwZGF0ZSglcCkgLSBlcnJvcjolQCIsIHRoaXMsIFtlcnJvciBkZXNjcmlwdGlv
bl0pOworICAgICAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6OkludmFsaWRQbGF5ZXJT
dGF0ZTsKKyAgICAgICAgICAgIHN5c3RlbUNvZGUgPSBzdGQ6OmFicyhzeXN0ZW1Db2RlRm9yRXJy
b3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIG5leHRNZXNzYWdlID0gVWludDhBcnJheTo6Y3JlYXRlKFtyZXF1ZXN0IGxlbmd0aF0pOwor
ICAgICAgICBbcmVxdWVzdCBnZXRCeXRlczpuZXh0TWVzc2FnZS0+ZGF0YSgpIGxlbmd0aDpuZXh0
TWVzc2FnZS0+bGVuZ3RoKCldOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
QVNTRVJUKCFtX3NvdXJjZUJ1ZmZlcnMuaXNFbXB0eSgpKTsKKyAgICBMT0coTWVkaWEsICJDRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoJXApIC0ga2V5IGRhdGEiLCB0aGlzKTsKKyAg
ICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKKyAgICBzeXN0ZW1Db2RlID0gMDsK
KyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBsZW5ndGg6a2V5LT5sZW5ndGgoKV0pOworICAgIFtw
cm90ZWN0ZWRTb3VyY2VCdWZmZXItPnBhcnNlcigpIHByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VE
YXRhOmtleURhdGEuZ2V0KCkgZm9yVHJhY2tJRDpwcm90ZWN0ZWRTb3VyY2VCdWZmZXItPnByb3Rl
Y3RlZFRyYWNrSUQoKV07CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uOjpzZXRTdHJlYW1TZXNzaW9uKEFWU3RyZWFtU2Vzc2lvbiAqc3RyZWFt
U2Vzc2lvbikKK3sKKyAgICBpZiAobV9zdHJlYW1TZXNzaW9uICYmIGNhbkxvYWRBVlN0cmVhbVNl
c3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlv
bigpKQorICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOm1fZGF0YVBhcnNlck9ic2VydmVyLmdldCgpIG5hbWU6Z2V0QVZTdHJlYW1TZXNz
aW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWROb3RpZmljYXRpb24o
KSBvYmplY3Q6bV9zdHJlYW1TZXNzaW9uLmdldCgpXTsKKworICAgIG1fc3RyZWFtU2Vzc2lvbiA9
IHN0cmVhbVNlc3Npb247CisKKyAgICBpZiAoIW1fc3RyZWFtU2Vzc2lvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGNhbkxvYWRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNl
c3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbigpKQorICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fZGF0YVBhcnNlck9ic2Vy
dmVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVu
dGlmaWVyQ2hhbmdlZDopIG5hbWU6Z2V0QVZTdHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25T
ZXNzaW9uSWRlbnRpZmllckNoYW5nZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bV9zdHJlYW1TZXNz
aW9uLmdldCgpXTsKKworICAgIE5TRGF0YSogaWRlbnRpZmllciA9IFtzdHJlYW1TZXNzaW9uIGNv
bnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJdOworICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcgPSBpZGVudGlmaWVyID8gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aWRlbnRpZmllciBlbmNvZGluZzooTlNVVEY4U3RyaW5n
RW5jb2RpbmcpXSkgOiBuaWw7CisgICAgc2V0U2Vzc2lvbklkKHNlc3Npb25JZGVudGlmaWVyU3Ry
aW5nLmdldCgpKTsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjphZGRQYXJz
ZXIoQVZTdHJlYW1EYXRhUGFyc2VyKiBwYXJzZXIpCit7CisgICAgaWYgKG1fc3RyZWFtU2Vzc2lv
bikKKyAgICAgICAgW21fc3RyZWFtU2Vzc2lvbiBhZGRTdHJlYW1EYXRhUGFyc2VyOnBhcnNlcl07
Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6cmVtb3ZlUGFyc2VyKEFWU3Ry
ZWFtRGF0YVBhcnNlciogcGFyc2VyKQoreworICAgIGlmIChtX3N0cmVhbVNlc3Npb24pCisgICAg
ICAgIFttX3N0cmVhbVNlc3Npb24gcmVtb3ZlU3RyZWFtRGF0YVBhcnNlcjpwYXJzZXJdOworfQor
CitQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OmdlbmVy
YXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQg
bG9uZyYgc3lzdGVtQ29kZSkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09IEtleVJlbGVhc2UpOwor
ICAgIG1fY2VydGlmaWNhdGUgPSBtX2luaXREYXRhOworICAgIFJldGFpblB0cjxOU0RhdGE+IGNl
cnRpZmljYXRlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9j
ZXJ0aWZpY2F0ZS0+ZGF0YSgpIGxlbmd0aDptX2NlcnRpZmljYXRlLT5sZW5ndGgoKV0pOworCisg
ICAgaWYgKCFbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpzdG9y
YWdlRGlyZWN0b3J5QXRVUkw6KV0pIHsKKyAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6
OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKyAgICAgICAgc3lzdGVtQ29kZSA9ICchbW9yJzsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgTlNBcnJheSogZXhwaXJlZFNlc3Np
b25zID0gW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkgcGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVw
b3J0c1dpdGhBcHBJZGVudGlmaWVyOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBzdG9yYWdlRGlyZWN0
b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgpXV07CisgICAgaWYg
KCFbZXhwaXJlZFNlc3Npb25zIGNvdW50XSkgeworICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAtIG5vIGV4
cGlyZWQgc2Vzc2lvbnMgZm91bmQiLCB0aGlzKTsKKworICAgICAgICBlcnJvckNvZGUgPSBNZWRp
YVBsYXllcjo6S2V5U3lzdGVtTm90U3VwcG9ydGVkOworICAgICAgICBzeXN0ZW1Db2RlID0gJyFt
b3InOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBMT0coTWVkaWEsICJD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAt
IGZvdW5kICVkIGV4cGlyZWQgc2Vzc2lvbnMiLCB0aGlzLCBbZXhwaXJlZFNlc3Npb25zIGNvdW50
XSk7CisKKyAgICBlcnJvckNvZGUgPSAwOworICAgIHN5c3RlbUNvZGUgPSAwOworICAgIG1fZXhw
aXJlZFNlc3Npb24gPSBbZXhwaXJlZFNlc3Npb25zIGZpcnN0T2JqZWN0XTsKKyAgICByZXR1cm4g
VWludDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbV9leHBpcmVk
U2Vzc2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBsZW5ndGhdKTsKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMuaAppbmRleCA2ODBlNWVmOWI0Mzc4OTdlOTFkNjA0OGQzOTYxYjAyY2VjOGFj
NmFiLi5lZjhiZTI5YzNmZmU2MmEzNjQxMmMyZGE2ZmRjMmY1NDE3Yzc5NzdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2
MiArMjksNjAgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uLmgiCiAjaW5jbHVkZSAiU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCiAKLU9CSkNfQ0xBU1MgQVZTdHJlYW1TZXNzaW9uOwotT0JKQ19D
TEFTUyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDT2JzZXJ2ZXI7CitPQkpDX0NMQVNTIEFW
U3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNFcnJvcjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworCiBjbGFzcyBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDIDogcHVibGljIENETVNlc3Npb24sIHB1YmxpYyBTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQ0Vycm9yQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBDRE1TZXNz
aW9uTWVkaWFTb3VyY2VBVkZPYmpDKGNvbnN0IFZlY3RvcjxpbnQ+JiBwcm90b2NvbFZlcnNpb25z
KTsKKyAgICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKENETVByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMmLCBDRE1TZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQygpOwogCi0gICAgdmlydHVhbCBDRE1TZXNzaW9uVHlwZSB0eXBlKCkg
b3ZlcnJpZGUgeyByZXR1cm4gQ0RNU2Vzc2lvblR5cGVNZWRpYVNvdXJjZUFWRk9iakM7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciopID0gMDsKKworICAg
IC8vIENETVNlc3Npb24KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KENETVNlc3Npb25DbGll
bnQqIGNsaWVudCkgb3ZlcnJpZGUgeyBtX2NsaWVudCA9IGNsaWVudDsgfQogICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nJiBzZXNzaW9uSWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nlc3Np
b25JZDsgfQotICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVxdWVz
dChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBk
ZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYg
c3lzdGVtQ29kZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VLZXlzKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZShVaW50OEFycmF5KiwgUmVmUHRyPFVpbnQ4
QXJyYXk+JiBuZXh0TWVzc2FnZSwgdW5zaWduZWQgc2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQg
bG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CiAKKyAgICAvLyBTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQ0Vycm9yQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGxheWVyRGlkUmVjZWl2ZUVycm9y
KEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyICosIE5TRXJyb3IgKiwgYm9vbCYgc2hvdWxkSWdu
b3JlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyZXJEaWRSZWNlaXZlRXJyb3Io
QVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyICosIE5TRXJyb3IgKiwgYm9vbCYgc2hvdWxkSWdu
b3JlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0U3RyZWFtU2Vzc2lvbihBVlN0cmVhbVNlc3Np
b24gKik7Ci0KICAgICB2b2lkIGFkZFNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQyopOwogICAgIHZvaWQgcmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKik7Ci0KICAgICB2b2lkIHNldFNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCkgeyBtX3Nlc3Npb25JZCA9IHNlc3Npb25JZDsgfQogCisgICAgdm9pZCBpbnZhbGlkYXRlQ0RN
KCkgeyBtX2NkbSA9IG51bGxwdHI7IH0KKwogcHJvdGVjdGVkOgorICAgIHN0YXRpYyBsb25nIHN5
c3RlbUNvZGVGb3JFcnJvcihOU0Vycm9yICopOwogICAgIFN0cmluZyBzdG9yYWdlUGF0aCgpIGNv
bnN0OwotICAgIFBhc3NSZWZQdHI8VWludDhBcnJheT4gZ2VuZXJhdGVLZXlSZWxlYXNlTWVzc2Fn
ZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKTsK
IAorICAgIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIG1fY2RtOworICAgIENETVNlc3Np
b25DbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxSZWZQdHI8U291cmNl
QnVmZmVyUHJpdmF0ZUFWRk9iakM+PiBtX3NvdXJjZUJ1ZmZlcnM7Ci0gICAgQ0RNU2Vzc2lvbkNs
aWVudCogbV9jbGllbnQ7Ci0gICAgUmV0YWluUHRyPEFWU3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1T
ZXNzaW9uOwotICAgIFJlZlB0cjxVaW50OEFycmF5PiBtX2luaXREYXRhOwogICAgIFJlZlB0cjxV
aW50OEFycmF5PiBtX2NlcnRpZmljYXRlOwotICAgIFJldGFpblB0cjxOU0RhdGE+IG1fZXhwaXJl
ZFNlc3Npb247Ci0gICAgUmV0YWluUHRyPENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakNPYnNl
cnZlcj4gbV9kYXRhUGFyc2VyT2JzZXJ2ZXI7Ci0gICAgVmVjdG9yPGludD4gbV9wcm90b2NvbFZl
cnNpb25zOwogICAgIFN0cmluZyBtX3Nlc3Npb25JZDsKLSAgICBlbnVtIHsgTm9ybWFsLCBLZXlS
ZWxlYXNlIH0gbV9tb2RlOwotICAgIGJvb2wgbV9zdG9wcGVkID0geyBmYWxzZSB9OworICAgIGJv
b2wgbV9zdG9wcGVkIHsgZmFsc2UgfTsKIH07CiAKIGlubGluZSBDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDKiB0b0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoQ0RNU2Vzc2lvbiogc2Vz
c2lvbikKIHsKLSAgICBpZiAoIXNlc3Npb24gfHwgc2Vzc2lvbi0+dHlwZSgpICE9IENETVNlc3Np
b25UeXBlTWVkaWFTb3VyY2VBVkZPYmpDKQorICAgIGlmICghc2Vzc2lvbiB8fCAoc2Vzc2lvbi0+
dHlwZSgpICE9IENETVNlc3Npb25UeXBlQVZTdHJlYW1TZXNzaW9uICYmIHNlc3Npb24tPnR5cGUo
KSAhPSBDRE1TZXNzaW9uVHlwZUFWQ29udGVudEtleVNlc3Npb24pKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQyo+KHNlc3Npb24pOwogfQogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShFTkNS
WVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNlbmRpZiAvLyBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tCmluZGV4IGZjOTc3M2U5YmZiZGNi
Y2E3ZTFlZjJhNjg0NmYyN2MyZmZkNzZjOTIuLmQ5YjFlNmQ1Yjc3NDc2M2RjOTNjNTcxZTE4MjNm
Yjg2ODIxZjg4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjY1ICsyOCwyMyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAotI2ltcG9ydCAiQ0RNLmgi
Ci0jaW1wb3J0ICJDRE1TZXNzaW9uLmgiCi0jaW1wb3J0ICJFeGNlcHRpb25Db2RlLmgiCisjaW1w
b3J0ICJDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVt
LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVBsYXllci5oIgotI2ltcG9y
dCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIKLSNpbXBvcnQgIlNvZnRMaW5raW5nLmgi
Ci0jaW1wb3J0ICJVVUlELmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZFcnJvci5oPgotI2lt
cG9ydCA8Q29yZU1lZGlhL0NNQmFzZS5oPgogI2ltcG9ydCA8Y3N0ZGxpYj4KLSNpbXBvcnQgPG9i
amMvb2JqYy1ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBv
cnQgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLQotU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlN0
cmVhbURhdGFQYXJzZXIpOwotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwg
QVZTdHJlYW1TZXNzaW9uKTsKLVNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTChBVkZvdW5kYXRp
b24sIEFWU3RyZWFtRGF0YVBhcnNlckNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tl
eSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTChBVkZvdW5kYXRpb24s
IEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2Vk
Tm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQotCi1AaW50ZXJmYWNlIEFWU3RyZWFtRGF0YVBhcnNl
ciA6IE5TT2JqZWN0Ci0tICh2b2lkKXByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VEYXRhOihOU0Rh
dGEgKiljb250ZW50S2V5UmVzcG9uc2VEYXRhIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNr
SUQpdHJhY2tJRDsKLS0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZUVycm9yOihOU0Vy
cm9yICopZXJyb3IgZm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOwotLSAo
dm9pZClyZW5ld0V4cGlyaW5nQ29udGVudEtleVJlc3BvbnNlRGF0YUZvclRyYWNrSUQ6KENNUGVy
c2lzdGVudFRyYWNrSUQpdHJhY2tJRDsKLS0gKE5TRGF0YSAqKXN0cmVhbWluZ0NvbnRlbnRLZXlS
ZXF1ZXN0RGF0YUZvckFwcDooTlNEYXRhICopYXBwSWRlbnRpZmllciBjb250ZW50SWRlbnRpZmll
cjooTlNEYXRhICopY29udGVudElkZW50aWZpZXIgdHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJ
RCl0cmFja0lEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3Ig
Kiopb3V0RXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgQVZTdHJlYW1TZXNzaW9uIDogTlNPYmpl
Y3QKLS0gKHZvaWQpYWRkU3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3Ry
ZWFtRGF0YVBhcnNlcjsKLS0gKHZvaWQpcmVtb3ZlU3RyZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1E
YXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlcjsKLS0gKHZvaWQpZXhwaXJlOwotLSAoTlNEYXRh
ICopY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcjsKLSsgKE5TQXJyYXkgKilwZW5k
aW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6KE5TRGF0YSAqKWFwcElk
ZW50aWZpZXIgc3RvcmFnZURpcmVjdG9yeUF0VVJMOihOU1VSTCAqKXN0b3JhZ2VVUkw7Ci0rICh2
b2lkKXJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6KE5TQXJyYXkgKilleHBpcmVk
U2Vzc2lvblJlcG9ydHMgd2l0aEFwcElkZW50aWZpZXI6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIg
c3RvcmFnZURpcmVjdG9yeUF0VVJMOihOU1VSTCAqKXN0b3JhZ2VVUkw7Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQ09ic2VydmVyIDogTlNPYmplY3Qgewot
ICAgIFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMgKm1fcGFyZW50OwotfQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQ09ic2Vy
dmVyCi0tIChpZClpbml0V2l0aFBhcmVudDooV2ViQ29yZTo6Q0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQyAqKXBhcmVudAotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIG1fcGFyZW50ID0gcGFyZW50OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWNv
bnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgotewotICAgIEFWU3RyZWFtU2Vzc2lvbiogc3RyZWFtU2Vzc2lvbiA9IChB
VlN0cmVhbVNlc3Npb24qKVtub3RpZmljYXRpb24gb2JqZWN0XTsKLQotICAgIE5TRGF0YSogaWRl
bnRpZmllciA9IFtzdHJlYW1TZXNzaW9uIGNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZp
ZXJdOwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcgPSBp
ZGVudGlmaWVyID8gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aWRlbnRp
ZmllciBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pIDogbmlsOwotCi0gICAgaWYgKG1f
cGFyZW50KQotICAgICAgICBtX3BhcmVudC0+c2V0U2Vzc2lvbklkKHNlc3Npb25JZGVudGlmaWVy
U3RyaW5nLmdldCgpKTsKLX0KLUBlbmQKLQotc3RhdGljIGNvbnN0IE5TU3RyaW5nICpQbGF5YmFj
a1Nlc3Npb25JZEtleSA9IEAiUGxheWJhY2tTZXNzaW9uSUQiOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OkNETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakMoY29uc3QgVmVjdG9yPGludD4mIHByb3RvY29sVmVyc2lvbnMpCi0gICAgOiBtX2Ns
aWVudChudWxscHRyKQotICAgICwgbV9kYXRhUGFyc2VyT2JzZXJ2ZXIoYWRvcHROUyhbW0NETVNl
c3Npb25NZWRpYVNvdXJjZUFWRk9iakNPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhQYXJlbnQ6dGhp
c10pKQotICAgICwgbV9wcm90b2NvbFZlcnNpb25zKHByb3RvY29sVmVyc2lvbnMpCi0gICAgLCBt
X21vZGUoTm9ybWFsKQorQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6Q0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQyhDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiBjZG0sIENETVNl
c3Npb25DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2RtKCZjZG0pCisgICAgLCBtX2NsaWVudChj
bGllbnQpCiB7CiB9CiAKIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6On5DRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDKCkKIHsKLSAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1f
c291cmNlQnVmZmVycykgewotICAgICAgICBpZiAobV9zdHJlYW1TZXNzaW9uKQotICAgICAgICAg
ICAgW21fc3RyZWFtU2Vzc2lvbiByZW1vdmVTdHJlYW1EYXRhUGFyc2VyOnNvdXJjZUJ1ZmZlci0+
cGFyc2VyKCldOwotICAgIH0KLQotICAgIHNldFN0cmVhbVNlc3Npb24obnVsbHB0cik7Ci19Ci0K
LVJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpnZW5lcmF0
ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVWludDhBcnJheSogaW5pdERhdGEs
IFN0cmluZyYgZGVzdGluYXRpb25VUkwsIHVuc2lnbmVkIHNob3J0JiBlcnJvckNvZGUsIHVuc2ln
bmVkIGxvbmcmIHN5c3RlbUNvZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG1pbWVUeXBlKTsKLSAg
ICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwotICAgIEFTU0VSVChpbml0RGF0YSk7Ci0K
LSAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpnZW5lcmF0ZUtl
eVJlcXVlc3QoJXApIiwgdGhpcyk7Ci0KLSAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9F
cnJvcjsKLSAgICBzeXN0ZW1Db2RlID0gMDsKLQotICAgIG1faW5pdERhdGEgPSBpbml0RGF0YTsK
LQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImtleXJlbGVhc2UiKSkgewot
ICAgICAgICBtX21vZGUgPSBLZXlSZWxlYXNlOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVLZXlS
ZWxlYXNlTWVzc2FnZShlcnJvckNvZGUsIHN5c3RlbUNvZGUpOwotICAgIH0KLQotICAgIFN0cmlu
ZyBjZXJ0aWZpY2F0ZVN0cmluZyhBU0NJSUxpdGVyYWwoImNlcnRpZmljYXRlIikpOwotICAgIFJl
ZlB0cjxVaW50OEFycmF5PiBhcnJheSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gY2VydGlm
aWNhdGVTdHJpbmcubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYXJyYXktPnNl
dChpLCBjZXJ0aWZpY2F0ZVN0cmluZ1tpXSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lk
IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnJlbGVhc2VLZXlzKCkKLXsKLSAgICBpZiAo
bV9zdHJlYW1TZXNzaW9uKSB7Ci0gICAgICAgIG1fc3RvcHBlZCA9IHRydWU7Ci0gICAgICAgIGZv
ciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9zb3VyY2VCdWZmZXJzKQotICAgICAgICAgICAgc291
cmNlQnVmZmVyLT5mbHVzaCgpOwotCi0gICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakM6OnJlbGVhc2VLZXlzKCVwKSAtIGV4cGlyaW5nIHN0cmVhbSBzZXNzaW9u
IiwgdGhpcyk7Ci0gICAgICAgIFttX3N0cmVhbVNlc3Npb24gZXhwaXJlXTsKLQotICAgICAgICBp
ZiAoIW1fY2VydGlmaWNhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFb
Z2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBl
bmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0
b3J5QXRVUkw6KV0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmV0YWluUHRyPE5T
RGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgp
XSk7Ci0gICAgICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVlN0cmVhbVNlc3Np
b25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpj
ZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOwotICAgICAgICBmb3IgKE5TRGF0YSogZXhwaXJlZFNl
c3Npb25EYXRhIGluIGV4cGlyZWRTZXNzaW9ucykgewotICAgICAgICAgICAgTlNEaWN0aW9uYXJ5
ICpleHBpcmVkU2Vzc2lvbiA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gcHJvcGVydHlM
aXN0V2l0aERhdGE6ZXhwaXJlZFNlc3Npb25EYXRhIG9wdGlvbnM6a0NGUHJvcGVydHlMaXN0SW1t
dXRhYmxlIGZvcm1hdDpudWxscHRyIGVycm9yOm51bGxwdHJdOwotICAgICAgICAgICAgTlNTdHJp
bmcgKnBsYXliYWNrU2Vzc2lvbklkVmFsdWUgPSAoTlNTdHJpbmcgKilbZXhwaXJlZFNlc3Npb24g
b2JqZWN0Rm9yS2V5OlBsYXliYWNrU2Vzc2lvbklkS2V5XTsKLSAgICAgICAgICAgIGlmICghW3Bs
YXliYWNrU2Vzc2lvbklkVmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKG1fc2Vzc2lvbklkID09
IFN0cmluZyhwbGF5YmFja1Nlc3Npb25JZFZhbHVlKSkgewotICAgICAgICAgICAgICAgIExPRyhN
ZWRpYSwgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnJlbGVhc2VLZXlzKCVwKSAtIGZv
dW5kIHNlc3Npb24sIHNlbmRpbmcgZXhwaXJhdGlvbiBtZXNzYWdlIik7Ci0gICAgICAgICAgICAg
ICAgbV9leHBpcmVkU2Vzc2lvbiA9IGV4cGlyZWRTZXNzaW9uRGF0YTsKLSAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+c2VuZE1lc3NhZ2UoVWludDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lv
biBsZW5ndGhdKS5nZXQoKSwgZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGlzRXF1
YWwoVWludDhBcnJheSogZGF0YSwgY29uc3QgY2hhciogbGl0ZXJhbCkKLXsKLSAgICBBU1NFUlQo
ZGF0YSk7Ci0gICAgQVNTRVJUKGxpdGVyYWwpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRhdGEt
Pmxlbmd0aCgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmICghbGl0ZXJhbFtpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoZGF0YS0+aXRlbShpKSAhPSBzdGF0aWNfY2FzdDx1aW50OF90PihsaXRlcmFs
W2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuICFsaXRl
cmFsW2xlbmd0aF07Ci19Ci0KLXN0YXRpYyBOU0ludGVnZXIgc3lzdGVtQ29kZUZvckVycm9yKE5T
RXJyb3IgKmVycm9yKQotewotICAgIE5TSW50ZWdlciBjb2RlID0gW2Vycm9yIGNvZGVdOwotICAg
IGlmIChjb2RlICE9IEFWRXJyb3JVbmtub3duKQotICAgICAgICByZXR1cm4gY29kZTsKLQotICAg
IE5TRXJyb3IqIHVuZGVybHlpbmdFcnJvciA9IFtlcnJvci51c2VySW5mbyB2YWx1ZUZvcktleTpO
U1VuZGVybHlpbmdFcnJvcktleV07Ci0gICAgaWYgKCF1bmRlcmx5aW5nRXJyb3IgfHwgIVt1bmRl
cmx5aW5nRXJyb3IgaXNLaW5kT2ZDbGFzczpbTlNFcnJvciBjbGFzc11dKQotICAgICAgICByZXR1
cm4gY29kZTsKLSAgICAKLSAgICByZXR1cm4gW3VuZGVybHlpbmdFcnJvciBjb2RlXTsKLX0KLQot
Ym9vbCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjp1cGRhdGUoVWludDhBcnJheSoga2V5
LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JD
b2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQotewotICAgIGJvb2wgc2hvdWxkR2VuZXJh
dGVLZXlSZXF1ZXN0ID0gIW1fY2VydGlmaWNhdGUgfHwgaXNFcXVhbChrZXksICJyZW5ldyIpOwot
ICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkgewotICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDOjp1cGRhdGUoJXApIC0gY2VydGlmaWNhdGUgZGF0YSIsIHRoaXMp
OwotCi0gICAgICAgIG1fY2VydGlmaWNhdGUgPSBrZXk7Ci0gICAgfQotCi0gICAgaWYgKGlzRXF1
YWwoa2V5LCAiYWNrbm93bGVkZ2VkIikpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lv
bk1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlKCVwKSAtIGFja25vd2xlZGluZyBzZWN1cmUgc3Rv
cCBtZXNzYWdlIiwgdGhpcyk7Ci0KLSAgICAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9uKSB7Ci0g
ICAgICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0
aCgpXSk7Ci0KLSAgICAgICAgaWYgKFtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlUGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0czp3
aXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pCi0gICAgICAgICAgICBb
Z2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZW1vdmVQZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBv
cnRzOkBbbV9leHBpcmVkU2Vzc2lvbi5nZXQoKV0gd2l0aEFwcElkZW50aWZpZXI6Y2VydGlmaWNh
dGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnN0b3JhZ2VQYXRoKCldXTsKLSAgICAgICAgbV9leHBpcmVkU2Vzc2lvbiA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX21vZGUgPT0gS2V5UmVsZWFz
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDPiBwcm90ZWN0ZWRTb3VyY2VCdWZmZXI7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VC
dWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHNvdXJjZUJ1ZmZlci0+cHJv
dGVjdGVkVHJhY2tJRCgpICE9IC0xKSB7Ci0gICAgICAgICAgICBwcm90ZWN0ZWRTb3VyY2VCdWZm
ZXIgPSBzb3VyY2VCdWZmZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChzaG91bGRHZW5lcmF0ZUtleVJlcXVlc3QpIHsKLSAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0
aCgpXSk7Ci0KLSAgICAgICAgaWYgKG1fc291cmNlQnVmZmVycy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoIXByb3RlY3RlZFNvdXJjZUJ1ZmZlcikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGlu
aXREYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2luaXREYXRh
LT5kYXRhKCkgbGVuZ3RoOm1faW5pdERhdGEtPmxlbmd0aCgpXSk7Ci0KLQotICAgICAgICBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOwotICAgICAgICBpZiAoIW1fcHJvdG9jb2xWZXJz
aW9ucy5pc0VtcHR5KCkgJiYgY2FuTG9hZEFWU3RyZWFtRGF0YVBhcnNlckNvbnRlbnRLZXlSZXF1
ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24gPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdmVyc2lvbiA6IG1fcHJv
dG9jb2xWZXJzaW9ucykgewotICAgICAgICAgICAgICAgIGlmICghdmVyc2lvbikKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgW3Byb3RvY29sVmVyc2lvbnNP
cHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBvcHRpb25zID0gQHsgZ2V0QVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90
b2NvbFZlcnNpb25zS2V5KCk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKLSAgICAg
ICAgfQotCi0gICAgICAgIE5TRXJyb3IqIGVycm9yID0gbmlsOwotICAgICAgICBSZXRhaW5QdHI8
TlNEYXRhPiByZXF1ZXN0ID0gW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkgc3RyZWFt
aW5nQ29udGVudEtleVJlcXVlc3REYXRhRm9yQXBwOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBjb250
ZW50SWRlbnRpZmllcjppbml0RGF0YS5nZXQoKSB0cmFja0lEOnByb3RlY3RlZFNvdXJjZUJ1ZmZl
ci0+cHJvdGVjdGVkVHJhY2tJRCgpIG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBlcnJvcjomZXJyb3Jd
OwotCi0gICAgICAgIGlmICghW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVy
KV0pCi0gICAgICAgICAgICBtX3Nlc3Npb25JZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KTsKLQotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNl
c3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnVwZGF0ZSglcCkgLSBlcnJvcjolQCIsIHRoaXMsIFtl
cnJvciBkZXNjcmlwdGlvbl0pOwotICAgICAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6
OkludmFsaWRQbGF5ZXJTdGF0ZTsKLSAgICAgICAgICAgIHN5c3RlbUNvZGUgPSBzdGQ6OmFicyhz
eXN0ZW1Db2RlRm9yRXJyb3IoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG5leHRNZXNzYWdlID0gVWludDhBcnJheTo6Y3JlYXRlKFtyZXF1
ZXN0IGxlbmd0aF0pOwotICAgICAgICBbcmVxdWVzdCBnZXRCeXRlczpuZXh0TWVzc2FnZS0+ZGF0
YSgpIGxlbmd0aDpuZXh0TWVzc2FnZS0+bGVuZ3RoKCldOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgQVNTRVJUKCFtX3NvdXJjZUJ1ZmZlcnMuaXNFbXB0eSgpKTsKLSAgICBM
T0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjp1cGRhdGUoJXApIC0ga2V5
IGRhdGEiLCB0aGlzKTsKLSAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKLSAg
ICBzeXN0ZW1Db2RlID0gMDsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBsZW5ndGg6a2V5LT5s
ZW5ndGgoKV0pOwotICAgIFtwcm90ZWN0ZWRTb3VyY2VCdWZmZXItPnBhcnNlcigpIHByb2Nlc3ND
b250ZW50S2V5UmVzcG9uc2VEYXRhOmtleURhdGEuZ2V0KCkgZm9yVHJhY2tJRDpwcm90ZWN0ZWRT
b3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKV07Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobV9jZG0pCisgICAgICAgIG1fY2RtLT5pbnZhbGlkYXRlU2Vzc2lvbih0aGlzKTsKIH0K
IAogdm9pZCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpsYXllckRpZFJlY2VpdmVFcnJv
cihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciAqLCBOU0Vycm9yICplcnJvciwgYm9vbCYgc2hv
dWxkSWdub3JlKQpAQCAtMzE1LDI5ICs3MywxNCBAQCB2b2lkIENETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakM6OnJlbmRlcmVyRGlkUmVjZWl2ZUVycm9yKEFWU2FtcGxlQnVmZmVyQXVkaW9SZQog
ICAgICAgICBtX2NsaWVudC0+c2VuZEVycm9yKENETVNlc3Npb25DbGllbnQ6Ok1lZGlhS2V5RXJy
b3JEb21haW4sIGNvZGUpOwogfQogCi12b2lkIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6
OnNldFN0cmVhbVNlc3Npb24oQVZTdHJlYW1TZXNzaW9uICpzdHJlYW1TZXNzaW9uKQotewotICAg
IGlmIChtX3N0cmVhbVNlc3Npb24gJiYgY2FuTG9hZEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90
ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkTm90aWZpY2F0aW9uKCkpCi0gICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9kYXRh
UGFyc2VyT2JzZXJ2ZXIuZ2V0KCkgbmFtZTpnZXRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVj
dGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbigpIG9iamVjdDptX3N0cmVh
bVNlc3Npb24uZ2V0KCldOwotCi0gICAgbV9zdHJlYW1TZXNzaW9uID0gc3RyZWFtU2Vzc2lvbjsK
LQotICAgIGlmICghbV9zdHJlYW1TZXNzaW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
Y2FuTG9hZEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJD
aGFuZ2VkTm90aWZpY2F0aW9uKCkpCi0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9kYXRhUGFyc2VyT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0
b3I6QHNlbGVjdG9yKGNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkOikg
bmFtZTpnZXRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVy
Q2hhbmdlZE5vdGlmaWNhdGlvbigpIG9iamVjdDptX3N0cmVhbVNlc3Npb24uZ2V0KCldOwotCi0g
ICAgTlNEYXRhKiBpZGVudGlmaWVyID0gW3N0cmVhbVNlc3Npb24gY29udGVudFByb3RlY3Rpb25T
ZXNzaW9uSWRlbnRpZmllcl07Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzZXNzaW9uSWRlbnRp
ZmllclN0cmluZyA9IGlkZW50aWZpZXIgPyBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRX
aXRoRGF0YTppZGVudGlmaWVyIGVuY29kaW5nOihOU1VURjhTdHJpbmdFbmNvZGluZyldKSA6IG5p
bDsKLSAgICBzZXRTZXNzaW9uSWQoc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcuZ2V0KCkpOwotfQog
CiB2b2lkIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OmFkZFNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyogc291cmNlQnVmZmVyKQogewogICAgIEFTU0VSVCghbV9z
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKHNvdXJjZUJ1ZmZlcikpOwogICAgIEFTU0VSVChzb3VyY2VC
dWZmZXIpOwogCisgICAgYWRkUGFyc2VyKHNvdXJjZUJ1ZmZlci0+cGFyc2VyKCkpOworCiAgICAg
bV9zb3VyY2VCdWZmZXJzLmFwcGVuZChzb3VyY2VCdWZmZXIpOwogICAgIHNvdXJjZUJ1ZmZlci0+
cmVnaXN0ZXJGb3JFcnJvck5vdGlmaWNhdGlvbnModGhpcyk7CiB9CkBAIC0zNDcsNDcgKzkwLDMw
IEBAIHZvaWQgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6cmVtb3ZlU291cmNlQnVmZmVy
KFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDCiAgICAgQVNTRVJUKG1fc291cmNlQnVmZmVycy5j
b250YWlucyhzb3VyY2VCdWZmZXIpKTsKICAgICBBU1NFUlQoc291cmNlQnVmZmVyKTsKIAotICAg
IGlmIChtX3N0cmVhbVNlc3Npb24pCi0gICAgICAgIFttX3N0cmVhbVNlc3Npb24gcmVtb3ZlU3Ry
ZWFtRGF0YVBhcnNlcjpzb3VyY2VCdWZmZXItPnBhcnNlcigpXTsKKyAgICByZW1vdmVQYXJzZXIo
c291cmNlQnVmZmVyLT5wYXJzZXIoKSk7CiAKICAgICBzb3VyY2VCdWZmZXItPnVucmVnaXN0ZXJG
b3JFcnJvck5vdGlmaWNhdGlvbnModGhpcyk7CiAgICAgbV9zb3VyY2VCdWZmZXJzLnJlbW92ZSht
X3NvdXJjZUJ1ZmZlcnMuZmluZChzb3VyY2VCdWZmZXIpKTsKIH0KIAotU3RyaW5nIENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakM6OnN0b3JhZ2VQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jbGllbnQgPyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jbGllbnQtPm1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnkoKSwgIlNlY3VyZVN0b3AucGxpc3QiKSA6IGVtcHR5U3RyaW5nKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6
Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNp
Z25lZCBsb25nJiBzeXN0ZW1Db2RlKQorbG9uZyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpD
OjpzeXN0ZW1Db2RlRm9yRXJyb3IoTlNFcnJvciAqZXJyb3IpCiB7Ci0gICAgQVNTRVJUKG1fbW9k
ZSA9PSBLZXlSZWxlYXNlKTsKLSAgICBtX2NlcnRpZmljYXRlID0gbV9pbml0RGF0YTsKLSAgICBS
ZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0
ZS0+bGVuZ3RoKCldKTsKLQotICAgIGlmICghW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0
aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOildKSB7Ci0gICAgICAgIGVycm9y
Q29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7Ci0gICAgICAgIHN5c3Rl
bUNvZGUgPSAnIW1vcic7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIE5T
QXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHBlbmRp
bmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEu
Z2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFn
ZVBhdGgoKV1dOwotICAgIGlmICghW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0pIHsKLSAgICAgICAg
TE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6Z2VuZXJhdGVLZXlSZWxl
YXNlTWVzc2FnZSglcCkgLSBubyBleHBpcmVkIHNlc3Npb25zIGZvdW5kIiwgdGhpcyk7CisgICAg
TlNJbnRlZ2VyIGNvZGUgPSBbZXJyb3IgY29kZV07CisgICAgaWYgKGNvZGUgIT0gQVZFcnJvclVu
a25vd24pCisgICAgICAgIHJldHVybiBjb2RlOwogCi0gICAgICAgIGVycm9yQ29kZSA9IE1lZGlh
UGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7Ci0gICAgICAgIHN5c3RlbUNvZGUgPSAnIW1v
cic7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBOU0Vycm9yKiB1bmRlcmx5
aW5nRXJyb3IgPSBbZXJyb3IudXNlckluZm8gdmFsdWVGb3JLZXk6TlNVbmRlcmx5aW5nRXJyb3JL
ZXldOworICAgIGlmICghdW5kZXJseWluZ0Vycm9yIHx8ICFbdW5kZXJseWluZ0Vycm9yIGlzS2lu
ZE9mQ2xhc3M6W05TRXJyb3IgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGNvZGU7CiAKLSAgICBM
T0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpnZW5lcmF0ZUtleVJlbGVh
c2VNZXNzYWdlKCVwKSAtIGZvdW5kICVkIGV4cGlyZWQgc2Vzc2lvbnMiLCB0aGlzLCBbZXhwaXJl
ZFNlc3Npb25zIGNvdW50XSk7CisgICAgcmV0dXJuIFt1bmRlcmx5aW5nRXJyb3IgY29kZV07Cit9
CiAKLSAgICBlcnJvckNvZGUgPSAwOwotICAgIHN5c3RlbUNvZGUgPSAwOwotICAgIG1fZXhwaXJl
ZFNlc3Npb24gPSBbZXhwaXJlZFNlc3Npb25zIGZpcnN0T2JqZWN0XTsKLSAgICByZXR1cm4gVWlu
dDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vz
c2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBsZW5ndGhdKTsKK1N0cmluZyBDRE1TZXNz
aW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpzdG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY2xpZW50ID8gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2xpZW50LT5tZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5KCksICJTZWN1cmVTdG9wLnBsaXN0IikgOiBlbXB0eVN0cmluZygpOwog
fQogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKaW5kZXggNTRjYWM3MTA2
OTVmNDkyZDJlNTIyMGM4YzcyNmNjMTQ2ZTU5N2JhZi4uMGFmM2VhMzVhYWQ0MmJkMDkzYTIwM2Ni
NThiMGYwNmI0YjhiNWY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApAQCAtMjU1LDcgKzI1NSw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oY29uc3QgU3RyaW5n
JiBrZXlTeXN0ZW0pIG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBj
cmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBDRE1TZXNzaW9uQ2xpZW50Kikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgU3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5
QXVkaW9UcmFjaygpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KaW5kZXgg
YWY4YmEyMzU3NGIxZjY0NDU5ZTMyMTRkMmRiOTcyN2YwMzQxM2ZiMi4uOTgwZTQzMWY2ZDJjMTQ2
ZjViYzExYjk3MmVjNjlmNjAzNTdjOGI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCkBAIC0x
NjIsNiArMTYyLDcgQEAgdHlwZWRlZiBBVk1lZGlhU2VsZWN0aW9uT3B0aW9uIEFWTWVkaWFTZWxl
Y3Rpb25PcHRpb25UeXBlOwogI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKIAogU09GVF9M
SU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCisKIFNPRlRfTElOS19GUkFNRVdP
UktfT1BUSU9OQUwoQ29yZUltYWdlKQogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3Jl
VmlkZW8pCiAKQEAgLTI3NjYsMTIgKzI3NjcsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjprZXlBZGRlZCgpCiAgICAgICAgIG1fa2V5VVJJVG9SZXF1ZXN0TWFw
LnJlbW92ZShrZXlJZCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYg
a2V5U3lzdGVtKQorc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVNlc3Npb24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0s
IENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKIHsKICAgICBpZiAoIWtleVN5c3RlbUlzU3VwcG9y
dGVkKGtleVN5c3RlbSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakM+KHRoaXMpOworICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDPih0aGlzLCBj
bGllbnQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKaW5kZXggNTM3MWQ2
NjI3ZWNlMTQzZDU5OGU1NDhhNWZlOTBiMzNiNzNjYTAwZS4uN2ViOTlkYThmYzExYzkyNjMzZjE2
YjhiYzlmMzU3MGZkNjFmZDBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTg2LDYg
Kzg2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3RyZWFtU2Vzc2lvbigpIHsgcmV0dXJuIG1f
c3RyZWFtU2Vzc2lvbjsgfQogICAgIEFWU3RyZWFtU2Vzc2lvbiAqc3RyZWFtU2Vzc2lvbigpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDRE1TZXNzaW9uKENETVNlc3Npb24qKSBvdmVycmlkZTsKKyAg
ICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKiBjZG1TZXNzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zZXNzaW9uOyB9CiAgICAgdm9pZCBrZXlOZWVkZWQoVWludDhBcnJheSopOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQppbmRleCBiYzRjNjk4N2RjNjI2ZDQzN2M5NWE0
NjM4NTNlYzExNDczMmMyMjZlLi4xNTU3MTliNTYxMzEwNDRmMDQzZmVjOTlhMGMzNmZlZGRkNzg2
MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCisjaW1wb3J0ICJD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmgiCiAjaW1wb3J0ICJDRE1TZXNzaW9uTWVkaWFTb3Vy
Y2VBVkZPYmpDLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
CkBAIC03MDMsMTkgKzcwNCwxNSBAQCBBVlN0cmVhbVNlc3Npb24qIE1lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RyZWFtU2Vzc2lvbigpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRDRE1TZXNzaW9uKENETVNlc3Npb24qIHNlc3Np
b24pCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbikgewotICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1
ZmZlciA6IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zb3VyY2VCdWZmZXJzKCkpCi0gICAgICAgICAg
ICBtX3Nlc3Npb24tPnJlbW92ZVNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXIuZ2V0KCkpOwotICAg
ICAgICBtX3Nlc3Npb24gPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAoc2Vzc2lvbiA9PSBtX3Nl
c3Npb24pCisgICAgICAgIHJldHVybjsKIAogICAgIG1fc2Vzc2lvbiA9IHRvQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQyhzZXNzaW9uKTsKIAotICAgIGlmIChtX3Nlc3Npb24pIHsKLSAgICAg
ICAgbV9zZXNzaW9uLT5zZXRTdHJlYW1TZXNzaW9uKG1fc3RyZWFtU2Vzc2lvbi5nZXQoKSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9tZWRpYVNvdXJjZVByaXZhdGUtPnNv
dXJjZUJ1ZmZlcnMoKSkKLSAgICAgICAgICAgIG1fc2Vzc2lvbi0+YWRkU291cmNlQnVmZmVyKHNv
dXJjZUJ1ZmZlci5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChDRE1TZXNzaW9uQVZTdHJlYW1TZXNz
aW9uKiBjZG1TdHJlYW1TZXNzaW9uID0gdG9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKG1fc2Vz
c2lvbikpCisgICAgICAgIGNkbVN0cmVhbVNlc3Npb24tPnNldFN0cmVhbVNlc3Npb24obV9zdHJl
YW1TZXNzaW9uLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fbWVkaWFT
b3VyY2VQcml2YXRlLT5zb3VyY2VCdWZmZXJzKCkpCisgICAgICAgIHNvdXJjZUJ1ZmZlci0+c2V0
Q0RNU2Vzc2lvbihtX3Nlc3Npb24pOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6a2V5TmVlZGVkKFVpbnQ4QXJyYXkqIGluaXREYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgKaW5kZXgg
Nzc3YmEzMDk1OGViMzRkMzIwNjg4Mjc2N2YxNjMxMTRmN2FhNmNiZi4uZjk0OGM4NjY3ZWQxZjg0
ZjQyMjk1NDY0MjI5OTJmZjA3MmRkNDVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCkBAIC0yOSw5ICsyOSwxMSBAQAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbmNsdWRlICJT
b3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CkBAIC01Myw2ICs1NSw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1
ZUNNRm9ybWF0RGVzY3JpcHRpb24gKkNNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzsKIGNsYXNz
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBUaW1lUmFuZ2VzOwogY2xhc3MgQXVk
aW9UcmFja1ByaXZhdGU7CkBAIC04MCw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFBy
b3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGludCB0cmFja0lELCBDTVNhbXBsZUJ1ZmZlclJlZiwg
Y29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHVuc2lnbmVkIGZsYWdzKTsKICAgICB2b2lkIGRpZFJl
YWNoRW5kT2ZUcmFja1dpdGhUcmFja0lEKGludCB0cmFja0lELCBjb25zdCBTdHJpbmcmIG1lZGlh
VHlwZSk7CiAgICAgdm9pZCB3aWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRp
b25EYXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCk7Ci0gICAgdm9pZCBkaWRQcm92aWRlQ29udGVu
dEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKE5TRGF0YSosIGludCB0cmFj
a0lEKTsKKyAgICB2b2lkIGRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9u
RGF0YUZvclRyYWNrSUQoTlNEYXRhKiwgaW50IHRyYWNrSUQsIE9TT2JqZWN0UHRyPGRpc3BhdGNo
X3NlbWFwaG9yZV90Pik7CiAKICAgICBib29sIHByb2Nlc3NDb2RlZEZyYW1lKGludCB0cmFja0lE
LCBDTVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpOwogCkBAIC05Niw2
ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIGludCBwcm90ZWN0ZWRUcmFja0lEKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm90ZWN0ZWRUcmFja0lEOyB9CiAgICAgQVZTdHJlYW1EYXRhUGFyc2VyKiBwYXJz
ZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0Q0RNU2Vz
c2lvbihDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKik7CiAKICAgICB2b2lkIGZsdXNoKCk7
CiAKQEAgLTE0Miw5ICsxNDYsMTEgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPGludCwgUmV0YWlu
UHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcj4+IG1fYXVkaW9SZW5kZXJlcnM7CiAgICAg
UmV0YWluUHRyPFdlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyPiBtX2RlbGVnYXRlOwogICAg
IFJldGFpblB0cjxXZWJBVlNhbXBsZUJ1ZmZlckVycm9yTGlzdGVuZXI+IG1fZXJyb3JMaXN0ZW5l
cjsKKyAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9zZW1hcGhvcmVfdD4gbV9oYXNTZXNzaW9uU2Vt
YXBob3JlOwogCiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQyogbV9tZWRpYVNvdXJjZTsK
ICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDKiBtX3Nlc3Npb24geyBudWxscHRyIH07CiAKICAgICBGbG9hdFNp
emUgbV9jYWNoZWRTaXplOwogICAgIGJvb2wgbV9wYXJzaW5nU3VjY2VlZGVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQppbmRl
eCBlZmZiZDcxNjRhMzJmYjZmNmU1NDU4MmEwYjJmZWY1OGM3MWNlNDU0Li5lNWRmNzVmZTIxOTUy
NTAzYmJiMzllN2EwZWFkYjA3Yjc4NjU2NjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQpAQCAtMjU1LDExICsyNTUsNiBA
QCBTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllckZhaWxlZFRvRGVjb2RlTm90aWZpYwogI2VuZGlmCiAgICAgQVNTRVJUKHN0cmVhbURhdGFQ
YXJzZXIgPT0gX3BhcnNlcik7CiAKLSAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAg
X3BhcmVudC0+d2lsbFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZv
clRyYWNrSUQodHJhY2tJRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBXZSBt
dXN0IGNhbGwgc3luY2hyb25vdXNseSB0byB0aGUgbWFpbiB0aHJlYWQsIGFzIHRoZSBBVlN0cmVh
bVNlc3Npb24gbXVzdCBiZSBhc3NvY2lhdGVkCiAgICAgLy8gd2l0aCB0aGUgc3RyZWFtRGF0YVBh
cnNlciBiZWZvcmUgdGhlIGRlbGVnYXRlIG1ldGhvZCByZXR1cm5zLgogICAgIFJldGFpblB0cjxX
ZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lcj4gc3Ryb25nU2VsZiA9IHNlbGY7CkBAIC0yNzgs
MTAgKzI3MywxMiBAQCBTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllckZhaWxlZFRvRGVjb2RlTm90aWZpYwogICAgIFJldGFpblB0cjxXZWJB
VlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lcj4gc3Ryb25nU2VsZiA9IHNlbGY7CiAKICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBzdHJvbmdEYXRhID0gaW5pdERhdGE7Ci0gICAgY2FsbE9uTWFpblRocmVh
ZChbc3Ryb25nU2VsZiwgc3Ryb25nRGF0YSwgdHJhY2tJRF0geworICAgIE9TT2JqZWN0UHRyPGRp
c3BhdGNoX3NlbWFwaG9yZV90PiBoYXNTZXNzaW9uU2VtYXBob3JlID0gYWRvcHRPU09iamVjdChk
aXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtzdHJv
bmdTZWxmLCBzdHJvbmdEYXRhLCB0cmFja0lELCAgaGFzU2Vzc2lvblNlbWFwaG9yZV0gewogICAg
ICAgICBpZiAoc3Ryb25nU2VsZi0+X3BhcmVudCkKLSAgICAgICAgICAgIHN0cm9uZ1NlbGYtPl9w
YXJlbnQtPmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRy
YWNrSUQoc3Ryb25nRGF0YS5nZXQoKSwgdHJhY2tJRCk7CisgICAgICAgICAgICBzdHJvbmdTZWxm
LT5fcGFyZW50LT5kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFG
b3JUcmFja0lEKHN0cm9uZ0RhdGEuZ2V0KCksIHRyYWNrSUQsIGhhc1Nlc3Npb25TZW1hcGhvcmUp
OwogICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KGhhc1Nlc3Npb25TZW1hcGhv
cmUuZ2V0KCksIERJU1BBVENIX1RJTUVfRk9SRVZFUik7CiB9CiBAZW5kCiAKQEAgLTYxNCw2ICs2
MTEsOSBAQCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDKCkKICAgICBBU1NFUlQoIW1fY2xpZW50KTsKICAgICBkZXN0cm95UGFyc2VyKCk7CiAg
ICAgZGVzdHJveVJlbmRlcmVycygpOworCisgICAgaWYgKG1faGFzU2Vzc2lvblNlbWFwaG9yZSkK
KyAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX2hhc1Nlc3Npb25TZW1hcGhvcmUu
Z2V0KCkpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQYXJzZVN0
cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQpAQCAtNzE5LDE1ICs3MTksMTQgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6d2lsbFByb3ZpZGVDb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUYKICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQzo6d2lsbFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9u
RGF0YUZvclRyYWNrSUQoJXApIC0gdHJhY2s6JWQiLCB0aGlzLCB0cmFja0lEKTsKICAgICBtX3By
b3RlY3RlZFRyYWNrSUQgPSB0cmFja0lEOwogCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIFttX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+c3RyZWFtU2Vzc2lvbigpIGFkZFN0
cmVhbURhdGFQYXJzZXI6bV9wYXJzZXIuZ2V0KCldOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgaWYgKENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMqIHNlc3Npb24gPSBt
X21lZGlhU291cmNlLT5wbGF5ZXIoKS0+Y2RtU2Vzc2lvbigpKQorICAgICAgICBzZXNzaW9uLT5h
ZGRQYXJzZXIobV9wYXJzZXIuZ2V0KCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odHJhY2tJ
RCk7CiAjZW5kaWYKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJv
dmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChOU0RhdGEq
IGluaXREYXRhLCBpbnQgdHJhY2tJRCkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6
OmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQo
TlNEYXRhKiBpbml0RGF0YSwgaW50IHRyYWNrSUQsIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3NlbWFw
aG9yZV90PiBoYXNTZXNzaW9uU2VtYXBob3JlKQogewogICAgIGlmICghbV9tZWRpYVNvdXJjZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDYgKzczOCwxNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjpkaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRh
dGFGbwogICAgIFJlZlB0cjxVaW50OEFycmF5PiBpbml0RGF0YUFycmF5ID0gVWludDhBcnJheTo6
Y3JlYXRlKFtpbml0RGF0YSBsZW5ndGhdKTsKICAgICBbaW5pdERhdGEgZ2V0Qnl0ZXM6aW5pdERh
dGFBcnJheS0+ZGF0YSgpIGxlbmd0aDppbml0RGF0YUFycmF5LT5sZW5ndGgoKV07CiAgICAgbV9t
ZWRpYVNvdXJjZS0+c291cmNlQnVmZmVyS2V5TmVlZGVkKHRoaXMsIGluaXREYXRhQXJyYXkuZ2V0
KCkpOworICAgIGlmIChhdXRvIHNlc3Npb24gPSBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+Y2Rt
U2Vzc2lvbigpKSB7CisgICAgICAgIHNlc3Npb24tPmFkZFBhcnNlcihtX3BhcnNlci5nZXQoKSk7
CisgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwoaGFzU2Vzc2lvblNlbWFwaG9yZS5n
ZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1faGFzU2Vzc2lvblNlbWFwaG9yZSkK
KyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9oYXNTZXNzaW9uU2VtYXBo
b3JlLmdldCgpKTsKKyAgICAgICAgbV9oYXNTZXNzaW9uU2VtYXBob3JlID0gaGFzU2Vzc2lvblNl
bWFwaG9yZTsKKyAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbml0RGF0YSk7CiAjZW5k
aWYKQEAgLTkyMSw2ICs5MjgsMjUgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
dHJhY2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3UKICAgICB9CiB9
CiAKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldENETVNlc3Npb24oQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQyogc2Vzc2lvbikKK3sKKyAgICBpZiAoc2Vzc2lvbiA9PSBt
X3Nlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nlc3Npb24pCisgICAgICAg
IG1fc2Vzc2lvbi0+cmVtb3ZlU291cmNlQnVmZmVyKHRoaXMpOworCisgICAgbV9zZXNzaW9uID0g
c2Vzc2lvbjsKKworICAgIGlmIChtX3Nlc3Npb24pIHsKKyAgICAgICAgbV9zZXNzaW9uLT5hZGRT
b3VyY2VCdWZmZXIodGhpcyk7CisgICAgICAgIGlmIChtX2hhc1Nlc3Npb25TZW1hcGhvcmUpIHsK
KyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWduYWwobV9oYXNTZXNzaW9uU2VtYXBo
b3JlLmdldCgpKTsKKyAgICAgICAgICAgIG1faGFzU2Vzc2lvblNlbWFwaG9yZSA9IG51bGxwdHI7
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6
OmZsdXNoKCkKIHsKICAgICBpZiAobV9kaXNwbGF5TGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FM
YXllckNvY29hLm1tCmluZGV4IDgyMDFlY2ZlYTc2NDYxNmJlZmQyODVjMTY1Mjk0ZTliODE1Nzlm
ZDUuLmY2ODQ5YzM1MzZlMmZlNjNkMzRjZjczMzZhYWY1NGU5NzUzNDM4MzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXll
ckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC02Nyw2ICs2Nyw3IEBACiAjZW5kaWYKIAogU09G
VF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCisKIFNPRlRfTElOS19DTEFT
UyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKaW5kZXggZGYyNTE4ZmViODhlOWM3NGQ4NDQx
ZTZlNDZlYzkyMDVhMDAwOGRlNS4uYjczNGZmZGE1NGVlMTYwMGM2ZTk2OWRmYzRiOWZmNDE1ZWEz
YzQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTW9ja0NETVNlc3Npb24gOiBwdWJsaWMgQ0RNU2Vz
c2lvbiB7CiBwdWJsaWM6Ci0gICAgTW9ja0NETVNlc3Npb24oKTsKKyAgICBNb2NrQ0RNU2Vzc2lv
bihDRE1TZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TW9ja0NETVNlc3Npb24oKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KSBv
dmVycmlkZSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CkBAIC03MSw5ICs3MSw5IEBAIGJvb2wgTW9j
a0NETTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgInZpZGVvL21vY2siKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPENETVNlc3Npb24+IE1vY2tDRE06OmNyZWF0ZVNlc3Npb24oKQorc3RkOjp1bmlx
dWVfcHRyPENETVNlc3Npb24+IE1vY2tDRE06OmNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVu
dCogY2xpZW50KQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1vY2tDRE1TZXNzaW9u
PigpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1vY2tDRE1TZXNzaW9uPihjbGllbnQp
OwogfQogCiBzdGF0aWMgVWludDhBcnJheSogaW5pdERhdGFQcmVmaXgoKQpAQCAtMTA2LDggKzEw
Niw5IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZXNzaW9uSWQoKQogICAgIHJldHVybiBTdHJp
bmc6Om51bWJlcihtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Nlc3Npb25JZCsrKTsKIH0KIAotTW9j
a0NETVNlc3Npb246Ok1vY2tDRE1TZXNzaW9uKCkKLSAgICA6IG1fc2Vzc2lvbklkKGdlbmVyYXRl
U2Vzc2lvbklkKCkpCitNb2NrQ0RNU2Vzc2lvbjo6TW9ja0NETVNlc3Npb24oQ0RNU2Vzc2lvbkNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zZXNzaW9uSWQo
Z2VuZXJhdGVTZXNzaW9uSWQoKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrQ0RNLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uaAppbmRl
eCA3NGYzOGI5NzI3NWY3NmQ4ZDM4MjJkODk3YTU0NWY3MmM4N2EwNjAyLi4yY2Q4MThkZjE5YmYz
ZjBhNjhmZWNjMGVmMjY2MzMzOTNiMTQ5MGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tDRE0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uaApA
QCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+TW9ja0NETSgpIHsgfQogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRl
U2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Np
b24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCopIG92ZXJyaWRlOwogCiBwcm90ZWN0
ZWQ6CiAgICAgQ0RNKiBtX2NkbTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266559</attachid>
            <date>2015-12-03 14:29:05 -0800</date>
            <delta_ts>2015-12-04 14:22:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151221-20151203142841.patch</filename>
            <type>text/plain</type>
            <size>110169</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E0NjZmNzk3YjQ2MDc3
NmU2ODFmODEzN2RjNjFlN2U5NzQwNTY3MC4uY2FlNDAwZWVjZDhjODQ3NjI0ODFmZmQxODVkMGQ3
N2FlZTIwNjA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNS0xMi0wMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBBVkNvbnRlbnRL
ZXlTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTEyMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZG9wdCBhIG5ldyBBUEkgZm9yIG1hbmFnaW5nIGtleSBzdGF0ZSwgQVZDb250ZW50S2V5U2Vz
c2lvbi4gQmVjYXVzZSB0aGlzIG5lY2Vzc2l0YXRlcyBhIGNoYW5nZQorICAgICAgICBpbiBib3Ro
IHRoZSBpbml0aWFsaXphdGlvbiBkYXRhIHJldHVybmVkIGJ5IHRoZSBuZWVka2V5IGV2ZW50LCBh
bmQgcGFzc2VkIGludG8gdGhlIGNyZWF0ZVNlc3Npb24oKQorICAgICAgICBtZXRob2QsIGJ1bXAg
dGhlIHByb3RvY29sIHZlcnNpb24gbnVtYmVyICh0byAzKSwgYW5kIGtlZXAgc3VwcG9ydGluZyB0
aGUgb2xkIGtleSBtYW5hZ2VtZW50IEFQSQorICAgICAgICBmb3IgbGVnYWN5IGNvbnRlbnQuCisK
KyAgICAgICAgVG8gZG8gc28sIG1vdmUgbW9zdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ0RN
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyBpbnRvIGEgbmV3IHN1YmNsYXNzLAorICAgICAgICBD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLCBhbmQgYWRkIGEgbmV3IHN1YmNsYXNzLCBDRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbiwgdG8gc3VwcG9ydCB0aGUKKyAgICAgICAgbmV3IEFQSS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogTW92ZWQgdG8gaW1wbGVt
ZW50YXRpb24gZmlsZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlk
S2V5U3lzdGVtUkUpOiBTdXBwb3J0ICJjb20uYXBwbGUuZnBzLjNfeCIuCisgICAgICAgIChXZWJD
b3JlOjpDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp+Q0RNUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQyk6IEludmFsaWRhdGUgYWxsIG91dHN0YW5kaW5nIHNlc3Npb25zLgorICAgICAgICAo
V2ViQ29yZTo6Q0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3VwcG9ydHNLZXlTeXN0ZW0p
OiBPbmx5IHN1cHBvcnQgImNvbS5hcHBsZS5mcHMuM194IiBpZiB0aGUgQVZDb250ZW50S2V5U2Vz
c2lvbiBjbGFzcyBpcyBhdmFpbGFibGUuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpjcmVhdGVTZXNzaW9uKTogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIENE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uIGlmICJjb20uYXBwbGUuZnBzLjNfeCIgaXMgc3Bl
Y2lmaWVkIGFuZCBBVkNvbnRlbnRLZXlTZXNzaW9uIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6OkNETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmludmFsaWRhdGVTZXNzaW9uKTog
UmVtb3ZlIHNlc3Npb24gZnJvbSB0aGUgbGlzdCBvZiBvdXRzdGFuZGluZyBzZXNzaW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzTUlN
RVR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25N
ZWRpYVNvdXJjZUFWRk9iakMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uOjpoYXNDb250ZW50S2V5U2Vzc2lvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAg
ICAgICAgKFdlYkNvcmU6OnRvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24pOiBTYWZlIGNh
c3RpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RN
U2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW06IEFkZGVkLgorICAgICAgICAoLVtDRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIGluaXRXaXRoUGFyZW50Ol0pOiBTaW1wbGUg
Y29uc3RydWN0b3IuCisgICAgICAgICgtW0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uRGVs
ZWdhdGUgaW52YWxpZGF0ZV0pOiBSZW1vdmUgcmVmZXJlbmNlIHRvIHBhcmVudC4KKyAgICAgICAg
KC1bQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lv
bjp3aWxsUHJvdmlkZUtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEOl0pOiBQ
YXNzIHRvIHBhcmVudC4KKyAgICAgICAgKC1bQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25E
ZWxlZ2F0ZSBjb250ZW50S2V5U2Vzc2lvbjpkaWRQcm92aWRlS2V5UmVxdWVzdEluaXRpYWxpemF0
aW9uRGF0YTpyZXF1ZXN0SGFuZGxpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtDRE1TZXNzaW9u
QVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIGNvbnRlbnRLZXlTZXNzaW9uQ29udGVudFByb3Rl
Y3Rpb25TZXNzaW9uSWRlbnRpZmllckRpZENoYW5nZTpdKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWQ29udGVudEtl
eVNlc3Npb24pOiBDcmVhdGUgdGhlIGRlbGVnYXRlLgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vz
c2lvbkFWQ29udGVudEtleVNlc3Npb246On5DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbik6
IEludmFsaWRhdGUgdGhlIGRlbGVnYXRlIGFuZCByZW1vdmUgYWxsIHBhcnNlcnMuCisgICAgICAg
IChXZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6aXNBdmFpbGFibGUpOiBS
ZXR1cm4gdHJ1ZSBpZiBBVkNvbnRlbnRLZXlTZXNzaW9uIGNsYXNzIGlzIGF2YWlsYWJsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpnZW5lcmF0ZUtl
eVJlcXVlc3QpOiBTdXBwb3J0ICJrZXlyZWxlYXNlIiBtZXNzYWdlLCBzZXR0aW5nIG9mIHRoZSBj
ZXJ0aWZpY2F0ZSwgYW5kIGNyZWF0aW5nIGtleSByZXF1ZXN0IG9iamVjdC4gCisgICAgICAgIChX
ZWJDb3JlOjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6cmVsZWFzZUtleXMpOiBSZXRy
aWV2ZSBrZXlzIGZyb20gc3RvcmFnZSBsb2NhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmlzRXF1
YWwpOiBDb21wYXJlcyBhIFVpbnQ4QXJyYXkgdG8gYSBjaGFyKi4KKyAgICAgICAgKFdlYkNvcmU6
OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUpOiBTdXBwb3J0ICJhY2tub3ds
ZWRnZWQiIG1lc3NhZ2UsICJyZW5ldyIgbWVzc2FnZSwgYW5kIGtleSBhZGRpdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjphZGRQYXJzZXIpOiBB
ZGQgdGhlIHBhcnNlciB0byB0aGUgQVZDb250ZW50S2V5U2Vzc2lvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpyZW1vdmVQYXJzZXIpOiBSZW1vdmUg
cGFyc2VyIGZyb20gc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRlbnRL
ZXlTZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKTogUmV0cmlldmUga2V5IHJlbGVh
c2UgbWVzc2FnZSBmcm9tIEFWQ29udGVudEtleVNlc3Npb24uCisgICAgICAgIChXZWJDb3JlOjpD
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6ZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0
KTogU2ltcGxlIHNldHRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkNvbnRlbnRL
ZXlTZXNzaW9uOjpjb250ZW50S2V5U2Vzc2lvbik6IExhemlseSBjcmVhdGUgdGhlIEFWQ29udGVu
dEtleVNlc3Npb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDOjpDRE1TZXNzaW9uQVZG
b3VuZGF0aW9uT2JqQyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDLmguCisgICAgICAgIChXZWJDb3JlOjp0b0NETVNlc3Npb25BVlN0cmVhbVNl
c3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakMubW0uCisgICAgICAgICgtW0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlciBp
bml0V2l0aFBhcmVudDpdKTogTW92ZWQgZnJvbSBBVlNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMu
CisgICAgICAgICgtW0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlciBjb250ZW50UHJv
dGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZDpdKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp+
Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RN
U2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZXF1ZXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpyZWxlYXNlS2V5cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNFcXVhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBkYXRlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpzZXRTdHJlYW1TZXNzaW9uKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjphZGRQYXJz
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246
OnJlbW92ZVBhcnNlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbjo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akM6OmludmFsaWRhdGVDRE0pOiBDbGVhciB0aGUgbV9jZG0uCisgICAgICAgIChXZWJDb3JlOjp0
b0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakM6On5DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKTogSW5zdHJ1Y3Qgb3Vy
IENETSB0byBpbnZhbGlkYXRlIHRoZWlyIHJlZmVyZW5jZXMgdG8gdXMuCisgICAgICAgIChXZWJD
b3JlOjpDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjphZGRTb3VyY2VCdWZmZXIpOiBDYWxs
IGFkZFBhcnNlcigpLgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQzo6cmVtb3ZlU291cmNlQnVmZmVyKTogQ2FsbCByZW1vdmVQYXJzZXIoKS4KKyAgICAgICAg
KFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OmxheWVyRGlkUmVjZWl2ZUVy
cm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFW
Rk9iakM6OnJlbmRlcmVyRGlkUmVjZWl2ZUVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgCisgICAg
ICAgIFRvIGdpdmUgdXMgYSBjaGFuY2UgdG8gY3JlYXRlIGEgQ0RNUHJpdmF0ZSBiZWZvcmUgd2Ug
Y29udGludWUgZGVjb2RpbmcgbWVkaWEgZGF0YSwgImJsb2NrIiBmdXJ0aGVyIGRlY29kaW5nCisg
ICAgICAgIG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBieSBjcmVhdGluZyBhIHNlbWFwaG9yZSBh
bmQgcGFzc2luZyBpdCB0byB0aGUgbWFpbiB0aHJlYWQsIHRvIGJlIHRyaWdnZXJlZCB3aGVuCisg
ICAgICAgIGEgQ0RNIGlzIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoaXMgc291cmNlIGJ1ZmZl
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgICgt
W1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQYXJzZXI6ZGlkUHJvdmlk
ZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRyYWNrSUQ6XSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6flNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZP
YmpDOjp3aWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJh
Y2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0Q0RNU2Vzc2lv
bik6CisgICAgICAgICgtW1dlYkFWU3RyZWFtRGF0YVBhcnNlckxpc3RlbmVyIHN0cmVhbURhdGFQ
YXJzZXJXaWxsUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOmZvclRy
YWNrSUQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUxheWVyQ29jb2EubW06CisKKyAgICAgICAgRHJpdmUtYnkgZml4OiBPbmx5IHRo
cm93IGFuIGVycm9yIGZyb20ga2V5UmVxdWVzdFRpbWVyRmlyZWQoKSBpZiB0aGUgdW5kZXJseWlu
ZyBjYWxsIHRvCisgICAgICAgIGdlbmVyYXRlS2V5UmVxdWVzdCgpIHJldHVybmVkIGFuIGVycm9y
LCByYXRoZXIgdGhhbiBqdXN0IGZhaWxlZCB0byBjcmVhdGUgYSBtZXNzYWdlLgorCisgICAgICAg
ICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFLZXlTZXNzaW9uOjprZXlSZXF1ZXN0VGltZXJGaXJlZCk6CisKKyAgICAg
ICAgRHJpdmUtYnkgZml4OiBQYXNzIHRoZSBDRE1TZXNzaW9uQ2xpZW50IGludG8gQ0RNOjpjcmVh
dGVTZXNzaW9uKCkgc28gdGhhdCBpdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUKKyAgICAgICAg
aW4gdGhlIENETVNlc3Npb25Qcml2YXRlIGNvbnN0cnVjdG9yLCByYXRoZXIgdGhhbiBzZXR0aW5n
IHRoZSBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgY29uc3RydWN0aW9uLgorCisgICAgICAgICog
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNOjpj
cmVhdGVTZXNzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5oOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZS5oOgorICAgICAgICAq
IE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNsZWFyS2V5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNETVByaXZhdGVDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgICog
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlQ2xlYXJLZXkuaDoKKyAgICAgICAgKiBN
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcml2YXRlTWVkaWFQbGF5ZXI6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxheWVyLmg6CisgICAg
ICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkNsZWFyS2V5OjpDRE1TZXNzaW9uQ2xlYXJLZXkpOgor
ICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5Lmg6Cisg
ICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFLZXlTZXNzaW9uOjpNZWRpYUtleVNlc3Npb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NETVNlc3Npb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6Y3JlYXRlU2Vzc2lv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpjcmVhdGVTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2RtU2Vzc2lv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRDRE1TZXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6a2V5TmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TW9ja0NETTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
Q0RNU2Vzc2lvbjo6TW9ja0NETVNlc3Npb24pOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETS5o
OgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIHByb2plY3Q6CisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKwogMjAxNS0xMi0wMSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE5Mjg5NCBhbmQgcjE5MjkwNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZW5jcnlwdGVkbWVkaWEvQ0RNLmNwcAppbmRleCBkNjNhNGY0ZTA4NzdjNDIyYzQ3OGQ5Mzgz
ZDVhOGNlZTkxYjIwYzQzLi4wMmI4OTdiNTA5ODEzMTdlNDg5MTczNzliNDU1YjE3NDA2YTM2N2E2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uY3BwCkBA
IC0xMzIsOSArMTMyLDkgQEAgYm9vbCBDRE06OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBwb3J0c01JTUVUeXBl
KG1pbWVUeXBlKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IENETTo6Y3JlYXRl
U2Vzc2lvbigpCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNOjpjcmVhdGVTZXNzaW9u
KENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vz
c2lvbj4gc2Vzc2lvbiA9IG1fcHJpdmF0ZS0+Y3JlYXRlU2Vzc2lvbigpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDRE1TZXNzaW9uPiBzZXNzaW9uID0gbV9wcml2YXRlLT5jcmVhdGVTZXNzaW9uKGNs
aWVudCk7CiAgICAgaWYgKG1lZGlhUGxheWVyKCkpCiAgICAgICAgIG1lZGlhUGxheWVyKCktPnNl
dENETVNlc3Npb24oc2Vzc2lvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHNlc3Npb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE0uaAppbmRleCA1YWVjZmM5ZjZjNWQy
YWQ0ZWYxODdhNGIyNjkzMDMwZTA2OTZjM2U3Li45YmZkMWJjMjU3MDVmZmY1NmQyM2FlZDdkMTBl
MzQzZGE5YzAwNjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL0NETS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
Q0RNLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIH5DRE0oKTsKIAogICAgIGJvb2wg
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRE1T
ZXNzaW9uPiBjcmVhdGVTZXNzaW9uKENETVNlc3Npb25DbGllbnQqKTsKIAogICAgIGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKCkgY29uc3QgeyByZXR1cm4gbV9rZXlTeXN0ZW07IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaAppbmRl
eCA0NmJkNzhkOTNiMjRjMDYyZTVjNTRkMzZkZjE2NzBkYzEzNGI4ZjFlLi40M2RmM2NiYjhkZjBm
NDc2Y2M4NzU4ZmI5YWZmYTllYWJmZTkzM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDRE1TZXNzaW9uOworY2xhc3MgQ0RNU2Vzc2lvbkNs
aWVudDsKIAogY2xhc3MgQ0RNUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC00MSw3ICs0
Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0
IFN0cmluZyYpID0gMDsKIAotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oKSA9IDA7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vz
c2lvbj4gY3JlYXRlU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50KikgPSAwOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRl
Q2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cml2YXRlQ2xlYXJLZXkuY3BwCmluZGV4IGQ2MTdhZDNhNDNjMzM2MzIwY2VhODY0NTczMWIxNjYx
NTczMGE1NWUuLjhhMzZmM2IxYWRjNmVkNTg0ODNmYTg1MGFiZGE0NTMzNTI4NjAwOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZUNs
ZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NE
TVByaXZhdGVDbGVhcktleS5jcHAKQEAgLTU5LDkgKzU5LDkgQEAgYm9vbCBDRE1Qcml2YXRlQ2xl
YXJLZXk6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKICAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OnN1cHBvcnRzS2V5U3lzdGVtKG1fY2RtLT5rZXlTeXN0ZW0oKSwgbWlt
ZVR5cGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZUNsZWFy
S2V5OjpjcmVhdGVTZXNzaW9uKCkKK3N0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBDRE1Qcml2
YXRlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQogewot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENETVNlc3Npb25DbGVhcktleT4oKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9uQ2xlYXJLZXk+KGNsaWVudCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RN
UHJpdmF0ZUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0NETVByaXZhdGVDbGVhcktleS5oCmluZGV4IGQ1M2I0OWNkYjRhZTY3OGZkMjVkYWNiNzczODE2
YTJkM2JmYzdjYzYuLmVmZDFmYTJjNDE0MmVhMDY2MzJmMDBkODJlYjQ5MzIwYWM0MTRlOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0
ZUNsZWFyS2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcml2YXRlQ2xlYXJLZXkuaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW1BbmRNaW1lVHlwZShjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbihDRE1TZXNz
aW9uQ2xpZW50Kikgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICBDRE0qIG1fY2RtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRl
TWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDEyNzFhN2EyNmFjZjM1YzBhYmUwZjJhZGRm
OGQzNDMxNzllODc1NWMuLmYyOWViNDg5ZmRkNjMwNzYxZjIxNTNhNGY5YzM0NmQ1ODUwMmZhMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJp
dmF0ZU1lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5jcHAKQEAgLTU1LDEzICs1NSwxMyBAQCBib29s
IENETVByaXZhdGVNZWRpYVBsYXllcjo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQogICAgIHJldHVybiBNZWRpYVBsYXllcjo6c3VwcG9ydHNLZXlTeXN0ZW0obV9jZG0t
PmtleVN5c3RlbSgpLCBtaW1lVHlwZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9u
PiBDRE1Qcml2YXRlTWVkaWFQbGF5ZXI6OmNyZWF0ZVNlc3Npb24oKQorc3RkOjp1bmlxdWVfcHRy
PENETVNlc3Npb24+IENETVByaXZhdGVNZWRpYVBsYXllcjo6Y3JlYXRlU2Vzc2lvbihDRE1TZXNz
aW9uQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyID0gbV9j
ZG0tPm1lZGlhUGxheWVyKCk7CiAgICAgaWYgKCFtZWRpYVBsYXllcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gbWVkaWFQbGF5ZXItPmNyZWF0ZVNlc3Npb24obV9jZG0t
PmtleVN5c3RlbSgpKTsKKyAgICByZXR1cm4gbWVkaWFQbGF5ZXItPmNyZWF0ZVNlc3Npb24obV9j
ZG0tPmtleVN5c3RlbSgpLCBjbGllbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlTWVkaWFQbGF5ZXIu
aAppbmRleCBlYjU4NTEwMTkxMzhlY2VhNTk5OTI3M2NkNzg1YmYyODg5NTQxMjA5Li5hM2M2NTMx
ZDhiZjVkZDBmOWExYzlhYzEzYWZkZTRlMmY1ZGY2MzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGVNZWRpYVBsYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZU1lZGlhUGxh
eWVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNETVByaXZhdGVN
ZWRpYVBsYXllcigpIHsgfQogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3Rk
Ojp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCop
IG92ZXJyaWRlOwogCiAgICAgQ0RNKiBjZG0oKSBjb25zdCB7IHJldHVybiBtX2NkbTsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Np
b25DbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NE
TVNlc3Npb25DbGVhcktleS5jcHAKaW5kZXggOGMxMmJkMmI3ZWZhYTUxMWE3ODM0NzM0ZTRhODZh
MGE4ZWUzNmRlZC4uMWMyOTY0NDNhN2UyOWNkMmZkYTIwNjM3Yzk1NGQwNzBlMWY3ZWFmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9u
Q2xlYXJLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcApAQCAtNTksOCArNTksOSBAQCBzdGF0aWMgVk0mIGNsZWFy
S2V5Vk0oKQogICAgIHJldHVybiAqdm0uZ2V0KCk7CiB9CiAKLUNETVNlc3Npb25DbGVhcktleTo6
Q0RNU2Vzc2lvbkNsZWFyS2V5KCkKLSAgICA6IG1fc2Vzc2lvbklkKGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSkKK0NETVNlc3Npb25DbGVhcktleTo6Q0RNU2Vzc2lvbkNsZWFyS2V5KENETVNl
c3Npb25DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2Vz
c2lvbklkKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXku
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFy
S2V5LmgKaW5kZXggYTkzMWQzNmViYmQzMjI0YTJjM2Y0OTY1YzNmY2ZjMjU3NjA4ZWMzNS4uZTUw
OWZiNmE2N2FmZGUyNzJhZDA5Nzk1Zjg2MWFhMjk2M2Q3OGNjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktl
eS5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0RNU2Vz
c2lvbkNsZWFyS2V5IDogcHVibGljIENETVNlc3Npb24gewogcHVibGljOgotICAgIENETVNlc3Np
b25DbGVhcktleSgpOworICAgIENETVNlc3Npb25DbGVhcktleShDRE1TZXNzaW9uQ2xpZW50Kik7
CiAgICAgdmlydHVhbCB+Q0RNU2Vzc2lvbkNsZWFyS2V5KCk7CiAKICAgICAvLyBDRE1TZXNzaW9u
UHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRp
YS9NZWRpYUtleVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRt
ZWRpYS9NZWRpYUtleVNlc3Npb24uY3BwCmluZGV4IGIyMTgxMDRiZDdhNWU2YzYwYWZhYjE3NDI1
OTc3NzQ3N2M4NTA0YTQuLmJmMTYyZGVjNzA4YmFlM2I4OGM4ODU4NWNhYWEyYWU1YTJhNjYxNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvTWVkaWFL
ZXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U2Vzc2lvbi5jcHAKQEAgLTUyLDExICs1MiwxMCBAQCBNZWRpYUtleVNlc3Npb246
Ok1lZGlhS2V5U2Vzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNZWRpYUtl
eXMqIGtleQogICAgICwgbV9rZXlzKGtleXMpCiAgICAgLCBtX2tleVN5c3RlbShrZXlTeXN0ZW0p
CiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1ZSgqdGhpcykKLSAgICAsIG1fc2Vzc2lvbihrZXlzLT5j
ZG0oKS0+Y3JlYXRlU2Vzc2lvbigpKQorICAgICwgbV9zZXNzaW9uKGtleXMtPmNkbSgpLT5jcmVh
dGVTZXNzaW9uKHRoaXMpKQogICAgICwgbV9rZXlSZXF1ZXN0VGltZXIoKnRoaXMsICZNZWRpYUtl
eVNlc3Npb246OmtleVJlcXVlc3RUaW1lckZpcmVkKQogICAgICwgbV9hZGRLZXlUaW1lcigqdGhp
cywgJk1lZGlhS2V5U2Vzc2lvbjo6YWRkS2V5VGltZXJGaXJlZCkKIHsKLSAgICBtX3Nlc3Npb24t
PnNldENsaWVudCh0aGlzKTsKIH0KIAogTWVkaWFLZXlTZXNzaW9uOjp+TWVkaWFLZXlTZXNzaW9u
KCkKQEAgLTExOSw3ICsxMTgsNyBAQCB2b2lkIE1lZGlhS2V5U2Vzc2lvbjo6a2V5UmVxdWVzdFRp
bWVyRmlyZWQoKQogICAgICAgICBSZWZQdHI8VWludDhBcnJheT4ga2V5UmVxdWVzdCA9IG1fc2Vz
c2lvbi0+Z2VuZXJhdGVLZXlSZXF1ZXN0KHJlcXVlc3QubWltZVR5cGUsIHJlcXVlc3QuaW5pdERh
dGEuZ2V0KCksIGRlc3RpbmF0aW9uVVJMLCBlcnJvckNvZGUsIHN5c3RlbUNvZGUpOwogCiAgICAg
ICAgIC8vIE90aGVyd2lzZSBbaWYgYSByZXF1ZXN0IGlzIG5vdCBzdWNjZXNzZnVsbHkgZ2VuZXJh
dGVkXToKLSAgICAgICAgaWYgKCFrZXlSZXF1ZXN0KSB7CisgICAgICAgIGlmIChlcnJvckNvZGUp
IHsKICAgICAgICAgICAgIC8vIDMuMS4gQ3JlYXRlIGEgbmV3IE1lZGlhS2V5RXJyb3Igb2JqZWN0
IHdpdGggdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgogICAgICAgICAgICAgLy8gICAgICBjb2Rl
ID0gdGhlIGFwcHJvcHJpYXRlIE1lZGlhS2V5RXJyb3IgY29kZQogICAgICAgICAgICAgLy8gICAg
ICBzeXN0ZW1Db2RlID0gYSBLZXkgU3lzdGVtLXNwZWNpZmljIHZhbHVlLCBpZiBwcm92aWRlZCwg
YW5kIDAgb3RoZXJ3aXNlCkBAIC0xMzQsNyArMTMzLDggQEAgdm9pZCBNZWRpYUtleVNlc3Npb246
OmtleVJlcXVlc3RUaW1lckZpcmVkKCkKICAgICAgICAgLy8gICAgVGhlIGV2ZW50IGlzIG9mIHR5
cGUgTWVkaWFLZXlNZXNzYWdlRXZlbnQgYW5kIGhhczoKICAgICAgICAgLy8gICAgbWVzc2FnZSA9
IGtleSByZXF1ZXN0CiAgICAgICAgIC8vICAgIGRlc3RpbmF0aW9uVVJMID0gZGVzdGluYXRpb25V
UkwKLSAgICAgICAgc2VuZE1lc3NhZ2Uoa2V5UmVxdWVzdC5nZXQoKSwgZGVzdGluYXRpb25VUkwp
OworICAgICAgICBpZiAoa2V5UmVxdWVzdCkKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlKGtleVJl
cXVlc3QuZ2V0KCksIGRlc3RpbmF0aW9uVVJMKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MjE5MjgxZjk2
MDUyNGZhYjhhMTdkZjE4YTU0N2UxZGY4MGNjOGFiLi42ZDE1ZGJlM2YyNmZjMjUzMWFiNTM0MzZj
MjNmM2EwNmQ4ZTliYmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDY4LDEwICs2MDY4LDEzIEBACiAJCUNEREMxRTdBMThB
OTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREMxRTc5MThBOTUyRjMwMDI3QTlE
NCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCAqLzsgfTsKIAkJQ0RERDU3MTUxOEI1N0E4
MjAwQTk0RkNCIC8qIENETVNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEREUwMkU5MThCM0RGQzcwMENGN0ZGMSAvKiBDRE1TZXNzaW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RERTAy
RUQxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RERTAyRUIxOEIzRUQ2
RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tICovOyB9OwotCQlDRERF
MDJGMDE4QjU2NTEzMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkVGMThC
NTY1MTIwMENGN0ZGMSAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9Owor
CQlDRERFMDJGMDE4QjU2NTEzMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREUwMkVG
MThCNTY1MTIwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tICovOyB9Owog
CQlDREUzQTg1NDE3RjVGQ0U2MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTNBODUyMTdGNUZD
RTYwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRi5oICovOyB9OwogCQlDREUzQTg1NzE3
RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFM0E4NTUxN0Y2MDIwNDAwQzVC
RTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKIAkJQ0RFM0E4NTgxN0Y2
MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFM0E4NTYxN0Y2MDIwNDAwQzVCRTIw
IC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5oICovOyB9OworCQlDREU1OTU5NTFCRjE2REYz
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU1OTU5MzFCRjE2NkFEMDBBMUNC
RTggLyogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gKi87IH07CisJCUNERTU5NTk3
MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU1OTU5NjFCRjI2RTIx
MDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oICovOyB9OworCQlDREU1
OTU5RDFCRjI3NTcxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERTU5NTlDMUJG
Mjc1NzEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovOyB9Owog
CQlDREU3RkM0NDE4MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU3RkM0MjE4MTkwNEIxMDAy
QkJCNzcgLyogT3JkZXJJdGVyYXRvci5jcHAgKi87IH07CiAJCUNERTdGQzQ1MTgxOTA0QjEwMDJC
QkI3NyAvKiBPcmRlckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREU3RkM0MzE4MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNERTgz
REIxMTgzQzQ0MDYwMDMxRUFBMyAvKiBWaWRlb1BsYXliYWNrUXVhbGl0eS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREU4M0RBRjE4M0M0NDA2MDAz
MUVBQTMgLyogVmlkZW9QbGF5YmFja1F1YWxpdHkuY3BwICovOyB9OwpAQCAtMTM5NTQsMTEgKzEz
OTU3LDE1IEBACiAJCUNEREUwMkU5MThCM0RGQzcwMENGN0ZGMSAvKiBDRE1TZXNzaW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENETVNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RERTAyRUExOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25BVkZvdW5kYXRpb25P
YmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEREUwMkVCMThCM0VENkQwMENG
N0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRERFMDJFRTE4QjU2NEZBMDBDRjdGRjEgLyogQ0RN
U2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEREUwMkVG
MThCNTY1MTIwMENGN0ZGMSAvKiBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RERTAyRUUxOEI1NjRG
QTAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRERFMDJFRjE4QjU2NTEyMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENETVNlc3Npb25BVlN0
cmVhbVNlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERTNBODUyMTdG
NUZDRTYwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJpdmF0ZUFWRi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZUFWRi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDREUzQTg1NTE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZh
dGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVk
aW9UcmFja1ByaXZhdGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REUzQTg1NjE3RjYwMjA0MDBDNUJFMjAgLyogQXVkaW9UcmFja1ByaXZhdGVBVkZPYmpDLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREU1OTU5MzFCRjE2NkFEMDBBMUNCRTgg
LyogQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RFNTk1OTQxQkYxNjZEMTAwQTFDQkU4IC8qIENE
TVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNERTU5NTk2MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RF
NTk1OUMxQkYyNzU3MTAwQTFDQkU4IC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREU2NTYwRTE3
Q0E2RTc2MDA1MjZCQTcgLyogbWVkaWFDb250cm9sc0FwcGxlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gbWVkaWFDb250cm9sc0FwcGxlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREU3RkM0MjE4MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmRlckl0ZXJhdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFN0ZDNDMxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRl
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3JkZXJJdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4ODksMTAgKzIyODk2LDE0IEBACiAJ
CQkJQ0RFM0E4NTUxN0Y2MDIwNDAwQzVCRTIwIC8qIEF1ZGlvVHJhY2tQcml2YXRlQVZGT2JqQy5t
bSAqLywKIAkJCQlDRDU0QTc2MDE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuY3BwICovLAogCQkJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAv
KiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovLAorCQkJCUNERTU5NTk0
MUJGMTY2RDEwMEExQ0JFOCAvKiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oICovLAor
CQkJCUNERTU5NTkzMUJGMTY2QUQwMEExQ0JFOCAvKiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbi5tbSAqLywKIAkJCQlDRERFMDJFQTE4QjNFRDZEMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFW
Rm91bmRhdGlvbk9iakMuaCAqLywKIAkJCQlDRERFMDJFQjE4QjNFRDZEMDBDRjdGRjEgLyogQ0RN
U2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0gKi8sCi0JCQkJQ0RERTAyRUUxOEI1NjRGQTAwQ0Y3
RkYxIC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaCAqLywKLQkJCQlDRERFMDJFRjE4
QjU2NTEyMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbSAqLywKKwkJ
CQlDRERFMDJFRTE4QjU2NEZBMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5o
ICovLAorCQkJCUNEREUwMkVGMThCNTY1MTIwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZTdHJlYW1T
ZXNzaW9uLm1tICovLAorCQkJCUNERTU5NTk2MUJGMjZFMjEwMEExQ0JFOCAvKiBDRE1TZXNzaW9u
TWVkaWFTb3VyY2VBVkZPYmpDLmggKi8sCisJCQkJQ0RFNTk1OUMxQkYyNzU3MTAwQTFDQkU4IC8q
IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gKi8sCiAJCQkJMDdBQTZCNjkxNjZEMDE5
NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLmggKi8sCiAJCQkJMDdB
QTZCNkExNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLm1t
ICovLAogCQkJCTA3MzY3REREMTcyQ0E2N0YwMEQ4NjFCOSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlTGVnYWN5QVZGT2JqQy5oICovLApAQCAtMjgwMDgsNiArMjgwMTksNyBAQAogCQkJCUZEMzE2
MEFGMTJCMDI2RjcwMEMxQTM1OSAvKiBWZWN0b3JNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0EyNTcxNTEyOTNDMDEwMDA3QTI2M0QgLyogVmVydGljYWxQb3NpdGlvbkNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREU4M0RCMjE4M0M0NDA2MDAzMUVBQTMgLyogVmlkZW9QbGF5YmFja1F1
YWxpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUNERTU5NTk3MUJGMjZFMjEwMEExQ0JFOCAvKiBD
RE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTg4RTBE
RjE3MTVEMkEyMDA2NThEOTggLyogVmlkZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4
OEUwRTIxNzE1RDJBMjAwNjU4RDk4IC8qIFZpZGVvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRDhCNUE0NjE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFja01lZGlhU291cmNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI4NzIwLDcgKzI4NzMyLDcgQEAKIAkJCQlDRDMxODYyMjE5OUYx
RTJBMDAzMEEwRjcgLyogQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEREUwMkVEMThCM0VENkQwMENGN0ZGMSAvKiBDRE1TZXNzaW9uQVZGb3VuZGF0
aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERThCNUYwMUE2OTc3OEIwMEI0QjY2QSAv
KiBDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RERTAyRjAxOEI1
NjUxMzAwQ0Y3RkYxIC8qIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gaW4gU291cmNl
cyAqLywKKwkJCQlDRERFMDJGMDE4QjU2NTEzMDBDRjdGRjEgLyogQ0RNU2Vzc2lvbkFWU3RyZWFt
U2Vzc2lvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVGMkRCQkU5MTc4RTNDODEwMDE0MTQ4NiAv
KiBDZXJ0aWZpY2F0ZUluZm9NYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUE4RTU2NjE3NTUy
QjJBMDA3NDg4RTcgLyogQ0ZVUkxFeHRyYXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzY5
REMxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjkwNjIsNiArMjkwNzQsNyBAQAogCQkJCTg1REYyRUVFMEFBMzg3Q0IwMEFENjRD
NSAvKiBET01IVE1MRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QzA1MEJCMEFEODRG
NUUwMDU1MzJFNyAvKiBET01IVE1MRW1iZWRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODVCQTRDRTAwQUE2ODYxQjAwODgwNTJEIC8qIERPTUhUTUxGaWVsZFNldEVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKKwkJCQlDREU1OTU5RDFCRjI3NTcxMDBBMUNCRTggLyogQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RUNCRUYwMEFBNzYyNjkw
MDU0NEYwQiAvKiBET01IVE1MRm9udEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURG
MkM1RDBBQTM0MUY2MDBBRDY0QzUgLyogRE9NSFRNTEZvcm1FbGVtZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODVERjgxOTYwQUE3N0U0QjAwNDg2QUQ3IC8qIERPTUhUTUxGcmFtZUVsZW1lbnQu
bW0gaW4gU291cmNlcyAqLywKQEAgLTI5MTU1LDYgKzI5MTY4LDcgQEAKIAkJCQlDRDlERTE4MTE3
QUFENkE0MDBFQTM4NkQgLyogRE9NVVJMTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTVGQ0M5RkMxQjRERjdGMjAwRTcyMzI2IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMUEzN0JGMDk3QzcxNUYwMDE5RjNEOCAvKiBET01VdGlsaXR5Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0RFNTk1OTUxQkYxNkRGMzAwQTFDQkU4IC8qIENETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTVDNzcwQTUxMDBE
NDFDRDAwNUJBMjY3IC8qIERPTVZhbGlkaXR5U3RhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
MUMwRkY0QTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnQubW0gaW4g
U291cmNlcyAqLywKIAkJCQkzMTA2MDM3QTE0MzI4MUNEMDBBQkY0QkEgLyogRE9NV2ViS2l0Q1NT
RmlsdGVyVmFsdWUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NETVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NETVNlc3Npb24uaAppbmRleCBkMzBiZmUzMDM1ZTM2MTFlNzY2YjA2MmZmNzY0
Y2VlOGQ0ZmZhMWRjLi40NTUxNDA1MmE5MGJlODMwNjE0NzE3Yzc5YjEyZDYxN2I3NGJiMzkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DRE1TZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ0RNU2Vzc2lvbi5oCkBAIC01
OCw3ICs1OCw4IEBAIGVudW0gQ0RNU2Vzc2lvblR5cGUgewogICAgIENETVNlc3Npb25UeXBlVW5r
bm93biwKICAgICBDRE1TZXNzaW9uVHlwZUNsZWFyS2V5LAogICAgIENETVNlc3Npb25UeXBlQVZG
b3VuZGF0aW9uT2JqQywKLSAgICBDRE1TZXNzaW9uVHlwZU1lZGlhU291cmNlQVZGT2JqQywKKyAg
ICBDRE1TZXNzaW9uVHlwZUFWU3RyZWFtU2Vzc2lvbiwKKyAgICBDRE1TZXNzaW9uVHlwZUFWQ29u
dGVudEtleVNlc3Npb24sCiB9OwogCiBjbGFzcyBDRE1TZXNzaW9uIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBhNzllODkxM2Fl
ODViNDFlMmNiMzQxNGFjZWMyZTliOWZhZjEyMDAyLi41MGNlYTMzNGU5YTI1NzY3MDk3MTJlYWYy
N2E2NDkzMjQxMzI5Mzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC01MzIsOSArNTMyLDkgQEAgTWVkaWFQbGF5ZXI6Ok1lZGlh
S2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyOjpjYW5jZWxLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
a2V5U3kKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKLXN0ZDo6dW5p
cXVlX3B0cjxDRE1TZXNzaW9uPiBNZWRpYVBsYXllcjo6Y3JlYXRlU2Vzc2lvbihjb25zdCBTdHJp
bmcmIGtleVN5c3RlbSkKK3N0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBNZWRpYVBsYXllcjo6
Y3JlYXRlU2Vzc2lvbihjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgQ0RNU2Vzc2lvbkNsaWVudCog
Y2xpZW50KQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNyZWF0ZVNlc3Npb24oa2V5U3lzdGVt
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVTZXNzaW9uKGtleVN5c3RlbSwgY2xpZW50
KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllcjo6c2V0Q0RNU2Vzc2lvbihDRE1TZXNzaW9uKiBzZXNz
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgK
aW5kZXggMDkzNjQxZmE4ZjYyZThjZTExYjM5ZDY0ZTIwOThhNGQ0ZTJhYzFjZS4uMzQ1Nzc1YjNl
OGI5ZmYxMTAxOWE1MzljZTAwZDFmZDg2YTJmNjcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC0xMTYsNiArMTE2LDcgQEAgc3RydWN0
IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMgewogCiBleHRlcm4gY29uc3QgUGxhdGZvcm1N
ZWRpYSBOb1BsYXRmb3JtTWVkaWE7CiAKK2NsYXNzIENETVNlc3Npb25DbGllbnQ7CiBjbGFzcyBD
YWNoZWRSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIENvbnRlbnRUeXBlOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwpAQCAtMzU5LDcgKzM2MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQV9WMikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3Jl
YXRlU2Vzc2lvbihjb25zdCBTdHJpbmcmIGtleVN5c3RlbSk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIENETVNl
c3Npb25DbGllbnQqKTsKICAgICB2b2lkIHNldENETVNlc3Npb24oQ0RNU2Vzc2lvbiopOwogICAg
IHZvaWQga2V5QWRkZWQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCBiOWZkMGU0Y2EwNjBlNGIw
NWYxYzA3YTE4NjIxN2VjMWU3NDA3MGE0Li4xZjcwZmYwYTAyNzA4ZjQ5YjhiZjZkOGZiNmIzZDQ5
NTZkZTIxODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAtMjMwLDcgKzIzMCw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKLSAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYpIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVh
dGVTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENETVNlc3Npb25DbGllbnQqKSB7IHJldHVybiBudWxs
cHRyOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENETVNlc3Npb24oQ0RNU2Vzc2lvbiopIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBrZXlBZGRlZCgpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAppbmRleCA3YTgyYjdhY2VkMGM0
MGY2NGJlNjNmNmYyZGQxNWM2MTkxNmFmNjBiLi5hMWM3MWIxNDY5YTg2NDUzMmMxZjlkMzhjNTM0
Y2I4YmEwZjEwNzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgKQEAgLTI5LDI4ICsyOSwzMyBAQAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRlICJDRE1Qcml2YXRl
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENETTsKK2NsYXNzIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM7CiAKIGNsYXNzIENE
TVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMgOiBwdWJsaWMgQ0RNUHJpdmF0ZUludGVyZmFjZSB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyhDRE0q
IGNkbSkKICAgICAgICAgOiBtX2NkbShjZG0pCiAgICAgeyB9Ci0gICAgdmlydHVhbCB+Q0RNUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQygpIHsgfQorICAgIHZpcnR1YWwgfkNETVByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMoKTsKIAogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzS2V5U3lzdGVtKGNv
bnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzS2V5U3lzdGVtQW5kTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRl
U2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Np
b24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCopIG92ZXJyaWRlOwogCiAgICAgQ0RN
KiBjZG0oKSBjb25zdCB7IHJldHVybiBtX2NkbTsgfQogCisgICAgdm9pZCBpbnZhbGlkYXRlU2Vz
c2lvbihDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKik7CisKIHByb3RlY3RlZDoKICAgICBD
RE0qIG1fY2RtOworICAgIFZlY3RvcjxDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKj4gbV9z
ZXNzaW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMubW0KaW5kZXggYjFjZmViMWJhNDY3NjIwNzlmOThiM2E5ZjQzNzMzNTJj
MGVlMjUzZC4uOGIxYmYzMmFmYWQ0YmEwMWRlOTE5YzA4NGNmM2Q3Yjg2NDBjYjdiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KQEAg
LTI5LDcgKzI5LDggQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSAmJiBFTkFCTEUo
TUVESUFfU09VUkNFKQogCiAjaW1wb3J0ICJDRE0uaCIKLSNpbXBvcnQgIkNETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakMuaCIKKyNpbXBvcnQgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9u
LmgiCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmgiCiAjaW1wb3J0ICJDb250
ZW50VHlwZS5oIgogI2ltcG9ydCAiRXhjZXB0aW9uQ29kZS5oIgogI2ltcG9ydCAiTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgiCkBAIC00MywxMCArNDQsMTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgUmVndWxhckV4cHJlc3Npb24mIHZhbGlkS2V5U3lzdGVt
UkUoKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZWd1bGFyRXhwcmVzc2lvbj4ga2V5
U3lzdGVtUkUoIl5jb21cXC5hcHBsZVxcLmZwc1xcLjJfXFxkKyg/OixcXGQrKSokIiwgVGV4dENh
c2VJbnNlbnNpdGl2ZSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlZ3VsYXJFeHByZXNz
aW9uPiBrZXlTeXN0ZW1SRSgiXmNvbVxcLmFwcGxlXFwuZnBzXFwuWzIzXV9cXGQrKD86LFxcZCsp
KiQiLCBUZXh0Q2FzZUluc2Vuc2l0aXZlKTsKICAgICByZXR1cm4ga2V5U3lzdGVtUkU7CiB9CiAK
K0NETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5DRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKCkKK3sKKyAgICBmb3IgKGF1dG8mIHNlc3Npb24gOiBtX3Nlc3Npb25zKQorICAgICAgICBz
ZXNzaW9uLT5pbnZhbGlkYXRlQ0RNKCk7Cit9CisKIGJvb2wgQ0RNUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pCiB7CiAg
ICAgaWYgKCF3a1F1ZXJ5RGVjb2RlckF2YWlsYWJpbGl0eSgpKQpAQCAtNTUsNiArNjIsOSBAQCBi
b29sIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0
IFN0cmluZyYga2V5U3lzdGVtKQogICAgIGlmICgha2V5U3lzdGVtLmlzRW1wdHkoKSAmJiB2YWxp
ZEtleVN5c3RlbVJFKCkubWF0Y2goa2V5U3lzdGVtKSA8IDApCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGlmIChrZXlTeXN0ZW0uc3Vic3RyaW5nKDE0LCAxKS50b0ludCgpID09IDMgJiYg
IUNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjppc0F2YWlsYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODksNyArOTksNyBAQCBi
b29sIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpzdXBwb3J0c1R5cGUocGFyYW1ldGVycykgIT0gTWVkaWFQbGF5ZXI6OklzTm90
U3VwcG9ydGVkOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lvbj4gQ0RNUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbigpCitzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vz
c2lvbj4gQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlU2Vzc2lvbihDRE1TZXNz
aW9uQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgU3RyaW5nIGtleVN5c3RlbSA9IG1fY2RtLT5rZXlT
eXN0ZW0oKTsKICAgICBBU1NFUlQodmFsaWRLZXlTeXN0ZW1SRSgpLm1hdGNoKGtleVN5c3RlbSkg
Pj0gMCk7CkBAIC0xMDEsNyArMTExLDIwIEBAIHN0ZDo6dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBD
RE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGVTZXNzaW9uKCkKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sVmVyc2lvblN0cmluZyA6IHByb3RvY29sVmVyc2lvbnNTdHJpbmdzKQogICAg
ICAgICBwcm90b2NvbFZlcnNpb25zLmFwcGVuZChwcm90b2NvbFZlcnNpb25TdHJpbmcudG9JbnQo
KSk7CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDPihwcm90b2NvbFZlcnNpb25zKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0RNU2Vzc2lv
bk1lZGlhU291cmNlQVZGT2JqQz4gc2Vzc2lvbjsKKyAgICBpZiAoa2V5U3lzdGVtLnN1YnN0cmlu
ZygxNCwgMSkudG9JbnQoKSA9PSAzICYmIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpp
c0F2YWlsYWJsZSgpKQorICAgICAgICBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNz
aW9uQVZDb250ZW50S2V5U2Vzc2lvbj4ocHJvdG9jb2xWZXJzaW9ucywgKnRoaXMsIGNsaWVudCk7
CisgICAgZWxzZQorICAgICAgICBzZXNzaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uPihwcm90b2NvbFZlcnNpb25zLCAqdGhpcywgY2xpZW50KTsKKworICAg
IG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24uZ2V0KCkpOworICAgIHJldHVybiBXVEY6Om1vdmUo
c2Vzc2lvbik7Cit9CisKK3ZvaWQgQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6aW52YWxp
ZGF0ZVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogc2Vzc2lvbikKK3sKKyAg
ICBBU1NFUlQobV9zZXNzaW9ucy5jb250YWlucyhzZXNzaW9uKSk7CisgICAgbV9zZXNzaW9ucy5y
ZW1vdmVBbGwoc2Vzc2lvbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlT
ZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhOTQyYzc1
ODI5MDE2MTk2MmQ4NmY3NGIwZDNjMWNjMjI5ZDQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9u
QVZDb250ZW50S2V5U2Vzc2lvbi5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uX2gKKyNkZWZpbmUgQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb25faAorCisjaW5jbHVkZSAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQy5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKKworT0JKQ19DTEFTUyBBVkNvbnRlbnRLZXlSZXF1ZXN0Owor
T0JKQ19DTEFTUyBBVkNvbnRlbnRLZXlTZXNzaW9uOworT0JKQ19DTEFTUyBDRE1TZXNzaW9uQVZD
b250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CisKK2NsYXNzIENETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uIDogcHVibGljIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMgeworcHVi
bGljOgorICAgIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+
JiBwcm90b2NvbFZlcnNpb25zLCBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiwgQ0RNU2Vz
c2lvbkNsaWVudCopOworICAgIHZpcnR1YWwgfkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9u
KCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCisgICAgLy8gQ0RNU2Vzc2lv
bgorICAgIHZpcnR1YWwgQ0RNU2Vzc2lvblR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJuIENE
TVNlc3Npb25UeXBlQVZDb250ZW50S2V5U2Vzc2lvbjsgfQorICAgIHZpcnR1YWwgUmVmUHRyPFVp
bnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50
OEFycmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQm
IGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VLZXlzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHVwZGF0
ZShVaW50OEFycmF5KiwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0TWVzc2FnZSwgdW5zaWduZWQg
c2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CisK
KyAgICAvLyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDCisgICAgdm9pZCBhZGRQYXJzZXIo
QVZTdHJlYW1EYXRhUGFyc2VyICopIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlUGFyc2VyKEFW
U3RyZWFtRGF0YVBhcnNlciAqKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGlkUHJvdmlkZUNvbnRl
bnRLZXlSZXF1ZXN0KEFWQ29udGVudEtleVJlcXVlc3QgKik7CisKK3Byb3RlY3RlZDoKKyAgICBQ
YXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQg
c2hvcnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSk7CisKKyAgICBib29s
IGhhc0NvbnRlbnRLZXlTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50S2V5U2Vzc2lv
bjsgfQorICAgIEFWQ29udGVudEtleVNlc3Npb24qIGNvbnRlbnRLZXlTZXNzaW9uKCk7CisKKyAg
ICBSZXRhaW5QdHI8QVZDb250ZW50S2V5U2Vzc2lvbj4gbV9jb250ZW50S2V5U2Vzc2lvbjsKKyAg
ICBSZXRhaW5QdHI8Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZT4gbV9jb250
ZW50S2V5U2Vzc2lvbkRlbGVnYXRlOworICAgIFJldGFpblB0cjxBVkNvbnRlbnRLZXlSZXF1ZXN0
PiBtX2tleVJlcXVlc3Q7CisgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IG1faW5pdERhdGE7CisgICAg
UmV0YWluUHRyPE5TRGF0YT4gbV9leHBpcmVkU2Vzc2lvbjsKKyAgICBWZWN0b3I8aW50PiBtX3By
b3RvY29sVmVyc2lvbnM7CisgICAgaW50MzJfdCBtX3Byb3RlY3RlZFRyYWNrSUQgeyAxIH07Cisg
ICAgZW51bSB7IE5vcm1hbCwgS2V5UmVsZWFzZSB9IG1fbW9kZTsKK307CisKK2lubGluZSBDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbiogdG9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
bihDRE1TZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGlmICghc2Vzc2lvbiB8fCBzZXNzaW9uLT50
eXBlKCkgIT0gQ0RNU2Vzc2lvblR5cGVBVkNvbnRlbnRLZXlTZXNzaW9uKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNU2Vzc2lvbkFWQ29udGVudEtl
eVNlc3Npb24qPihzZXNzaW9uKTsKK30KKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENETVNl
c3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlT
ZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2YmU1
NGRmN2RjM2NmZmZjZDI0ZTMyZWM4MGRkYTAzYTkzYjhjOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
bi5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKworI2ltcG9ydCAiQ0RNLmgiCisjaW1wb3J0ICJDRE1Qcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmgiCisjaW1wb3J0ICJFeGNlcHRpb25Db2RlLmgiCisjaW1wb3J0ICJGaWxlU3lzdGVt
LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVBsYXllci5oIgorI2ltcG9y
dCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgi
CisjaW1wb3J0ICJVVUlELmgiCisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZFcnJvci5oPgorI2lt
cG9ydCA8Q29yZU1lZGlhL0NNQmFzZS5oPgorI2ltcG9ydCA8Y3N0ZGxpYj4KKyNpbXBvcnQgPG9i
amMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworU09GVF9MSU5LX0ZSQU1FV09SS19P
UFRJT05BTChBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlN0
cmVhbURhdGFQYXJzZXIpOworU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwg
QVZDb250ZW50S2V5U2Vzc2lvbik7CitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoQVZGb3Vu
ZGF0aW9uLCBBVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSwgTlNTdHJpbmcg
KikKKworQGludGVyZmFjZSBBVkNvbnRlbnRLZXlTZXNzaW9uIDogTlNPYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJM
OworQHByb3BlcnR5IChhc3NpZ24pIGlkIGRlbGVnYXRlOworLSAodm9pZClhZGRTdHJlYW1EYXRh
UGFyc2VyOihBVlN0cmVhbURhdGFQYXJzZXIgKilzdHJlYW1EYXRhUGFyc2VyOworLSAodm9pZCly
ZW1vdmVTdHJlYW1EYXRhUGFyc2VyOihBVlN0cmVhbURhdGFQYXJzZXIgKilzdHJlYW1EYXRhUGFy
c2VyOworQHByb3BlcnR5IChyZWFkb25seSkgTlNBcnJheSAqc3RyZWFtRGF0YVBhcnNlcnM7Cist
ICh2b2lkKWV4cGlyZTsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TRGF0YSAqY29udGVudFByb3Rl
Y3Rpb25TZXNzaW9uSWRlbnRpZmllcjsKKy0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlSZXF1ZXN0
SW5pdGlhbGl6YXRpb25EYXRhOihOU0RhdGEgKilpbml0aWFsaXphdGlvbkRhdGEgb3B0aW9uczoo
TlNEaWN0aW9uYXJ5ICopb3B0aW9uczsKKysgKE5TQXJyYXkgKilwZW5kaW5nRXhwaXJlZFNlc3Np
b25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgc3RvcmFn
ZURpcmVjdG9yeUF0VVJMOihOU1VSTCAqKXN0b3JhZ2VVUkw7CisrICh2b2lkKXJlbW92ZVBlbmRp
bmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6KE5TQXJyYXkgKilleHBpcmVkU2Vzc2lvblJlcG9ydHMg
d2l0aEFwcElkZW50aWZpZXI6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgc3RvcmFnZURpcmVjdG9y
eUF0VVJMOihOU1VSTCAqKXN0b3JhZ2VVUkw7CitAZW5kCisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIEFWQ29udGVudEtleVJlcXVlc3RTdGF0dXMpIHsKKyAgICBBVkNvbnRlbnRLZXlTZXNz
aW9uU3RhdHVzTm9LZXksCisgICAgQVZDb250ZW50S2V5U2Vzc2lvblN0YXR1c1JlcXVlc3RpbmdL
ZXksCisgICAgQVZDb250ZW50S2V5U2Vzc2lvblN0YXR1c0tleVByZXNlbnQsCisgICAgQVZDb250
ZW50S2V5U2Vzc2lvblN0YXR1c0V4cGlyZWQsCisgICAgQVZDb250ZW50S2V5U2Vzc2lvblN0YXR1
c0ZhaWxlZAorfTsKKworQGludGVyZmFjZSBBVkNvbnRlbnRLZXlSZXF1ZXN0IDogTlNPYmplY3QK
K0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEFWQ29udGVudEtleVJlcXVlc3RTdGF0dXMgc3RhdHVzOwor
QHByb3BlcnR5IChyZWFkb25seSkgTlNFcnJvciAqZXJyb3I7CitAcHJvcGVydHkgKHJlYWRvbmx5
KSBOU0RhdGEgKmluaXRpYWxpemF0aW9uRGF0YTsKKy0gKE5TRGF0YSAqKWNvbnRlbnRLZXlSZXF1
ZXN0RGF0YUZvckFwcDooTlNEYXRhICopYXBwSWRlbnRpZmllciBjb250ZW50SWRlbnRpZmllcjoo
TlNEYXRhICopY29udGVudElkZW50aWZpZXIgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9u
cyBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKKy0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlS
ZXNwb25zZURhdGE6KE5TRGF0YSAqKWNvbnRlbnRLZXlSZXNwb25zZURhdGE7CistICh2b2lkKXBy
b2Nlc3NDb250ZW50S2V5UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yOworLSAodm9pZCly
ZW5ld0V4cGlyaW5nQ29udGVudEtleVJlc3BvbnNlRGF0YTsKK0BlbmQKKworQGludGVyZmFjZSBD
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgeworICAgIFdl
YkNvcmU6OkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uICptX3BhcmVudDsKK30KKy0gKHZv
aWQpaW52YWxpZGF0ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENETVNlc3Npb25BVkNvbnRl
bnRLZXlTZXNzaW9uRGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoUGFyZW50OihXZWJDb3JlOjpDRE1T
ZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbiAqKXBhcmVudAoreworICAgIGlmICgoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIG1fcGFyZW50ID0gcGFyZW50OworICAgIHJldHVybiBzZWxm
OworfQorCisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIG1fcGFyZW50ID0gbnVsbHB0cjsK
K30KKworLSAodm9pZCljb250ZW50S2V5U2Vzc2lvbjooQVZDb250ZW50S2V5U2Vzc2lvbiAqKXNl
c3Npb24gZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0OihBVkNvbnRlbnRLZXlSZXF1ZXN0ICop
a2V5UmVxdWVzdAoreworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKworICAgIGlmIChtX3Bh
cmVudCkKKyAgICAgICAgbV9wYXJlbnQtPmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdChrZXlS
ZXF1ZXN0KTsKK30KKworLSAodm9pZCljb250ZW50S2V5U2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9u
U2Vzc2lvbklkZW50aWZpZXJEaWRDaGFuZ2U6KEFWQ29udGVudEtleVNlc3Npb24gKilzZXNzaW9u
Cit7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNEYXRhKiBp
ZGVudGlmaWVyID0gW3Nlc3Npb24gY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcl07
CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzZXNzaW9uSWRlbnRpZmllclN0cmluZyA9IGlkZW50
aWZpZXIgPyBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppZGVudGlmaWVy
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSkgOiBuaWw7CisgICAgbV9wYXJlbnQtPnNl
dFNlc3Npb25JZChzZXNzaW9uSWRlbnRpZmllclN0cmluZy5nZXQoKSk7Cit9CitAZW5kCisKK3N0
YXRpYyBjb25zdCBOU1N0cmluZyAqUGxheWJhY2tTZXNzaW9uSWRLZXkgPSBAIlBsYXliYWNrU2Vz
c2lvbklEIjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDRE1TZXNzaW9uQVZDb250ZW50S2V5
U2Vzc2lvbjo6Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24oY29uc3QgVmVjdG9yPGludD4m
IHByb3RvY29sVmVyc2lvbnMsIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMmIGNkbSwgQ0RN
U2Vzc2lvbkNsaWVudCogY2xpZW50KQorICAgIDogQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2Jq
QyhjZG0sIGNsaWVudCkKKyAgICAsIG1fY29udGVudEtleVNlc3Npb25EZWxlZ2F0ZShhZG9wdE5T
KFtbQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhQ
YXJlbnQ6dGhpc10pKQorICAgICwgbV9wcm90b2NvbFZlcnNpb25zKHByb3RvY29sVmVyc2lvbnMp
CisgICAgLCBtX21vZGUoTm9ybWFsKQoreworfQorCitDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbjo6fkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uKCkKK3sKKyAgICBbbV9jb250ZW50
S2V5U2Vzc2lvbkRlbGVnYXRlIGludmFsaWRhdGVdOworCisgICAgZm9yIChhdXRvJiBzb3VyY2VC
dWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgIHJlbW92ZVBhcnNlcihzb3VyY2VCdWZm
ZXItPnBhcnNlcigpKTsKK30KKworYm9vbCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6
aXNBdmFpbGFibGUoKQoreworICAgIHJldHVybiBnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3Mo
KTsKK30KKworUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9u
OjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVWludDhBcnJheSog
aW5pdERhdGEsIFN0cmluZyYgZGVzdGluYXRpb25VUkwsIHVuc2lnbmVkIHNob3J0JiBlcnJvckNv
ZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKG1pbWVU
eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOworICAgIEFTU0VSVChpbml0
RGF0YSk7CisKKyAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6
Z2VuZXJhdGVLZXlSZXF1ZXN0KCVwKSIsIHRoaXMpOworCisgICAgZXJyb3JDb2RlID0gTWVkaWFQ
bGF5ZXI6Ok5vRXJyb3I7CisgICAgc3lzdGVtQ29kZSA9IDA7CisKKyAgICBtX2luaXREYXRhID0g
aW5pdERhdGE7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJrZXlyZWxl
YXNlIikpIHsKKyAgICAgICAgbV9tb2RlID0gS2V5UmVsZWFzZTsKKyAgICAgICAgcmV0dXJuIGdl
bmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UoZXJyb3JDb2RlLCBzeXN0ZW1Db2RlKTsKKyAgICB9CisK
KyAgICBpZiAoIW1fY2VydGlmaWNhdGUpIHsKKyAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiY2VydGlmaWNhdGUiKSk7CisgICAgICAgIFJlZlB0cjxVaW50OEFy
cmF5PiBhcnJheSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IGNlcnRpZmljYXRlU3Ry
aW5nLmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhcnJheS0+c2V0KGks
IGNlcnRpZmljYXRlU3RyaW5nW2ldKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKwor
ICAgIGlmICghbV9rZXlSZXF1ZXN0KSB7CisgICAgICAgIE5TRGF0YSogbnNJbml0RGF0YSA9IFtO
U0RhdGEgZGF0YVdpdGhCeXRlczptX2luaXREYXRhLT5kYXRhKCkgbGVuZ3RoOm1faW5pdERhdGEt
Pmxlbmd0aCgpXTsKKyAgICAgICAgW2NvbnRlbnRLZXlTZXNzaW9uKCkgcHJvY2Vzc0NvbnRlbnRL
ZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhOm5zSW5pdERhdGEgb3B0aW9uczpuaWxdOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIENETVNlc3Npb25BVkNvbnRlbnRL
ZXlTZXNzaW9uOjpyZWxlYXNlS2V5cygpCit7CisgICAgaWYgKGhhc0NvbnRlbnRLZXlTZXNzaW9u
KCkpIHsKKyAgICAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKKyAgICAgICAgZm9yIChhdXRvJiBzb3Vy
Y2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPmZs
dXNoKCk7CisKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Np
b246OnJlbGVhc2VLZXlzKCVwKSAtIGV4cGlyaW5nIHN0cmVhbSBzZXNzaW9uIiwgdGhpcyk7Cisg
ICAgICAgIFtjb250ZW50S2V5U2Vzc2lvbigpIGV4cGlyZV07CisKKyAgICAgICAgaWYgKCFtX2Nl
cnRpZmljYXRlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghW2dldEFWQ29u
dGVudEtleVNlc3Npb25DbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGVuZGlu
Z0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOnN0b3JhZ2VEaXJlY3RvcnlB
dFVSTDopXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXRhaW5QdHI8TlNEYXRh
PiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
Om1fY2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsK
KyAgICAgICAgTlNBcnJheSogZXhwaXJlZFNlc3Npb25zID0gW2dldEFWQ29udGVudEtleVNlc3Np
b25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpj
ZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOworICAgICAgICBmb3IgKE5TRGF0YSogZXhwaXJlZFNl
c3Npb25EYXRhIGluIGV4cGlyZWRTZXNzaW9ucykgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5
ICpleHBpcmVkU2Vzc2lvbiA9IFtOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24gcHJvcGVydHlM
aXN0V2l0aERhdGE6ZXhwaXJlZFNlc3Npb25EYXRhIG9wdGlvbnM6a0NGUHJvcGVydHlMaXN0SW1t
dXRhYmxlIGZvcm1hdDpudWxscHRyIGVycm9yOm51bGxwdHJdOworICAgICAgICAgICAgTlNTdHJp
bmcgKnBsYXliYWNrU2Vzc2lvbklkVmFsdWUgPSAoTlNTdHJpbmcgKilbZXhwaXJlZFNlc3Npb24g
b2JqZWN0Rm9yS2V5OlBsYXliYWNrU2Vzc2lvbklkS2V5XTsKKyAgICAgICAgICAgIGlmICghW3Bs
YXliYWNrU2Vzc2lvbklkVmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKG1fc2Vzc2lvbklkID09
IFN0cmluZyhwbGF5YmFja1Nlc3Npb25JZFZhbHVlKSkgeworICAgICAgICAgICAgICAgIExPRyhN
ZWRpYSwgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpyZWxlYXNlS2V5cyglcCkgLSBm
b3VuZCBzZXNzaW9uLCBzZW5kaW5nIGV4cGlyYXRpb24gbWVzc2FnZSIpOworICAgICAgICAgICAg
ICAgIG1fZXhwaXJlZFNlc3Npb24gPSBleHBpcmVkU2Vzc2lvbkRhdGE7CisgICAgICAgICAgICAg
ICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlKFVpbnQ4QXJyYXk6OmNyZWF0ZShzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oW21fZXhwaXJlZFNlc3Npb24gYnl0ZXNdKSwgW21fZXhwaXJlZFNlc3Np
b24gbGVuZ3RoXSkuZ2V0KCksIGVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0Vx
dWFsKFVpbnQ4QXJyYXkqIGRhdGEsIGNvbnN0IGNoYXIqIGxpdGVyYWwpCit7CisgICAgQVNTRVJU
KGRhdGEpOworICAgIEFTU0VSVChsaXRlcmFsKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRh
LT5sZW5ndGgoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBpZiAoIWxpdGVyYWxbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKGRhdGEtPml0ZW0oaSkgIT0gc3RhdGljX2Nhc3Q8dWludDhfdD4obGl0ZXJh
bFtpXSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAhbGl0
ZXJhbFtsZW5ndGhdOworfQorCitib29sIENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1
cGRhdGUoVWludDhBcnJheSoga2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1
bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQorewor
ICAgIFVOVVNFRF9QQVJBTShuZXh0TWVzc2FnZSk7CisKKyAgICBib29sIHNob3VsZEdlbmVyYXRl
S2V5UmVxdWVzdCA9ICFtX2NlcnRpZmljYXRlIHx8IGlzRXF1YWwoa2V5LCAicmVuZXciKTsKKyAg
ICBpZiAoIW1fY2VydGlmaWNhdGUpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb246OnVwZGF0ZSglcCkgLSBjZXJ0aWZpY2F0ZSBkYXRhIiwgdGhpcyk7
CisKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZSA9IGtleTsKKyAgICB9CisKKyAgICBpZiAoaXNFcXVh
bChrZXksICJhY2tub3dsZWRnZWQiKSkgeworICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9u
QVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGFja25vd2xlZGluZyBzZWN1cmUgc3Rv
cCBtZXNzYWdlIiwgdGhpcyk7CisKKyAgICAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9uKSB7Cisg
ICAgICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0
aCgpXSk7CisKKyAgICAgICAgaWYgKFtnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9y
dHM6d2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0VVJMOildKQorICAgICAgICAg
ICAgW2dldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vz
c2lvblJlcG9ydHM6QFttX2V4cGlyZWRTZXNzaW9uLmdldCgpXSB3aXRoQXBwSWRlbnRpZmllcjpj
ZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOworICAgICAgICBtX2V4cGlyZWRTZXNzaW9uID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbW9kZSA9PSBL
ZXlSZWxlYXNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fa2V5UmVxdWVz
dCkgeworICAgICAgICBOU0RhdGEqIG5zSW5pdERhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6
bV9pbml0RGF0YS0+ZGF0YSgpIGxlbmd0aDptX2luaXREYXRhLT5sZW5ndGgoKV07CisgICAgICAg
IFtjb250ZW50S2V5U2Vzc2lvbigpIHByb2Nlc3NDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0
aW9uRGF0YTpuc0luaXREYXRhIG9wdGlvbnM6bmlsXTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxk
R2VuZXJhdGVLZXlSZXF1ZXN0KSB7CisgICAgICAgIEFTU0VSVChtX2tleVJlcXVlc3QpOworICAg
ICAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRh
IGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6bV9jZXJ0
aWZpY2F0ZS0+bGVuZ3RoKCldKTsKKworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBpbml0RGF0
YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9pbml0RGF0YS0+ZGF0
YSgpIGxlbmd0aDptX2luaXREYXRhLT5sZW5ndGgoKV0pOworCisgICAgICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IG9wdGlvbnM7CisgICAgICAgIGlmICghbV9wcm90b2NvbFZlcnNpb25zLmlz
RW1wdHkoKSAmJiBjYW5Mb2FkQVZDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXko
KSkgeworICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZlcnNp
b25zT3B0aW9uID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIHZlcnNpb24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIFtwcm90b2NvbFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZlcnNp
b24pXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3B0aW9ucyA9IEB7IGdldEFWQ29u
dGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5KCk6IHByb3RvY29sVmVyc2lvbnNPcHRp
b24uZ2V0KCkgfTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVy
OjpOb0Vycm9yOworICAgICAgICBzeXN0ZW1Db2RlID0gMDsKKyAgICAgICAgTlNEYXRhKiByZXF1
ZXN0RGF0YSA9IFttX2tleVJlcXVlc3QgY29udGVudEtleVJlcXVlc3REYXRhRm9yQXBwOmNlcnRp
ZmljYXRlRGF0YS5nZXQoKSBjb250ZW50SWRlbnRpZmllcjppbml0RGF0YS5nZXQoKSBvcHRpb25z
Om9wdGlvbnMuZ2V0KCkgZXJyb3I6bmlsXTsKKyAgICAgICAgbmV4dE1lc3NhZ2UgPSBVaW50OEFy
cmF5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtyZXF1ZXN0RGF0YSBieXRl
c10pLCBbcmVxdWVzdERhdGEgbGVuZ3RoXSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRh
dGUoJXApIC0ga2V5IGRhdGEiLCB0aGlzKTsKKyAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6
Tm9FcnJvcjsKKyAgICBzeXN0ZW1Db2RlID0gMDsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlE
YXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBs
ZW5ndGg6a2V5LT5sZW5ndGgoKV0pOworICAgIFttX2tleVJlcXVlc3QgcHJvY2Vzc0NvbnRlbnRL
ZXlSZXNwb25zZURhdGE6a2V5RGF0YS5nZXQoKV07CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6YWRkUGFyc2VyKEFWU3RyZWFtRGF0
YVBhcnNlciogcGFyc2VyKQoreworICAgIFtjb250ZW50S2V5U2Vzc2lvbigpIGFkZFN0cmVhbURh
dGFQYXJzZXI6cGFyc2VyXTsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lv
bjo6cmVtb3ZlUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciogcGFyc2VyKQoreworICAgIFtjb250
ZW50S2V5U2Vzc2lvbigpIHJlbW92ZVN0cmVhbURhdGFQYXJzZXI6cGFyc2VyXTsKK30KKworUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6Z2VuZXJh
dGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBs
b25nJiBzeXN0ZW1Db2RlKQoreworICAgIEFTU0VSVChtX21vZGUgPT0gS2V5UmVsZWFzZSk7Cisg
ICAgbV9jZXJ0aWZpY2F0ZSA9IG1faW5pdERhdGE7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gY2Vy
dGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2Nl
cnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7CisKKyAg
ICBpZiAoIVtnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpz
dG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pIHsKKyAgICAgICAgZXJyb3JDb2RlID0gTWVkaWFQbGF5
ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKyAgICAgICAgc3lzdGVtQ29kZSA9ICchbW9yJzsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgTlNBcnJheSogZXhwaXJlZFNl
c3Npb25zID0gW2dldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vz
c2lvblJlcG9ydHNXaXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFn
ZURpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOwor
ICAgIGlmICghW2V4cGlyZWRTZXNzaW9ucyBjb3VudF0pIHsKKyAgICAgICAgTE9HKE1lZGlhLCAi
Q0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2Uo
JXApIC0gbm8gZXhwaXJlZCBzZXNzaW9ucyBmb3VuZCIsIHRoaXMpOworCisgICAgICAgIGVycm9y
Q29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisgICAgICAgIHN5c3Rl
bUNvZGUgPSAnIW1vcic7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIExP
RyhNZWRpYSwgIkNETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjpnZW5lcmF0ZUtleVJlbGVh
c2VNZXNzYWdlKCVwKSAtIGZvdW5kICVkIGV4cGlyZWQgc2Vzc2lvbnMiLCB0aGlzLCBbZXhwaXJl
ZFNlc3Npb25zIGNvdW50XSk7CisKKyAgICBlcnJvckNvZGUgPSAwOworICAgIHN5c3RlbUNvZGUg
PSAwOworICAgIG1fZXhwaXJlZFNlc3Npb24gPSBbZXhwaXJlZFNlc3Npb25zIGZpcnN0T2JqZWN0
XTsKKyAgICByZXR1cm4gVWludDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBsZW5ndGhd
KTsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6ZGlkUHJvdmlkZUNv
bnRlbnRLZXlSZXF1ZXN0KEFWQ29udGVudEtleVJlcXVlc3QgKmtleVJlcXVlc3QpCit7CisgICAg
bV9rZXlSZXF1ZXN0ID0ga2V5UmVxdWVzdDsKK30KKworQVZDb250ZW50S2V5U2Vzc2lvbiogQ0RN
U2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb246OmNvbnRlbnRLZXlTZXNzaW9uKCkKK3sKKyAgICBp
ZiAoIW1fY29udGVudEtleVNlc3Npb24pIHsKKyAgICAgICAgbV9jb250ZW50S2V5U2Vzc2lvbiA9
IGFkb3B0TlMoW1tnZXRBVkNvbnRlbnRLZXlTZXNzaW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhT
dG9yYWdlRGlyZWN0b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgp
XV0pOworICAgICAgICBtX2NvbnRlbnRLZXlTZXNzaW9uLmdldCgpLmRlbGVnYXRlID0gbV9jb250
ZW50S2V5U2Vzc2lvbkRlbGVnYXRlLmdldCgpOworICAgIH0KKworICAgIHJldHVybiBtX2NvbnRl
bnRLZXlTZXNzaW9uLmdldCgpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
Rm91bmRhdGlvbk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLmgKaW5kZXggMjE4NWZmMjY3
YjBmY2Q4NGQ0ODI1MTRiY2NhOThlZjQzOTE1OGYzOS4uNWQ5MzA3Mzc4YjFhZTM3NmQ1NzViN2I0
NmI1MjRkZTFkODYwNWU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1T
ZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM7CiAKIGNsYXNzIENETVNlc3Npb25BVkZvdW5kYXRp
b25PYmpDIDogcHVibGljIENETVNlc3Npb24gewogcHVibGljOgotICAgIENETVNlc3Npb25BVkZv
dW5kYXRpb25PYmpDKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqIHBhcmVudCk7
CisgICAgQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQyogcGFyZW50LCBDRE1TZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q0RN
U2Vzc2lvbkFWRm91bmRhdGlvbk9iakMoKSB7IH0KIAogICAgIHZpcnR1YWwgQ0RNU2Vzc2lvblR5
cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJuIENETVNlc3Npb25UeXBlQVZGb3VuZGF0aW9uT2Jq
QzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0
aW9uT2JqQy5tbQppbmRleCAyNGRkMTA4MTQyZjUyYzE1NjMwY2EzMmZjODgyNGU1NzVkOWIyYWQy
Li5jYmRlMTk4OTVhYzk3ZTcwMTE4YjNkOGY5MWRkMmU1MmEyMGUxYWQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAt
NDYsOSArNDYsOSBAQCBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVkFzc2V0UmVzb3Vy
Y2VMb2FkaW5nUmVxdWVzdCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DRE1TZXNzaW9uQVZG
b3VuZGF0aW9uT2JqQzo6Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQyogcGFyZW50KQorQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakM6
OkNETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMqIHBhcmVudCwgQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQogICAgIDogbV9wYXJlbnQo
cGFyZW50KQotICAgICwgbV9jbGllbnQobnVsbHB0cikKKyAgICAsIG1fY2xpZW50KGNsaWVudCkK
ICAgICAsIG1fc2Vzc2lvbklkKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYWE0NmJlOThlZGUxMzgwM2I1OTZhNTFlNWFkYjQxNmEyYjYxYmZmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5oCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25faAorI2RlZmluZSBD
RE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uX2gKKworI2luY2x1ZGUgIkNETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKwor
T0JKQ19DTEFTUyBBVlN0cmVhbVNlc3Npb247CitPQkpDX0NMQVNTIENETVNlc3Npb25BVlN0cmVh
bVNlc3Npb25PYnNlcnZlcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDRE1Qcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworCitjbGFzcyBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9u
IDogcHVibGljIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMgeworcHVibGljOgorICAgIENE
TVNlc3Npb25BVlN0cmVhbVNlc3Npb24oY29uc3QgVmVjdG9yPGludD4mIHByb3RvY29sVmVyc2lv
bnMsIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMmLCBDRE1TZXNzaW9uQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCB+Q0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbigpOworCisgICAgLy8gQ0RNU2Vz
c2lvbgorICAgIHZpcnR1YWwgQ0RNU2Vzc2lvblR5cGUgdHlwZSgpIG92ZXJyaWRlIHsgcmV0dXJu
IENETVNlc3Npb25UeXBlQVZTdHJlYW1TZXNzaW9uOyB9CisgICAgdmlydHVhbCBSZWZQdHI8VWlu
dDhBcnJheT4gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFVpbnQ4
QXJyYXkqIGluaXREYXRhLCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCB1bnNpZ25lZCBzaG9ydCYg
ZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZUtleXMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
KFVpbnQ4QXJyYXkqLCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNpZ25lZCBz
aG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKSBvdmVycmlkZTsKKwor
ICAgIC8vIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMKKyAgICB2b2lkIGFkZFBhcnNlcihB
VlN0cmVhbURhdGFQYXJzZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZVBhcnNlcihBVlN0
cmVhbURhdGFQYXJzZXIqKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U3RyZWFtU2Vzc2lvbihB
VlN0cmVhbVNlc3Npb24qKTsKKworcHJvdGVjdGVkOgorICAgIFBhc3NSZWZQdHI8VWludDhBcnJh
eT4gZ2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1
bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKTsKKworICAgIFdlYWtQdHJGYWN0b3J5PENETVNlc3Np
b25BVlN0cmVhbVNlc3Npb24+IG1fd2Vha1B0ckZhY3Rvcnk7CisgICAgUmV0YWluUHRyPEFWU3Ry
ZWFtU2Vzc2lvbj4gbV9zdHJlYW1TZXNzaW9uOworICAgIFJlZlB0cjxVaW50OEFycmF5PiBtX2lu
aXREYXRhOworICAgIFJlZlB0cjxVaW50OEFycmF5PiBtX2NlcnRpZmljYXRlOworICAgIFJldGFp
blB0cjxOU0RhdGE+IG1fZXhwaXJlZFNlc3Npb247CisgICAgUmV0YWluUHRyPENETVNlc3Npb25B
VlN0cmVhbVNlc3Npb25PYnNlcnZlcj4gbV9kYXRhUGFyc2VyT2JzZXJ2ZXI7CisgICAgVmVjdG9y
PGludD4gbV9wcm90b2NvbFZlcnNpb25zOworICAgIGVudW0geyBOb3JtYWwsIEtleVJlbGVhc2Ug
fSBtX21vZGU7Cit9OworCitpbmxpbmUgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbiogdG9DRE1T
ZXNzaW9uQVZTdHJlYW1TZXNzaW9uKENETVNlc3Npb24qIHNlc3Npb24pCit7CisgICAgaWYgKCFz
ZXNzaW9uIHx8IHNlc3Npb24tPnR5cGUoKSAhPSBDRE1TZXNzaW9uVHlwZUFWU3RyZWFtU2Vzc2lv
bikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENETVNl
c3Npb25BVlN0cmVhbVNlc3Npb24qPihzZXNzaW9uKTsKK30KKworfQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0MGM5
NmE1OGEwNWNmZGIyMWVmYzI4ZGNlOTFhNmI4YWU5YzE3NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25BVlN0cmVhbVNlc3Npb24ubW0KQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb24uaCIKKwor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisK
KyNpbXBvcnQgIkNETS5oIgorI2ltcG9ydCAiQ0RNUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
IgorI2ltcG9ydCAiRXhjZXB0aW9uQ29kZS5oIgorI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgorI2lt
cG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFQbGF5ZXIuaCIKKyNpbXBvcnQgIlNvZnRM
aW5raW5nLmgiCisjaW1wb3J0ICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oIgorI2ltcG9y
dCAiVVVJRC5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRXJyb3IuaD4KKyNpbXBvcnQgPENv
cmVNZWRpYS9DTUJhc2UuaD4KKyNpbXBvcnQgPGNzdGRsaWI+CisjaW1wb3J0IDxvYmpjL29iamMt
cnVudGltZS5oPgorI2ltcG9ydCA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwo
QVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1EYXRh
UGFyc2VyKTsKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVkZvdW5kYXRpb24sIEFWU3RyZWFt
U2Vzc2lvbik7CitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0
cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXksIE5TU3Ry
aW5nICopCitTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUwoQVZGb3VuZGF0aW9uLCBBVlN0cmVh
bVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNh
dGlvbiwgTlNTdHJpbmcgKikKKworQGludGVyZmFjZSBBVlN0cmVhbURhdGFQYXJzZXIgOiBOU09i
amVjdAorLSAodm9pZClwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29u
dGVudEtleVJlc3BvbnNlRGF0YSBmb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNr
SUQ7CistICh2b2lkKXByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVy
cm9yIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRDsKKy0gKHZvaWQpcmVu
ZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNwb25zZURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRU
cmFja0lEKXRyYWNrSUQ7CistIChOU0RhdGEgKilzdHJlYW1pbmdDb250ZW50S2V5UmVxdWVzdERh
dGFGb3JBcHA6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgY29udGVudElkZW50aWZpZXI6KE5TRGF0
YSAqKWNvbnRlbnRJZGVudGlmaWVyIHRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJ
RCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICoqKW91dEVy
cm9yOworQGVuZAorCitAaW50ZXJmYWNlIEFWU3RyZWFtU2Vzc2lvbiA6IE5TT2JqZWN0CistICh2
b2lkKWFkZFN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNlciAqKXN0cmVhbURhdGFQ
YXJzZXI7CistICh2b2lkKXJlbW92ZVN0cmVhbURhdGFQYXJzZXI6KEFWU3RyZWFtRGF0YVBhcnNl
ciAqKXN0cmVhbURhdGFQYXJzZXI7CistICh2b2lkKWV4cGlyZTsKKy0gKE5TRGF0YSAqKWNvbnRl
bnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXI7CisrIChOU0FycmF5ICopcGVuZGluZ0V4cGly
ZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOihOU0RhdGEgKilhcHBJZGVudGlmaWVy
IHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJMOworKyAodm9pZClyZW1v
dmVQZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzOihOU0FycmF5ICopZXhwaXJlZFNlc3Npb25S
ZXBvcnRzIHdpdGhBcHBJZGVudGlmaWVyOihOU0RhdGEgKilhcHBJZGVudGlmaWVyIHN0b3JhZ2VE
aXJlY3RvcnlBdFVSTDooTlNVUkwgKilzdG9yYWdlVVJMOworQGVuZAorCitAaW50ZXJmYWNlIENE
TVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlciA6IE5TT2JqZWN0IHsKKyAgICBXZWJDb3Jl
OjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uICptX3BhcmVudDsKK30KK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIENETVNlc3Npb25BVlN0cmVhbVNlc3Npb25PYnNlcnZlcgorLSAoaWQpaW5pdFdp
dGhQYXJlbnQ6KFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb24gKilwYXJlbnQKK3sK
KyAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBtX3BhcmVudCA9IHBhcmVu
dDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljb250ZW50UHJvdGVjdGlvblNlc3Np
b25JZGVudGlmaWVyQ2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAg
ICBBVlN0cmVhbVNlc3Npb24qIHN0cmVhbVNlc3Npb24gPSAoQVZTdHJlYW1TZXNzaW9uKilbbm90
aWZpY2F0aW9uIG9iamVjdF07CisKKyAgICBOU0RhdGEqIGlkZW50aWZpZXIgPSBbc3RyZWFtU2Vz
c2lvbiBjb250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyXTsKKyAgICBSZXRhaW5QdHI8
TlNTdHJpbmc+IHNlc3Npb25JZGVudGlmaWVyU3RyaW5nID0gaWRlbnRpZmllciA/IGFkb3B0TlMo
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmlkZW50aWZpZXIgZW5jb2Rpbmc6TlNVVEY4
U3RyaW5nRW5jb2RpbmddKSA6IG5pbDsKKworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9w
YXJlbnQtPnNldFNlc3Npb25JZChzZXNzaW9uSWRlbnRpZmllclN0cmluZy5nZXQoKSk7Cit9CitA
ZW5kCisKK3N0YXRpYyBjb25zdCBOU1N0cmluZyAqUGxheWJhY2tTZXNzaW9uSWRLZXkgPSBAIlBs
YXliYWNrU2Vzc2lvbklEIjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDRE1TZXNzaW9uQVZT
dHJlYW1TZXNzaW9uOjpDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKGNvbnN0IFZlY3RvcjxpbnQ+
JiBwcm90b2NvbFZlcnNpb25zLCBDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDJiBjZG0sIENE
TVNlc3Npb25DbGllbnQqIGNsaWVudCkKKyAgICA6IENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akMoY2RtLCBjbGllbnQpCisgICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX2Rh
dGFQYXJzZXJPYnNlcnZlcihhZG9wdE5TKFtbQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbk9ic2Vy
dmVyIGFsbG9jXSBpbml0V2l0aFBhcmVudDp0aGlzXSkpCisgICAgLCBtX3Byb3RvY29sVmVyc2lv
bnMocHJvdG9jb2xWZXJzaW9ucykKKyAgICAsIG1fbW9kZShOb3JtYWwpCit7Cit9CisKK0NETVNl
c3Npb25BVlN0cmVhbVNlc3Npb246On5DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKCkKK3sKKyAg
ICBzZXRTdHJlYW1TZXNzaW9uKG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZm
ZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgIHJlbW92ZVBhcnNlcihzb3VyY2VCdWZmZXIt
PnBhcnNlcigpKTsKK30KKworUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Npb25BVlN0cmVhbVNl
c3Npb246OmdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50OEFy
cmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVy
cm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bWltZVR5cGUpOworICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvblVSTCk7CisgICAgQVNTRVJU
KGluaXREYXRhKTsKKworICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246
OmdlbmVyYXRlS2V5UmVxdWVzdCglcCkiLCB0aGlzKTsKKworICAgIGVycm9yQ29kZSA9IE1lZGlh
UGxheWVyOjpOb0Vycm9yOworICAgIHN5c3RlbUNvZGUgPSAwOworCisgICAgbV9pbml0RGF0YSA9
IGluaXREYXRhOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAia2V5cmVs
ZWFzZSIpKSB7CisgICAgICAgIG1fbW9kZSA9IEtleVJlbGVhc2U7CisgICAgICAgIHJldHVybiBn
ZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKGVycm9yQ29kZSwgc3lzdGVtQ29kZSk7CisgICAgfQor
CisgICAgU3RyaW5nIGNlcnRpZmljYXRlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY2VydGlmaWNhdGUi
KSk7CisgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGFycmF5ID0gVWludDhBcnJheTo6Y3JlYXRlKGNl
cnRpZmljYXRlU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5n
dGggPSBjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKQorICAgICAg
ICBhcnJheS0+c2V0KGksIGNlcnRpZmljYXRlU3RyaW5nW2ldKTsKKyAgICByZXR1cm4gYXJyYXk7
Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6cmVsZWFzZUtleXMoKQorewor
ICAgIGlmIChtX3N0cmVhbVNlc3Npb24pIHsKKyAgICAgICAgbV9zdG9wcGVkID0gdHJ1ZTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAg
ICAgICBzb3VyY2VCdWZmZXItPmZsdXNoKCk7CisKKyAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vz
c2lvbkFWU3RyZWFtU2Vzc2lvbjo6cmVsZWFzZUtleXMoJXApIC0gZXhwaXJpbmcgc3RyZWFtIHNl
c3Npb24iLCB0aGlzKTsKKyAgICAgICAgW21fc3RyZWFtU2Vzc2lvbiBleHBpcmVdOworCisgICAg
ICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoIVtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOnN0b3JhZ2VE
aXJlY3RvcnlBdFVSTDopXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXRhaW5Q
dHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRhdGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVu
Z3RoKCldKTsKKyAgICAgICAgTlNBcnJheSogZXhwaXJlZFNlc3Npb25zID0gW2dldEFWU3RyZWFt
U2Vzc2lvbkNsYXNzKCkgcGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlm
aWVyOmNlcnRpZmljYXRlRGF0YS5nZXQoKSBzdG9yYWdlRGlyZWN0b3J5QXRVUkw6W05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpzdG9yYWdlUGF0aCgpXV07CisgICAgICAgIGZvciAoTlNEYXRhKiBleHBp
cmVkU2Vzc2lvbkRhdGEgaW4gZXhwaXJlZFNlc3Npb25zKSB7CisgICAgICAgICAgICBOU0RpY3Rp
b25hcnkgKmV4cGlyZWRTZXNzaW9uID0gW05TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiBwcm9w
ZXJ0eUxpc3RXaXRoRGF0YTpleHBpcmVkU2Vzc2lvbkRhdGEgb3B0aW9uczprQ0ZQcm9wZXJ0eUxp
c3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6bnVsbHB0cl07CisgICAgICAgICAgICBO
U1N0cmluZyAqcGxheWJhY2tTZXNzaW9uSWRWYWx1ZSA9IChOU1N0cmluZyAqKVtleHBpcmVkU2Vz
c2lvbiBvYmplY3RGb3JLZXk6UGxheWJhY2tTZXNzaW9uSWRLZXldOworICAgICAgICAgICAgaWYg
KCFbcGxheWJhY2tTZXNzaW9uSWRWYWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11d
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAobV9zZXNzaW9u
SWQgPT0gU3RyaW5nKHBsYXliYWNrU2Vzc2lvbklkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
TE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6cmVsZWFzZUtleXMoJXApIC0g
Zm91bmQgc2Vzc2lvbiwgc2VuZGluZyBleHBpcmF0aW9uIG1lc3NhZ2UiKTsKKyAgICAgICAgICAg
ICAgICBtX2V4cGlyZWRTZXNzaW9uID0gZXhwaXJlZFNlc3Npb25EYXRhOworICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZShVaW50OEFycmF5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KFttX2V4cGlyZWRTZXNzaW9uIGJ5dGVzXSksIFttX2V4cGlyZWRTZXNz
aW9uIGxlbmd0aF0pLmdldCgpLCBlbXB0eVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNF
cXVhbChVaW50OEFycmF5KiBkYXRhLCBjb25zdCBjaGFyKiBsaXRlcmFsKQoreworICAgIEFTU0VS
VChkYXRhKTsKKyAgICBBU1NFUlQobGl0ZXJhbCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0
YS0+bGVuZ3RoKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaWYgKCFsaXRlcmFsW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChkYXRhLT5pdGVtKGkpICE9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpdGVy
YWxbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gIWxp
dGVyYWxbbGVuZ3RoXTsKK30KKworYm9vbCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRh
dGUoVWludDhBcnJheSoga2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdlLCB1bnNp
Z25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQoreworICAg
IGJvb2wgc2hvdWxkR2VuZXJhdGVLZXlSZXF1ZXN0ID0gIW1fY2VydGlmaWNhdGUgfHwgaXNFcXVh
bChrZXksICJyZW5ldyIpOworICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkgeworICAgICAgICBMT0co
TWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoJXApIC0gY2VydGlmaWNh
dGUgZGF0YSIsIHRoaXMpOworCisgICAgICAgIG1fY2VydGlmaWNhdGUgPSBrZXk7CisgICAgfQor
CisgICAgaWYgKGlzRXF1YWwoa2V5LCAiYWNrbm93bGVkZ2VkIikpIHsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBkYXRlKCVwKSAtIGFja25vd2xlZGlu
ZyBzZWN1cmUgc3RvcCBtZXNzYWdlIiwgdGhpcyk7CisKKyAgICAgICAgaWYgKCFtX2V4cGlyZWRT
ZXNzaW9uKSB7CisgICAgICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6SW52YWxpZFBs
YXllclN0YXRlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlm
aWNhdGUtPmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWYgKFtnZXRBVlN0cmVhbVNlc3Npb25DbGFz
cygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlUGVuZGluZ0V4cGlyZWRTZXNz
aW9uUmVwb3J0czp3aXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pCisg
ICAgICAgICAgICBbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZW1vdmVQZW5kaW5nRXhwaXJl
ZFNlc3Npb25SZXBvcnRzOkBbbV9leHBpcmVkU2Vzc2lvbi5nZXQoKV0gd2l0aEFwcElkZW50aWZp
ZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVSTDpbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsKKyAgICAgICAgbV9leHBpcmVkU2Vzc2lvbiA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX21vZGUg
PT0gS2V5UmVsZWFzZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBwcm90ZWN0ZWRTb3VyY2VCdWZmZXI7CisgICAgZm9yIChh
dXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKHNvdXJj
ZUJ1ZmZlci0+cHJvdGVjdGVkVHJhY2tJRCgpICE9IC0xKSB7CisgICAgICAgICAgICBwcm90ZWN0
ZWRTb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChzaG91bGRHZW5lcmF0ZUtleVJlcXVlc3QpIHsKKyAgICAg
ICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3RoOm1fY2VydGlm
aWNhdGUtPmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWYgKG1fc291cmNlQnVmZmVycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoIXByb3RlY3RlZFNv
dXJjZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIFJldGFpblB0
cjxOU0RhdGE+IGluaXREYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRl
czptX2luaXREYXRhLT5kYXRhKCkgbGVuZ3RoOm1faW5pdERhdGEtPmxlbmd0aCgpXSk7CisKKwor
ICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOworICAgICAgICBpZiAoIW1f
cHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5KCkgJiYgY2FuTG9hZEFWU3RyZWFtRGF0YVBhcnNlckNv
bnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7CisgICAgICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24gPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdmVy
c2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgeworICAgICAgICAgICAgICAgIGlmICghdmVyc2lv
bikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgW3Byb3Rv
Y29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBvcHRpb25zID0gQHsgZ2V0QVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtl
eVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5KCk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0
KCkgfTsKKyAgICAgICAgfQorCisgICAgICAgIE5TRXJyb3IqIGVycm9yID0gbmlsOworICAgICAg
ICBSZXRhaW5QdHI8TlNEYXRhPiByZXF1ZXN0ID0gW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFy
c2VyKCkgc3RyZWFtaW5nQ29udGVudEtleVJlcXVlc3REYXRhRm9yQXBwOmNlcnRpZmljYXRlRGF0
YS5nZXQoKSBjb250ZW50SWRlbnRpZmllcjppbml0RGF0YS5nZXQoKSB0cmFja0lEOnByb3RlY3Rl
ZFNvdXJjZUJ1ZmZlci0+cHJvdGVjdGVkVHJhY2tJRCgpIG9wdGlvbnM6b3B0aW9ucy5nZXQoKSBl
cnJvcjomZXJyb3JdOworCisgICAgICAgIGlmICghW3Byb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cGFy
c2VyKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50UHJvdGVjdGlvblNlc3Np
b25JZGVudGlmaWVyKV0pCisgICAgICAgICAgICBtX3Nlc3Npb25JZCA9IGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKTsKKworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIExPRyhN
ZWRpYSwgIkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnVwZGF0ZSglcCkgLSBlcnJvcjolQCIs
IHRoaXMsIFtlcnJvciBkZXNjcmlwdGlvbl0pOworICAgICAgICAgICAgZXJyb3JDb2RlID0gTWVk
aWFQbGF5ZXI6OkludmFsaWRQbGF5ZXJTdGF0ZTsKKyAgICAgICAgICAgIHN5c3RlbUNvZGUgPSBz
dGQ6OmFicyhzeXN0ZW1Db2RlRm9yRXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG5leHRNZXNzYWdlID0gVWludDhBcnJheTo6Y3Jl
YXRlKFtyZXF1ZXN0IGxlbmd0aF0pOworICAgICAgICBbcmVxdWVzdCBnZXRCeXRlczpuZXh0TWVz
c2FnZS0+ZGF0YSgpIGxlbmd0aDpuZXh0TWVzc2FnZS0+bGVuZ3RoKCldOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKCFtX3NvdXJjZUJ1ZmZlcnMuaXNFbXB0eSgp
KTsKKyAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoJXAp
IC0ga2V5IGRhdGEiLCB0aGlzKTsKKyAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJv
cjsKKyAgICBzeXN0ZW1Db2RlID0gMDsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczprZXktPmRhdGEoKSBsZW5ndGg6
a2V5LT5sZW5ndGgoKV0pOworICAgIFtwcm90ZWN0ZWRTb3VyY2VCdWZmZXItPnBhcnNlcigpIHBy
b2Nlc3NDb250ZW50S2V5UmVzcG9uc2VEYXRhOmtleURhdGEuZ2V0KCkgZm9yVHJhY2tJRDpwcm90
ZWN0ZWRTb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKV07CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpzZXRTdHJlYW1TZXNzaW9u
KEFWU3RyZWFtU2Vzc2lvbiAqc3RyZWFtU2Vzc2lvbikKK3sKKyAgICBpZiAobV9zdHJlYW1TZXNz
aW9uICYmIGNhbkxvYWRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVu
dGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbigpKQorICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fZGF0YVBhcnNlck9ic2VydmVyLmdl
dCgpIG5hbWU6Z2V0QVZTdHJlYW1TZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRp
ZmllckNoYW5nZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bV9zdHJlYW1TZXNzaW9uLmdldCgpXTsK
KworICAgIG1fc3RyZWFtU2Vzc2lvbiA9IHN0cmVhbVNlc3Npb247CisKKyAgICBpZiAoIW1fc3Ry
ZWFtU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNhbkxvYWRBVlN0cmVhbVNl
c3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlv
bigpKQorICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOm1fZGF0YVBhcnNlck9ic2VydmVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcihjb250
ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZDopIG5hbWU6Z2V0QVZTdHJlYW1T
ZXNzaW9uQ29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllckNoYW5nZWROb3RpZmljYXRp
b24oKSBvYmplY3Q6bV9zdHJlYW1TZXNzaW9uLmdldCgpXTsKKworICAgIE5TRGF0YSogaWRlbnRp
ZmllciA9IFtzdHJlYW1TZXNzaW9uIGNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJd
OworICAgIFJldGFpblB0cjxOU1N0cmluZz4gc2Vzc2lvbklkZW50aWZpZXJTdHJpbmcgPSBpZGVu
dGlmaWVyID8gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6aWRlbnRpZmll
ciBlbmNvZGluZzooTlNVVEY4U3RyaW5nRW5jb2RpbmcpXSkgOiBuaWw7CisgICAgc2V0U2Vzc2lv
bklkKHNlc3Npb25JZGVudGlmaWVyU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBDRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uOjphZGRQYXJzZXIoQVZTdHJlYW1EYXRhUGFyc2VyKiBwYXJzZXIpCit7
CisgICAgaWYgKG1fc3RyZWFtU2Vzc2lvbikKKyAgICAgICAgW21fc3RyZWFtU2Vzc2lvbiBhZGRT
dHJlYW1EYXRhUGFyc2VyOnBhcnNlcl07Cit9CisKK3ZvaWQgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vz
c2lvbjo6cmVtb3ZlUGFyc2VyKEFWU3RyZWFtRGF0YVBhcnNlciogcGFyc2VyKQoreworICAgIGlm
IChtX3N0cmVhbVNlc3Npb24pCisgICAgICAgIFttX3N0cmVhbVNlc3Npb24gcmVtb3ZlU3RyZWFt
RGF0YVBhcnNlcjpwYXJzZXJdOworfQorCitQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IENETVNlc3Np
b25BVlN0cmVhbVNlc3Npb246OmdlbmVyYXRlS2V5UmVsZWFzZU1lc3NhZ2UodW5zaWduZWQgc2hv
cnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkKK3sKKyAgICBBU1NFUlQo
bV9tb2RlID09IEtleVJlbGVhc2UpOworICAgIG1fY2VydGlmaWNhdGUgPSBtX2luaXREYXRhOwor
ICAgIFJldGFpblB0cjxOU0RhdGE+IGNlcnRpZmljYXRlRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6bV9jZXJ0aWZpY2F0ZS0+ZGF0YSgpIGxlbmd0aDptX2NlcnRp
ZmljYXRlLT5sZW5ndGgoKV0pOworCisgICAgaWYgKCFbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3Mo
KSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9y
dHNXaXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pIHsKKyAgICAgICAg
ZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsKKyAgICAgICAg
c3lzdGVtQ29kZSA9ICchbW9yJzsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgTlNBcnJheSogZXhwaXJlZFNlc3Npb25zID0gW2dldEFWU3RyZWFtU2Vzc2lvbkNsYXNzKCkg
cGVuZGluZ0V4cGlyZWRTZXNzaW9uUmVwb3J0c1dpdGhBcHBJZGVudGlmaWVyOmNlcnRpZmljYXRl
RGF0YS5nZXQoKSBzdG9yYWdlRGlyZWN0b3J5QXRVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpz
dG9yYWdlUGF0aCgpXV07CisgICAgaWYgKCFbZXhwaXJlZFNlc3Npb25zIGNvdW50XSkgeworICAg
ICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpnZW5lcmF0ZUtleVJl
bGVhc2VNZXNzYWdlKCVwKSAtIG5vIGV4cGlyZWQgc2Vzc2lvbnMgZm91bmQiLCB0aGlzKTsKKwor
ICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6S2V5U3lzdGVtTm90U3VwcG9ydGVkOwor
ICAgICAgICBzeXN0ZW1Db2RlID0gJyFtb3InOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjpnZW5lcmF0
ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAtIGZvdW5kICVkIGV4cGlyZWQgc2Vzc2lvbnMiLCB0aGlz
LCBbZXhwaXJlZFNlc3Npb25zIGNvdW50XSk7CisKKyAgICBlcnJvckNvZGUgPSAwOworICAgIHN5
c3RlbUNvZGUgPSAwOworICAgIG1fZXhwaXJlZFNlc3Npb24gPSBbZXhwaXJlZFNlc3Npb25zIGZp
cnN0T2JqZWN0XTsKKyAgICByZXR1cm4gVWludDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lv
biBsZW5ndGhdKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMuaAppbmRleCA2ODBlNWVmOWI0Mzc4
OTdlOTFkNjA0OGQzOTYxYjAyY2VjOGFjNmFiLi5lZjhiZTI5YzNmZmU2MmEzNjQxMmMyZGE2ZmRj
MmY1NDE3Yzc5NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOSw2MiArMjksNjAgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9u
LmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIKICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKLU9CSkNfQ0xBU1Mg
QVZTdHJlYW1TZXNzaW9uOwotT0JKQ19DTEFTUyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpD
T2JzZXJ2ZXI7CitPQkpDX0NMQVNTIEFWU3RyZWFtRGF0YVBhcnNlcjsKK09CSkNfQ0xBU1MgTlNF
cnJvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDRE1Qcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOworCiBjbGFzcyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDIDogcHVibGlj
IENETVNlc3Npb24sIHB1YmxpYyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQ0Vycm9yQ2xpZW50
IHsKIHB1YmxpYzoKLSAgICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKGNvbnN0IFZlY3Rv
cjxpbnQ+JiBwcm90b2NvbFZlcnNpb25zKTsKKyAgICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZP
YmpDKENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMmLCBDRE1TZXNzaW9uQ2xpZW50Kik7CiAg
ICAgdmlydHVhbCB+Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQygpOwogCi0gICAgdmlydHVh
bCBDRE1TZXNzaW9uVHlwZSB0eXBlKCkgb3ZlcnJpZGUgeyByZXR1cm4gQ0RNU2Vzc2lvblR5cGVN
ZWRpYVNvdXJjZUFWRk9iakM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkUGFyc2VyKEFWU3RyZWFt
RGF0YVBhcnNlciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUGFyc2VyKEFWU3RyZWFt
RGF0YVBhcnNlciopID0gMDsKKworICAgIC8vIENETVNlc3Npb24KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2xpZW50KENETVNlc3Npb25DbGllbnQqIGNsaWVudCkgb3ZlcnJpZGUgeyBtX2NsaWVudCA9
IGNsaWVudDsgfQogICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3Nlc3Npb25JZDsgfQotICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4
QXJyYXk+IGdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBVaW50OEFy
cmF5KiBpbml0RGF0YSwgU3RyaW5nJiBkZXN0aW5hdGlvblVSTCwgdW5zaWduZWQgc2hvcnQmIGVy
cm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VLZXlzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZShV
aW50OEFycmF5KiwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0TWVzc2FnZSwgdW5zaWduZWQgc2hv
cnQmIGVycm9yQ29kZSwgdW5zaWduZWQgbG9uZyYgc3lzdGVtQ29kZSkgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQ0Vycm9yQ2xpZW50CiAgICAgdmlydHVhbCB2
b2lkIGxheWVyRGlkUmVjZWl2ZUVycm9yKEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyICosIE5T
RXJyb3IgKiwgYm9vbCYgc2hvdWxkSWdub3JlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyZXJEaWRSZWNlaXZlRXJyb3IoQVZTYW1wbGVCdWZmZXJBdWRpb1JlbmRlcmVyICosIE5T
RXJyb3IgKiwgYm9vbCYgc2hvdWxkSWdub3JlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0U3Ry
ZWFtU2Vzc2lvbihBVlN0cmVhbVNlc3Npb24gKik7Ci0KICAgICB2b2lkIGFkZFNvdXJjZUJ1ZmZl
cihTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopOwogICAgIHZvaWQgcmVtb3ZlU291cmNlQnVm
ZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKik7Ci0KICAgICB2b2lkIHNldFNlc3Npb25J
ZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgeyBtX3Nlc3Npb25JZCA9IHNlc3Npb25JZDsgfQog
CisgICAgdm9pZCBpbnZhbGlkYXRlQ0RNKCkgeyBtX2NkbSA9IG51bGxwdHI7IH0KKwogcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBsb25nIHN5c3RlbUNvZGVGb3JFcnJvcihOU0Vycm9yICopOwogICAg
IFN0cmluZyBzdG9yYWdlUGF0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8VWludDhBcnJheT4g
Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNp
Z25lZCBsb25nJiBzeXN0ZW1Db2RlKTsKIAorICAgIENETVByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMqIG1fY2RtOworICAgIENETVNlc3Npb25DbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9Owog
ICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM+PiBtX3NvdXJjZUJ1
ZmZlcnM7Ci0gICAgQ0RNU2Vzc2lvbkNsaWVudCogbV9jbGllbnQ7Ci0gICAgUmV0YWluUHRyPEFW
U3RyZWFtU2Vzc2lvbj4gbV9zdHJlYW1TZXNzaW9uOwotICAgIFJlZlB0cjxVaW50OEFycmF5PiBt
X2luaXREYXRhOwogICAgIFJlZlB0cjxVaW50OEFycmF5PiBtX2NlcnRpZmljYXRlOwotICAgIFJl
dGFpblB0cjxOU0RhdGE+IG1fZXhwaXJlZFNlc3Npb247Ci0gICAgUmV0YWluUHRyPENETVNlc3Np
b25NZWRpYVNvdXJjZUFWRk9iakNPYnNlcnZlcj4gbV9kYXRhUGFyc2VyT2JzZXJ2ZXI7Ci0gICAg
VmVjdG9yPGludD4gbV9wcm90b2NvbFZlcnNpb25zOwogICAgIFN0cmluZyBtX3Nlc3Npb25JZDsK
LSAgICBlbnVtIHsgTm9ybWFsLCBLZXlSZWxlYXNlIH0gbV9tb2RlOwotICAgIGJvb2wgbV9zdG9w
cGVkID0geyBmYWxzZSB9OworICAgIGJvb2wgbV9zdG9wcGVkIHsgZmFsc2UgfTsKIH07CiAKIGlu
bGluZSBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKiB0b0NETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakMoQ0RNU2Vzc2lvbiogc2Vzc2lvbikKIHsKLSAgICBpZiAoIXNlc3Npb24gfHwgc2Vz
c2lvbi0+dHlwZSgpICE9IENETVNlc3Npb25UeXBlTWVkaWFTb3VyY2VBVkZPYmpDKQorICAgIGlm
ICghc2Vzc2lvbiB8fCAoc2Vzc2lvbi0+dHlwZSgpICE9IENETVNlc3Npb25UeXBlQVZTdHJlYW1T
ZXNzaW9uICYmIHNlc3Npb24tPnR5cGUoKSAhPSBDRE1TZXNzaW9uVHlwZUFWQ29udGVudEtleVNl
c3Npb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyo+KHNlc3Npb24pOwogfQogCiB9CiAKLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCiAKICNlbmRpZiAvLyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpD
Lm1tCmluZGV4IGZjOTc3M2U5YmZiZGNiY2E3ZTFlZjJhNjg0NmYyN2MyZmZkNzZjOTIuLmQ5YjFl
NmQ1Yjc3NDc2M2RjOTNjNTcxZTE4MjNmYjg2ODIxZjg4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25NZWRp
YVNvdXJjZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjY1ICsyOCwy
MyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikgJiYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKIAotI2ltcG9ydCAiQ0RNLmgiCi0jaW1wb3J0ICJDRE1TZXNzaW9uLmgiCi0jaW1wb3J0
ICJFeGNlcHRpb25Db2RlLmgiCisjaW1wb3J0ICJDRE1Qcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJNZWRpYVBsYXllci5oIgotI2ltcG9ydCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCIK
LSNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCi0jaW1wb3J0ICJVVUlELmgiCiAjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZFcnJvci5oPgotI2ltcG9ydCA8Q29yZU1lZGlhL0NNQmFzZS5oPgogI2ltcG9y
dCA8Y3N0ZGxpYj4KLSNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+Ci0jaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbXBvcnQgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
LQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCi1TT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVlN0cmVhbURhdGFQYXJzZXIpOwotU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQVZTdHJlYW1TZXNzaW9uKTsKLVNPRlRfTElOS19DT05T
VEFOVF9NQVlfRkFJTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtRGF0YVBhcnNlckNvbnRlbnRLZXlS
ZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19DT05TVEFO
VF9NQVlfRkFJTChBVkZvdW5kYXRpb24sIEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9u
U2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQotCi1AaW50
ZXJmYWNlIEFWU3RyZWFtRGF0YVBhcnNlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXByb2Nlc3NDb250
ZW50S2V5UmVzcG9uc2VEYXRhOihOU0RhdGEgKiljb250ZW50S2V5UmVzcG9uc2VEYXRhIGZvclRy
YWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRDsKLS0gKHZvaWQpcHJvY2Vzc0NvbnRl
bnRLZXlSZXNwb25zZUVycm9yOihOU0Vycm9yICopZXJyb3IgZm9yVHJhY2tJRDooQ01QZXJzaXN0
ZW50VHJhY2tJRCl0cmFja0lEOwotLSAodm9pZClyZW5ld0V4cGlyaW5nQ29udGVudEtleVJlc3Bv
bnNlRGF0YUZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRyYWNrSUQpdHJhY2tJRDsKLS0gKE5TRGF0
YSAqKXN0cmVhbWluZ0NvbnRlbnRLZXlSZXF1ZXN0RGF0YUZvckFwcDooTlNEYXRhICopYXBwSWRl
bnRpZmllciBjb250ZW50SWRlbnRpZmllcjooTlNEYXRhICopY29udGVudElkZW50aWZpZXIgdHJh
Y2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiopb3V0RXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
QVZTdHJlYW1TZXNzaW9uIDogTlNPYmplY3QKLS0gKHZvaWQpYWRkU3RyZWFtRGF0YVBhcnNlcjoo
QVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlcjsKLS0gKHZvaWQpcmVtb3ZlU3Ry
ZWFtRGF0YVBhcnNlcjooQVZTdHJlYW1EYXRhUGFyc2VyICopc3RyZWFtRGF0YVBhcnNlcjsKLS0g
KHZvaWQpZXhwaXJlOwotLSAoTlNEYXRhICopY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRp
ZmllcjsKLSsgKE5TQXJyYXkgKilwZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElk
ZW50aWZpZXI6KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgc3RvcmFnZURpcmVjdG9yeUF0VVJMOihO
U1VSTCAqKXN0b3JhZ2VVUkw7Ci0rICh2b2lkKXJlbW92ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJl
cG9ydHM6KE5TQXJyYXkgKilleHBpcmVkU2Vzc2lvblJlcG9ydHMgd2l0aEFwcElkZW50aWZpZXI6
KE5TRGF0YSAqKWFwcElkZW50aWZpZXIgc3RvcmFnZURpcmVjdG9yeUF0VVJMOihOU1VSTCAqKXN0
b3JhZ2VVUkw7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2Jq
Q09ic2VydmVyIDogTlNPYmplY3QgewotICAgIFdlYkNvcmU6OkNETVNlc3Npb25NZWRpYVNvdXJj
ZUFWRk9iakMgKm1fcGFyZW50OwotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gQ0RNU2Vzc2lv
bk1lZGlhU291cmNlQVZGT2JqQ09ic2VydmVyCi0tIChpZClpbml0V2l0aFBhcmVudDooV2ViQ29y
ZTo6Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyAqKXBhcmVudAotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIG1fcGFyZW50ID0gcGFyZW50OwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJD
aGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIEFWU3RyZWFtU2Vz
c2lvbiogc3RyZWFtU2Vzc2lvbiA9IChBVlN0cmVhbVNlc3Npb24qKVtub3RpZmljYXRpb24gb2Jq
ZWN0XTsKLQotICAgIE5TRGF0YSogaWRlbnRpZmllciA9IFtzdHJlYW1TZXNzaW9uIGNvbnRlbnRQ
cm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJdOwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gc2Vz
c2lvbklkZW50aWZpZXJTdHJpbmcgPSBpZGVudGlmaWVyID8gYWRvcHROUyhbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aERhdGE6aWRlbnRpZmllciBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z10pIDogbmlsOwotCi0gICAgaWYgKG1fcGFyZW50KQotICAgICAgICBtX3BhcmVudC0+c2V0U2Vz
c2lvbklkKHNlc3Npb25JZGVudGlmaWVyU3RyaW5nLmdldCgpKTsKLX0KLUBlbmQKLQotc3RhdGlj
IGNvbnN0IE5TU3RyaW5nICpQbGF5YmFja1Nlc3Npb25JZEtleSA9IEAiUGxheWJhY2tTZXNzaW9u
SUQiOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akM6OkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakMoY29uc3QgVmVjdG9yPGludD4mIHByb3Rv
Y29sVmVyc2lvbnMpCi0gICAgOiBtX2NsaWVudChudWxscHRyKQotICAgICwgbV9kYXRhUGFyc2Vy
T2JzZXJ2ZXIoYWRvcHROUyhbW0NETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakNPYnNlcnZlciBh
bGxvY10gaW5pdFdpdGhQYXJlbnQ6dGhpc10pKQotICAgICwgbV9wcm90b2NvbFZlcnNpb25zKHBy
b3RvY29sVmVyc2lvbnMpCi0gICAgLCBtX21vZGUoTm9ybWFsKQorQ0RNU2Vzc2lvbk1lZGlhU291
cmNlQVZGT2JqQzo6Q0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyhDRE1Qcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDJiBjZG0sIENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2Rt
KCZjZG0pCisgICAgLCBtX2NsaWVudChjbGllbnQpCiB7CiB9CiAKIENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakM6On5DRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKCkKIHsKLSAgICBmb3Ig
KGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fc291cmNlQnVmZmVycykgewotICAgICAgICBpZiAobV9z
dHJlYW1TZXNzaW9uKQotICAgICAgICAgICAgW21fc3RyZWFtU2Vzc2lvbiByZW1vdmVTdHJlYW1E
YXRhUGFyc2VyOnNvdXJjZUJ1ZmZlci0+cGFyc2VyKCldOwotICAgIH0KLQotICAgIHNldFN0cmVh
bVNlc3Npb24obnVsbHB0cik7Ci19Ci0KLVJlZlB0cjxVaW50OEFycmF5PiBDRE1TZXNzaW9uTWVk
aWFTb3VyY2VBVkZPYmpDOjpnZW5lcmF0ZUtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgVWludDhBcnJheSogaW5pdERhdGEsIFN0cmluZyYgZGVzdGluYXRpb25VUkwsIHVuc2lnbmVk
IHNob3J0JiBlcnJvckNvZGUsIHVuc2lnbmVkIGxvbmcmIHN5c3RlbUNvZGUpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKG1pbWVUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwot
ICAgIEFTU0VSVChpbml0RGF0YSk7Ci0KLSAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFT
b3VyY2VBVkZPYmpDOjpnZW5lcmF0ZUtleVJlcXVlc3QoJXApIiwgdGhpcyk7Ci0KLSAgICBlcnJv
ckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKLSAgICBzeXN0ZW1Db2RlID0gMDsKLQotICAg
IG1faW5pdERhdGEgPSBpbml0RGF0YTsKLQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1l
VHlwZSwgImtleXJlbGVhc2UiKSkgewotICAgICAgICBtX21vZGUgPSBLZXlSZWxlYXNlOwotICAg
ICAgICByZXR1cm4gZ2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZShlcnJvckNvZGUsIHN5c3RlbUNv
ZGUpOwotICAgIH0KLQotICAgIFN0cmluZyBjZXJ0aWZpY2F0ZVN0cmluZyhBU0NJSUxpdGVyYWwo
ImNlcnRpZmljYXRlIikpOwotICAgIFJlZlB0cjxVaW50OEFycmF5PiBhcnJheSA9IFVpbnQ4QXJy
YXk6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5sZW5ndGgoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgbGVuZ3RoID0gY2VydGlmaWNhdGVTdHJpbmcubGVuZ3RoKCk7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgYXJyYXktPnNldChpLCBjZXJ0aWZpY2F0ZVN0cmluZ1tpXSk7Ci0gICAg
cmV0dXJuIGFycmF5OwotfQotCi12b2lkIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnJl
bGVhc2VLZXlzKCkKLXsKLSAgICBpZiAobV9zdHJlYW1TZXNzaW9uKSB7Ci0gICAgICAgIG1fc3Rv
cHBlZCA9IHRydWU7Ci0gICAgICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogbV9zb3VyY2VC
dWZmZXJzKQotICAgICAgICAgICAgc291cmNlQnVmZmVyLT5mbHVzaCgpOwotCi0gICAgICAgIExP
RyhNZWRpYSwgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnJlbGVhc2VLZXlzKCVwKSAt
IGV4cGlyaW5nIHN0cmVhbSBzZXNzaW9uIiwgdGhpcyk7Ci0gICAgICAgIFttX3N0cmVhbVNlc3Np
b24gZXhwaXJlXTsKLQotICAgICAgICBpZiAoIW1fY2VydGlmaWNhdGUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKCFbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBw
SWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5QXRVUkw6KV0pCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHROUyhb
W05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVuZ3Ro
Om1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7Ci0gICAgICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNz
aW9ucyA9IFtnZXRBVlN0cmVhbVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJl
cG9ydHNXaXRoQXBwSWRlbnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVj
dG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOwotICAgICAg
ICBmb3IgKE5TRGF0YSogZXhwaXJlZFNlc3Npb25EYXRhIGluIGV4cGlyZWRTZXNzaW9ucykgewot
ICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpleHBpcmVkU2Vzc2lvbiA9IFtOU1Byb3BlcnR5TGlz
dFNlcmlhbGl6YXRpb24gcHJvcGVydHlMaXN0V2l0aERhdGE6ZXhwaXJlZFNlc3Npb25EYXRhIG9w
dGlvbnM6a0NGUHJvcGVydHlMaXN0SW1tdXRhYmxlIGZvcm1hdDpudWxscHRyIGVycm9yOm51bGxw
dHJdOwotICAgICAgICAgICAgTlNTdHJpbmcgKnBsYXliYWNrU2Vzc2lvbklkVmFsdWUgPSAoTlNT
dHJpbmcgKilbZXhwaXJlZFNlc3Npb24gb2JqZWN0Rm9yS2V5OlBsYXliYWNrU2Vzc2lvbklkS2V5
XTsKLSAgICAgICAgICAgIGlmICghW3BsYXliYWNrU2Vzc2lvbklkVmFsdWUgaXNLaW5kT2ZDbGFz
czpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgaWYgKG1fc2Vzc2lvbklkID09IFN0cmluZyhwbGF5YmFja1Nlc3Npb25JZFZhbHVlKSkg
ewotICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akM6OnJlbGVhc2VLZXlzKCVwKSAtIGZvdW5kIHNlc3Npb24sIHNlbmRpbmcgZXhwaXJhdGlvbiBt
ZXNzYWdlIik7Ci0gICAgICAgICAgICAgICAgbV9leHBpcmVkU2Vzc2lvbiA9IGV4cGlyZWRTZXNz
aW9uRGF0YTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2UoVWludDhBcnJh
eTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBi
eXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBsZW5ndGhdKS5nZXQoKSwgZW1wdHlTdHJpbmcoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXN0YXRpYyBib29sIGlzRXF1YWwoVWludDhBcnJheSogZGF0YSwgY29uc3QgY2hhciog
bGl0ZXJhbCkKLXsKLSAgICBBU1NFUlQoZGF0YSk7Ci0gICAgQVNTRVJUKGxpdGVyYWwpOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGRhdGEtPmxlbmd0aCgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghbGl0ZXJhbFtpXSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0YS0+aXRlbShpKSAhPSBzdGF0
aWNfY2FzdDx1aW50OF90PihsaXRlcmFsW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuICFsaXRlcmFsW2xlbmd0aF07Ci19Ci0KLXN0YXRpYyBOU0ludGVn
ZXIgc3lzdGVtQ29kZUZvckVycm9yKE5TRXJyb3IgKmVycm9yKQotewotICAgIE5TSW50ZWdlciBj
b2RlID0gW2Vycm9yIGNvZGVdOwotICAgIGlmIChjb2RlICE9IEFWRXJyb3JVbmtub3duKQotICAg
ICAgICByZXR1cm4gY29kZTsKLQotICAgIE5TRXJyb3IqIHVuZGVybHlpbmdFcnJvciA9IFtlcnJv
ci51c2VySW5mbyB2YWx1ZUZvcktleTpOU1VuZGVybHlpbmdFcnJvcktleV07Ci0gICAgaWYgKCF1
bmRlcmx5aW5nRXJyb3IgfHwgIVt1bmRlcmx5aW5nRXJyb3IgaXNLaW5kT2ZDbGFzczpbTlNFcnJv
ciBjbGFzc11dKQotICAgICAgICByZXR1cm4gY29kZTsKLSAgICAKLSAgICByZXR1cm4gW3VuZGVy
bHlpbmdFcnJvciBjb2RlXTsKLX0KLQotYm9vbCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpD
Ojp1cGRhdGUoVWludDhBcnJheSoga2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHRNZXNzYWdl
LCB1bnNpZ25lZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQot
ewotICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVLZXlSZXF1ZXN0ID0gIW1fY2VydGlmaWNhdGUgfHwg
aXNFcXVhbChrZXksICJyZW5ldyIpOwotICAgIGlmICghbV9jZXJ0aWZpY2F0ZSkgewotICAgICAg
ICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjp1cGRhdGUoJXApIC0g
Y2VydGlmaWNhdGUgZGF0YSIsIHRoaXMpOwotCi0gICAgICAgIG1fY2VydGlmaWNhdGUgPSBrZXk7
Ci0gICAgfQotCi0gICAgaWYgKGlzRXF1YWwoa2V5LCAiYWNrbm93bGVkZ2VkIikpIHsKLSAgICAg
ICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQzo6dXBkYXRlKCVwKSAt
IGFja25vd2xlZGluZyBzZWN1cmUgc3RvcCBtZXNzYWdlIiwgdGhpcyk7Ci0KLSAgICAgICAgaWYg
KCFtX2V4cGlyZWRTZXNzaW9uKSB7Ci0gICAgICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXll
cjo6SW52YWxpZFBsYXllclN0YXRlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVu
Z3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7Ci0KLSAgICAgICAgaWYgKFtnZXRBVlN0cmVh
bVNlc3Npb25DbGFzcygpIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocmVtb3ZlUGVuZGlu
Z0V4cGlyZWRTZXNzaW9uUmVwb3J0czp3aXRoQXBwSWRlbnRpZmllcjpzdG9yYWdlRGlyZWN0b3J5
QXRVUkw6KV0pCi0gICAgICAgICAgICBbZ2V0QVZTdHJlYW1TZXNzaW9uQ2xhc3MoKSByZW1vdmVQ
ZW5kaW5nRXhwaXJlZFNlc3Npb25SZXBvcnRzOkBbbV9leHBpcmVkU2Vzc2lvbi5nZXQoKV0gd2l0
aEFwcElkZW50aWZpZXI6Y2VydGlmaWNhdGVEYXRhLmdldCgpIHN0b3JhZ2VEaXJlY3RvcnlBdFVS
TDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnN0b3JhZ2VQYXRoKCldXTsKLSAgICAgICAgbV9leHBp
cmVkU2Vzc2lvbiA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGlmIChtX21vZGUgPT0gS2V5UmVsZWFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDPiBwcm90ZWN0ZWRTb3VyY2VCdWZmZXI7
Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKLSAgICAg
ICAgaWYgKHNvdXJjZUJ1ZmZlci0+cHJvdGVjdGVkVHJhY2tJRCgpICE9IC0xKSB7Ci0gICAgICAg
ICAgICBwcm90ZWN0ZWRTb3VyY2VCdWZmZXIgPSBzb3VyY2VCdWZmZXI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzaG91bGRHZW5lcmF0ZUtleVJlcXVl
c3QpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gY2VydGlmaWNhdGVEYXRhID0gYWRvcHRO
UyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczptX2NlcnRpZmljYXRlLT5kYXRhKCkgbGVu
Z3RoOm1fY2VydGlmaWNhdGUtPmxlbmd0aCgpXSk7Ci0KLSAgICAgICAgaWYgKG1fc291cmNlQnVm
ZmVycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAo
IXByb3RlY3RlZFNvdXJjZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgIFJldGFpblB0cjxOU0RhdGE+IGluaXREYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczptX2luaXREYXRhLT5kYXRhKCkgbGVuZ3RoOm1faW5pdERhdGEtPmxlbmd0
aCgpXSk7Ci0KLQotICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOwotICAg
ICAgICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5KCkgJiYgY2FuTG9hZEFWU3RyZWFt
RGF0YVBhcnNlckNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24g
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgewotICAgICAgICAgICAgICAg
IGlmICghdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zID0gQHsgZ2V0QVZTdHJlYW1EYXRhUGFy
c2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5KCk6IHByb3RvY29sVmVyc2lv
bnNPcHRpb24uZ2V0KCkgfTsKLSAgICAgICAgfQotCi0gICAgICAgIE5TRXJyb3IqIGVycm9yID0g
bmlsOwotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXF1ZXN0ID0gW3Byb3RlY3RlZFNvdXJj
ZUJ1ZmZlci0+cGFyc2VyKCkgc3RyZWFtaW5nQ29udGVudEtleVJlcXVlc3REYXRhRm9yQXBwOmNl
cnRpZmljYXRlRGF0YS5nZXQoKSBjb250ZW50SWRlbnRpZmllcjppbml0RGF0YS5nZXQoKSB0cmFj
a0lEOnByb3RlY3RlZFNvdXJjZUJ1ZmZlci0+cHJvdGVjdGVkVHJhY2tJRCgpIG9wdGlvbnM6b3B0
aW9ucy5nZXQoKSBlcnJvcjomZXJyb3JdOwotCi0gICAgICAgIGlmICghW3Byb3RlY3RlZFNvdXJj
ZUJ1ZmZlci0+cGFyc2VyKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50UHJv
dGVjdGlvblNlc3Npb25JZGVudGlmaWVyKV0pCi0gICAgICAgICAgICBtX3Nlc3Npb25JZCA9IGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLQotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnVwZGF0ZSgl
cCkgLSBlcnJvcjolQCIsIHRoaXMsIFtlcnJvciBkZXNjcmlwdGlvbl0pOwotICAgICAgICAgICAg
ZXJyb3JDb2RlID0gTWVkaWFQbGF5ZXI6OkludmFsaWRQbGF5ZXJTdGF0ZTsKLSAgICAgICAgICAg
IHN5c3RlbUNvZGUgPSBzdGQ6OmFicyhzeXN0ZW1Db2RlRm9yRXJyb3IoZXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG5leHRNZXNzYWdlID0g
VWludDhBcnJheTo6Y3JlYXRlKFtyZXF1ZXN0IGxlbmd0aF0pOwotICAgICAgICBbcmVxdWVzdCBn
ZXRCeXRlczpuZXh0TWVzc2FnZS0+ZGF0YSgpIGxlbmd0aDpuZXh0TWVzc2FnZS0+bGVuZ3RoKCld
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFtX3NvdXJjZUJ1
ZmZlcnMuaXNFbXB0eSgpKTsKLSAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDOjp1cGRhdGUoJXApIC0ga2V5IGRhdGEiLCB0aGlzKTsKLSAgICBlcnJvckNvZGUgPSBN
ZWRpYVBsYXllcjo6Tm9FcnJvcjsKLSAgICBzeXN0ZW1Db2RlID0gMDsKLSAgICBSZXRhaW5QdHI8
TlNEYXRhPiBrZXlEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpr
ZXktPmRhdGEoKSBsZW5ndGg6a2V5LT5sZW5ndGgoKV0pOwotICAgIFtwcm90ZWN0ZWRTb3VyY2VC
dWZmZXItPnBhcnNlcigpIHByb2Nlc3NDb250ZW50S2V5UmVzcG9uc2VEYXRhOmtleURhdGEuZ2V0
KCkgZm9yVHJhY2tJRDpwcm90ZWN0ZWRTb3VyY2VCdWZmZXItPnByb3RlY3RlZFRyYWNrSUQoKV07
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9jZG0pCisgICAgICAgIG1fY2RtLT5pbnZh
bGlkYXRlU2Vzc2lvbih0aGlzKTsKIH0KIAogdm9pZCBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZP
YmpDOjpsYXllckRpZFJlY2VpdmVFcnJvcihBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciAqLCBO
U0Vycm9yICplcnJvciwgYm9vbCYgc2hvdWxkSWdub3JlKQpAQCAtMzE1LDI5ICs3MywxNCBAQCB2
b2lkIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnJlbmRlcmVyRGlkUmVjZWl2ZUVycm9y
KEFWU2FtcGxlQnVmZmVyQXVkaW9SZQogICAgICAgICBtX2NsaWVudC0+c2VuZEVycm9yKENETVNl
c3Npb25DbGllbnQ6Ok1lZGlhS2V5RXJyb3JEb21haW4sIGNvZGUpOwogfQogCi12b2lkIENETVNl
c3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnNldFN0cmVhbVNlc3Npb24oQVZTdHJlYW1TZXNzaW9u
ICpzdHJlYW1TZXNzaW9uKQotewotICAgIGlmIChtX3N0cmVhbVNlc3Npb24gJiYgY2FuTG9hZEFW
U3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkTm90
aWZpY2F0aW9uKCkpCi0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6bV9kYXRhUGFyc2VyT2JzZXJ2ZXIuZ2V0KCkgbmFtZTpnZXRBVlN0
cmVhbVNlc3Npb25Db250ZW50UHJvdGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlm
aWNhdGlvbigpIG9iamVjdDptX3N0cmVhbVNlc3Npb24uZ2V0KCldOwotCi0gICAgbV9zdHJlYW1T
ZXNzaW9uID0gc3RyZWFtU2Vzc2lvbjsKLQotICAgIGlmICghbV9zdHJlYW1TZXNzaW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoY2FuTG9hZEFWU3RyZWFtU2Vzc2lvbkNvbnRlbnRQcm90
ZWN0aW9uU2Vzc2lvbklkZW50aWZpZXJDaGFuZ2VkTm90aWZpY2F0aW9uKCkpCi0gICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9kYXRhUGFy
c2VyT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnRQcm90ZWN0aW9uU2Vz
c2lvbklkZW50aWZpZXJDaGFuZ2VkOikgbmFtZTpnZXRBVlN0cmVhbVNlc3Npb25Db250ZW50UHJv
dGVjdGlvblNlc3Npb25JZGVudGlmaWVyQ2hhbmdlZE5vdGlmaWNhdGlvbigpIG9iamVjdDptX3N0
cmVhbVNlc3Npb24uZ2V0KCldOwotCi0gICAgTlNEYXRhKiBpZGVudGlmaWVyID0gW3N0cmVhbVNl
c3Npb24gY29udGVudFByb3RlY3Rpb25TZXNzaW9uSWRlbnRpZmllcl07Ci0gICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBzZXNzaW9uSWRlbnRpZmllclN0cmluZyA9IGlkZW50aWZpZXIgPyBhZG9wdE5T
KFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTppZGVudGlmaWVyIGVuY29kaW5nOihOU1VU
RjhTdHJpbmdFbmNvZGluZyldKSA6IG5pbDsKLSAgICBzZXRTZXNzaW9uSWQoc2Vzc2lvbklkZW50
aWZpZXJTdHJpbmcuZ2V0KCkpOwotfQogCiB2b2lkIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9i
akM6OmFkZFNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyogc291cmNlQnVm
ZmVyKQogewogICAgIEFTU0VSVCghbV9zb3VyY2VCdWZmZXJzLmNvbnRhaW5zKHNvdXJjZUJ1ZmZl
cikpOwogICAgIEFTU0VSVChzb3VyY2VCdWZmZXIpOwogCisgICAgYWRkUGFyc2VyKHNvdXJjZUJ1
ZmZlci0+cGFyc2VyKCkpOworCiAgICAgbV9zb3VyY2VCdWZmZXJzLmFwcGVuZChzb3VyY2VCdWZm
ZXIpOwogICAgIHNvdXJjZUJ1ZmZlci0+cmVnaXN0ZXJGb3JFcnJvck5vdGlmaWNhdGlvbnModGhp
cyk7CiB9CkBAIC0zNDcsNDcgKzkwLDMwIEBAIHZvaWQgQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZG
T2JqQzo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDCiAgICAg
QVNTRVJUKG1fc291cmNlQnVmZmVycy5jb250YWlucyhzb3VyY2VCdWZmZXIpKTsKICAgICBBU1NF
UlQoc291cmNlQnVmZmVyKTsKIAotICAgIGlmIChtX3N0cmVhbVNlc3Npb24pCi0gICAgICAgIFtt
X3N0cmVhbVNlc3Npb24gcmVtb3ZlU3RyZWFtRGF0YVBhcnNlcjpzb3VyY2VCdWZmZXItPnBhcnNl
cigpXTsKKyAgICByZW1vdmVQYXJzZXIoc291cmNlQnVmZmVyLT5wYXJzZXIoKSk7CiAKICAgICBz
b3VyY2VCdWZmZXItPnVucmVnaXN0ZXJGb3JFcnJvck5vdGlmaWNhdGlvbnModGhpcyk7CiAgICAg
bV9zb3VyY2VCdWZmZXJzLnJlbW92ZShtX3NvdXJjZUJ1ZmZlcnMuZmluZChzb3VyY2VCdWZmZXIp
KTsKIH0KIAotU3RyaW5nIENETVNlc3Npb25NZWRpYVNvdXJjZUFWRk9iakM6OnN0b3JhZ2VQYXRo
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jbGllbnQgPyBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9jbGllbnQtPm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKSwgIlNlY3VyZVN0b3AucGxp
c3QiKSA6IGVtcHR5U3RyaW5nKCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gQ0RNU2Vz
c2lvbk1lZGlhU291cmNlQVZGT2JqQzo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSh1bnNpZ25l
ZCBzaG9ydCYgZXJyb3JDb2RlLCB1bnNpZ25lZCBsb25nJiBzeXN0ZW1Db2RlKQorbG9uZyBDRE1T
ZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpzeXN0ZW1Db2RlRm9yRXJyb3IoTlNFcnJvciAqZXJy
b3IpCiB7Ci0gICAgQVNTRVJUKG1fbW9kZSA9PSBLZXlSZWxlYXNlKTsKLSAgICBtX2NlcnRpZmlj
YXRlID0gbV9pbml0RGF0YTsKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEg
PSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm1fY2VydGlmaWNhdGUtPmRh
dGEoKSBsZW5ndGg6bV9jZXJ0aWZpY2F0ZS0+bGVuZ3RoKCldKTsKLQotICAgIGlmICghW2dldEFW
U3RyZWFtU2Vzc2lvbkNsYXNzKCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwZW5kaW5n
RXhwaXJlZFNlc3Npb25SZXBvcnRzV2l0aEFwcElkZW50aWZpZXI6c3RvcmFnZURpcmVjdG9yeUF0
VVJMOildKSB7Ci0gICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RT
dXBwb3J0ZWQ7Ci0gICAgICAgIHN5c3RlbUNvZGUgPSAnIW1vcic7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIE5TQXJyYXkqIGV4cGlyZWRTZXNzaW9ucyA9IFtnZXRBVlN0
cmVhbVNlc3Npb25DbGFzcygpIHBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHNXaXRoQXBwSWRl
bnRpZmllcjpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOltOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6c3RvcmFnZVBhdGgoKV1dOwotICAgIGlmICghW2V4cGlyZWRTZXNz
aW9ucyBjb3VudF0pIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbk1lZGlhU291cmNl
QVZGT2JqQzo6Z2VuZXJhdGVLZXlSZWxlYXNlTWVzc2FnZSglcCkgLSBubyBleHBpcmVkIHNlc3Np
b25zIGZvdW5kIiwgdGhpcyk7CisgICAgTlNJbnRlZ2VyIGNvZGUgPSBbZXJyb3IgY29kZV07Cisg
ICAgaWYgKGNvZGUgIT0gQVZFcnJvclVua25vd24pCisgICAgICAgIHJldHVybiBjb2RlOwogCi0g
ICAgICAgIGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7Ci0g
ICAgICAgIHN5c3RlbUNvZGUgPSAnIW1vcic7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KKyAgICBOU0Vycm9yKiB1bmRlcmx5aW5nRXJyb3IgPSBbZXJyb3IudXNlckluZm8gdmFsdWVG
b3JLZXk6TlNVbmRlcmx5aW5nRXJyb3JLZXldOworICAgIGlmICghdW5kZXJseWluZ0Vycm9yIHx8
ICFbdW5kZXJseWluZ0Vycm9yIGlzS2luZE9mQ2xhc3M6W05TRXJyb3IgY2xhc3NdXSkKKyAgICAg
ICAgcmV0dXJuIGNvZGU7CiAKLSAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VB
VkZPYmpDOjpnZW5lcmF0ZUtleVJlbGVhc2VNZXNzYWdlKCVwKSAtIGZvdW5kICVkIGV4cGlyZWQg
c2Vzc2lvbnMiLCB0aGlzLCBbZXhwaXJlZFNlc3Npb25zIGNvdW50XSk7CisgICAgcmV0dXJuIFt1
bmRlcmx5aW5nRXJyb3IgY29kZV07Cit9CiAKLSAgICBlcnJvckNvZGUgPSAwOwotICAgIHN5c3Rl
bUNvZGUgPSAwOwotICAgIG1fZXhwaXJlZFNlc3Npb24gPSBbZXhwaXJlZFNlc3Npb25zIGZpcnN0
T2JqZWN0XTsKLSAgICByZXR1cm4gVWludDhBcnJheTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihbbV9leHBpcmVkU2Vzc2lvbiBieXRlc10pLCBbbV9leHBpcmVkU2Vzc2lvbiBs
ZW5ndGhdKTsKK1N0cmluZyBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDOjpzdG9yYWdlUGF0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50ID8gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG1fY2xpZW50LT5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCksICJTZWN1cmVTdG9wLnBs
aXN0IikgOiBlbXB0eVN0cmluZygpOwogfQogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShFTkNSWVBURURfTUVESUFfVjIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmgKaW5kZXggNTRjYWM3MTA2OTVmNDkyZDJlNTIyMGM4YzcyNmNjMTQ2ZTU5N2JhZi4u
MGFmM2VhMzVhYWQ0MmJkMDkzYTIwM2NiNThiMGYwNmI0YjhiNWY4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMuaApAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUFfVjIpCi0gICAgc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNy
ZWF0ZVNlc3Npb24oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0pIG92ZXJyaWRlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDRE1TZXNzaW9uPiBjcmVhdGVTZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtLCBDRE1TZXNzaW9uQ2xpZW50Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
U3RyaW5nIGxhbmd1YWdlT2ZQcmltYXJ5QXVkaW9UcmFjaygpIGNvbnN0IG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMubW0KaW5kZXggYWY4YmEyMzU3NGIxZjY0NDU5ZTMyMTRkMmRiOTcyN2Yw
MzQxM2ZiMi4uOTgwZTQzMWY2ZDJjMTQ2ZjViYzExYjk3MmVjNjlmNjAzNTdjOGI1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tCkBAIC0xNjIsNiArMTYyLDcgQEAgdHlwZWRlZiBBVk1lZGlhU2Vs
ZWN0aW9uT3B0aW9uIEFWTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlOwogI2ltcG9ydCAiQ29yZU1l
ZGlhU29mdExpbmsuaCIKIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRp
b24pCisKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZUltYWdlKQogU09GVF9MSU5L
X0ZSQU1FV09SS19PUFRJT05BTChDb3JlVmlkZW8pCiAKQEAgLTI3NjYsMTIgKzI3NjcsMTIgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjprZXlBZGRlZCgpCiAgICAg
ICAgIG1fa2V5VVJJVG9SZXF1ZXN0TWFwLnJlbW92ZShrZXlJZCk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxDRE1TZXNzaW9uPiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVh
dGVTZXNzaW9uKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQorc3RkOjp1bmlxdWVfcHRyPENETVNl
c3Npb24+IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVNlc3Npb24o
Y29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIENETVNlc3Npb25DbGllbnQqIGNsaWVudCkKIHsKICAg
ICBpZiAoIWtleVN5c3RlbUlzU3VwcG9ydGVkKGtleVN5c3RlbSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q0RNU2Vzc2lvbkFWRm91bmRh
dGlvbk9iakM+KHRoaXMpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENETVNlc3Npb25B
VkZvdW5kYXRpb25PYmpDPih0aGlzLCBjbGllbnQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmgKaW5kZXggNTM3MWQ2NjI3ZWNlMTQzZDU5OGU1NDhhNWZlOTBiMzNiNzNjYTAw
ZS4uN2ViOTlkYThmYzExYzkyNjMzZjE2YjhiYzlmMzU3MGZkNjFmZDBlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3Ry
ZWFtU2Vzc2lvbigpIHsgcmV0dXJuIG1fc3RyZWFtU2Vzc2lvbjsgfQogICAgIEFWU3RyZWFtU2Vz
c2lvbiAqc3RyZWFtU2Vzc2lvbigpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDRE1TZXNzaW9uKENE
TVNlc3Npb24qKSBvdmVycmlkZTsKKyAgICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKiBj
ZG1TZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uOyB9CiAgICAgdm9pZCBrZXlOZWVk
ZWQoVWludDhBcnJheSopOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQppbmRl
eCBiYzRjNjk4N2RjNjI2ZDQzN2M5NWE0NjM4NTNlYzExNDczMmMyMjZlLi4xNTU3MTliNTYxMzEw
NDRmMDQzZmVjOTlhMGMzNmZlZGRkNzg2MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1t
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQogCisjaW1wb3J0ICJDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLmgiCiAjaW1w
b3J0ICJDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVt
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCkBAIC03MDMsMTkgKzcwNCwxNSBAQCBBVlN0cmVhbVNl
c3Npb24qIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RyZWFtU2Vzc2lv
bigpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRDRE1T
ZXNzaW9uKENETVNlc3Npb24qIHNlc3Npb24pCiB7Ci0gICAgaWYgKG1fc2Vzc2lvbikgewotICAg
ICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zb3Vy
Y2VCdWZmZXJzKCkpCi0gICAgICAgICAgICBtX3Nlc3Npb24tPnJlbW92ZVNvdXJjZUJ1ZmZlcihz
b3VyY2VCdWZmZXIuZ2V0KCkpOwotICAgICAgICBtX3Nlc3Npb24gPSBudWxscHRyOwotICAgIH0K
KyAgICBpZiAoc2Vzc2lvbiA9PSBtX3Nlc3Npb24pCisgICAgICAgIHJldHVybjsKIAogICAgIG1f
c2Vzc2lvbiA9IHRvQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyhzZXNzaW9uKTsKIAotICAg
IGlmIChtX3Nlc3Npb24pIHsKLSAgICAgICAgbV9zZXNzaW9uLT5zZXRTdHJlYW1TZXNzaW9uKG1f
c3RyZWFtU2Vzc2lvbi5nZXQoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDog
bV9tZWRpYVNvdXJjZVByaXZhdGUtPnNvdXJjZUJ1ZmZlcnMoKSkKLSAgICAgICAgICAgIG1fc2Vz
c2lvbi0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlci5nZXQoKSk7Ci0gICAgfQorICAgIGlm
IChDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uKiBjZG1TdHJlYW1TZXNzaW9uID0gdG9DRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uKG1fc2Vzc2lvbikpCisgICAgICAgIGNkbVN0cmVhbVNlc3Npb24t
PnNldFN0cmVhbVNlc3Npb24obV9zdHJlYW1TZXNzaW9uLmdldCgpKTsKKyAgICBmb3IgKGF1dG8m
IHNvdXJjZUJ1ZmZlciA6IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zb3VyY2VCdWZmZXJzKCkpCisg
ICAgICAgIHNvdXJjZUJ1ZmZlci0+c2V0Q0RNU2Vzc2lvbihtX3Nlc3Npb24pOwogfQogCiB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6a2V5TmVlZGVkKFVpbnQ4QXJy
YXkqIGluaXREYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDLmgKaW5kZXggNzc3YmEzMDk1OGViMzRkMzIwNjg4Mjc2N2YxNjMxMTRm
N2FhNmNiZi4uZjk0OGM4NjY3ZWQxZjg0ZjQyMjk1NDY0MjI5OTJmZjA3MmRkNDVjZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5o
CkBAIC0yOSw5ICsyOSwxMSBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZP
VU5EQVRJT04pCiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlLmgiCisjaW5jbHVkZSA8
ZGlzcGF0Y2gvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L09TT2JqZWN0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01Myw2ICs1NSw3IEBAIHR5
cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24gKkNNRm9ybWF0RGVz
Y3JpcHRpb25SZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0RNU2Vzc2lvbk1l
ZGlhU291cmNlQVZGT2JqQzsKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM7CiBjbGFz
cyBUaW1lUmFuZ2VzOwogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGU7CkBAIC04MCw3ICs4Myw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGludCB0cmFj
a0lELCBDTVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHVuc2lnbmVk
IGZsYWdzKTsKICAgICB2b2lkIGRpZFJlYWNoRW5kT2ZUcmFja1dpdGhUcmFja0lEKGludCB0cmFj
a0lELCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSk7CiAgICAgdm9pZCB3aWxsUHJvdmlkZUNvbnRl
bnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChpbnQgdHJhY2tJRCk7Ci0g
ICAgdm9pZCBkaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JU
cmFja0lEKE5TRGF0YSosIGludCB0cmFja0lEKTsKKyAgICB2b2lkIGRpZFByb3ZpZGVDb250ZW50
S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoTlNEYXRhKiwgaW50IHRyYWNr
SUQsIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3NlbWFwaG9yZV90Pik7CiAKICAgICBib29sIHByb2Nl
c3NDb2RlZEZyYW1lKGludCB0cmFja0lELCBDTVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgU3RyaW5n
JiBtZWRpYVR5cGUpOwogCkBAIC05Niw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIGludCBwcm90
ZWN0ZWRUcmFja0lEKCkgY29uc3QgeyByZXR1cm4gbV9wcm90ZWN0ZWRUcmFja0lEOyB9CiAgICAg
QVZTdHJlYW1EYXRhUGFyc2VyKiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlci5nZXQo
KTsgfQorICAgIHZvaWQgc2V0Q0RNU2Vzc2lvbihDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpD
Kik7CiAKICAgICB2b2lkIGZsdXNoKCk7CiAKQEAgLTE0Miw5ICsxNDYsMTEgQEAgcHJpdmF0ZToK
ICAgICBIYXNoTWFwPGludCwgUmV0YWluUHRyPEFWU2FtcGxlQnVmZmVyQXVkaW9SZW5kZXJlcj4+
IG1fYXVkaW9SZW5kZXJlcnM7CiAgICAgUmV0YWluUHRyPFdlYkFWU3RyZWFtRGF0YVBhcnNlckxp
c3RlbmVyPiBtX2RlbGVnYXRlOwogICAgIFJldGFpblB0cjxXZWJBVlNhbXBsZUJ1ZmZlckVycm9y
TGlzdGVuZXI+IG1fZXJyb3JMaXN0ZW5lcjsKKyAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9zZW1h
cGhvcmVfdD4gbV9oYXNTZXNzaW9uU2VtYXBob3JlOwogCiAgICAgTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQyogbV9tZWRpYVNvdXJjZTsKICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KiBt
X2NsaWVudDsKKyAgICBDRE1TZXNzaW9uTWVkaWFTb3VyY2VBVkZPYmpDKiBtX3Nlc3Npb24geyBu
dWxscHRyIH07CiAKICAgICBGbG9hdFNpemUgbV9jYWNoZWRTaXplOwogICAgIGJvb2wgbV9wYXJz
aW5nU3VjY2VlZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQy5tbQppbmRleCBlZmZiZDcxNjRhMzJmYjZmNmU1NDU4MmEwYjJmZWY1
OGM3MWNlNDU0Li5lNWRmNzVmZTIxOTUyNTAzYmJiMzllN2EwZWFkYjA3Yjc4NjU2NjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qy5tbQpAQCAtMjU1LDExICsyNTUsNiBAQCBTT0ZUX0xJTktfQ09OU1RBTlQoQVZGb3VuZGF0aW9u
LCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckZhaWxlZFRvRGVjb2RlTm90aWZpYwogI2VuZGlm
CiAgICAgQVNTRVJUKHN0cmVhbURhdGFQYXJzZXIgPT0gX3BhcnNlcik7CiAKLSAgICBpZiAoaXNN
YWluVGhyZWFkKCkpIHsKLSAgICAgICAgX3BhcmVudC0+d2lsbFByb3ZpZGVDb250ZW50S2V5UmVx
dWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQodHJhY2tJRCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICAvLyBXZSBtdXN0IGNhbGwgc3luY2hyb25vdXNseSB0byB0aGUgbWFp
biB0aHJlYWQsIGFzIHRoZSBBVlN0cmVhbVNlc3Npb24gbXVzdCBiZSBhc3NvY2lhdGVkCiAgICAg
Ly8gd2l0aCB0aGUgc3RyZWFtRGF0YVBhcnNlciBiZWZvcmUgdGhlIGRlbGVnYXRlIG1ldGhvZCBy
ZXR1cm5zLgogICAgIFJldGFpblB0cjxXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lcj4gc3Ry
b25nU2VsZiA9IHNlbGY7CkBAIC0yNzgsMTAgKzI3MywxMiBAQCBTT0ZUX0xJTktfQ09OU1RBTlQo
QVZGb3VuZGF0aW9uLCBBVlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllckZhaWxlZFRvRGVjb2RlTm90
aWZpYwogICAgIFJldGFpblB0cjxXZWJBVlN0cmVhbURhdGFQYXJzZXJMaXN0ZW5lcj4gc3Ryb25n
U2VsZiA9IHNlbGY7CiAKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzdHJvbmdEYXRhID0gaW5pdERh
dGE7Ci0gICAgY2FsbE9uTWFpblRocmVhZChbc3Ryb25nU2VsZiwgc3Ryb25nRGF0YSwgdHJhY2tJ
RF0geworICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3NlbWFwaG9yZV90PiBoYXNTZXNzaW9uU2Vt
YXBob3JlID0gYWRvcHRPU09iamVjdChkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFtzdHJvbmdTZWxmLCBzdHJvbmdEYXRhLCB0cmFja0lELCAgaGFz
U2Vzc2lvblNlbWFwaG9yZV0gewogICAgICAgICBpZiAoc3Ryb25nU2VsZi0+X3BhcmVudCkKLSAg
ICAgICAgICAgIHN0cm9uZ1NlbGYtPl9wYXJlbnQtPmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoc3Ryb25nRGF0YS5nZXQoKSwgdHJhY2tJRCk7
CisgICAgICAgICAgICBzdHJvbmdTZWxmLT5fcGFyZW50LT5kaWRQcm92aWRlQ29udGVudEtleVJl
cXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKHN0cm9uZ0RhdGEuZ2V0KCksIHRyYWNr
SUQsIGhhc1Nlc3Npb25TZW1hcGhvcmUpOwogICAgIH0pOworICAgIGRpc3BhdGNoX3NlbWFwaG9y
ZV93YWl0KGhhc1Nlc3Npb25TZW1hcGhvcmUuZ2V0KCksIERJU1BBVENIX1RJTUVfRk9SRVZFUik7
CiB9CiBAZW5kCiAKQEAgLTYxNCw2ICs2MTEsOSBAQCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qzo6flNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKCkKICAgICBBU1NFUlQoIW1fY2xpZW50KTsK
ICAgICBkZXN0cm95UGFyc2VyKCk7CiAgICAgZGVzdHJveVJlbmRlcmVycygpOworCisgICAgaWYg
KG1faGFzU2Vzc2lvblNlbWFwaG9yZSkKKyAgICAgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25h
bChtX2hhc1Nlc3Npb25TZW1hcGhvcmUuZ2V0KCkpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQpA
QCAtNzE5LDE1ICs3MTksMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6d2ls
bFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUYKICAgICBMT0coTWVk
aWFTb3VyY2UsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6d2lsbFByb3ZpZGVDb250ZW50
S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoJXApIC0gdHJhY2s6JWQiLCB0
aGlzLCB0cmFja0lEKTsKICAgICBtX3Byb3RlY3RlZFRyYWNrSUQgPSB0cmFja0lEOwogCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFttX21lZGlhU291cmNlLT5wbGF5ZXIo
KS0+c3RyZWFtU2Vzc2lvbigpIGFkZFN0cmVhbURhdGFQYXJzZXI6bV9wYXJzZXIuZ2V0KCldOwot
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKENETVNlc3Npb25NZWRpYVNv
dXJjZUFWRk9iakMqIHNlc3Npb24gPSBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+Y2RtU2Vzc2lv
bigpKQorICAgICAgICBzZXNzaW9uLT5hZGRQYXJzZXIobV9wYXJzZXIuZ2V0KCkpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0odHJhY2tJRCk7CiAjZW5kaWYKIH0KIAotdm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQzo6ZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRp
b25EYXRhRm9yVHJhY2tJRChOU0RhdGEqIGluaXREYXRhLCBpbnQgdHJhY2tJRCkKK3ZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmRpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRp
YWxpemF0aW9uRGF0YUZvclRyYWNrSUQoTlNEYXRhKiBpbml0RGF0YSwgaW50IHRyYWNrSUQsIE9T
T2JqZWN0UHRyPGRpc3BhdGNoX3NlbWFwaG9yZV90PiBoYXNTZXNzaW9uU2VtYXBob3JlKQogewog
ICAgIGlmICghbV9tZWRpYVNvdXJjZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDYgKzczOCwx
NCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpkaWRQcm92aWRlQ29udGVudEtl
eVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGbwogICAgIFJlZlB0cjxVaW50OEFycmF5PiBpbml0
RGF0YUFycmF5ID0gVWludDhBcnJheTo6Y3JlYXRlKFtpbml0RGF0YSBsZW5ndGhdKTsKICAgICBb
aW5pdERhdGEgZ2V0Qnl0ZXM6aW5pdERhdGFBcnJheS0+ZGF0YSgpIGxlbmd0aDppbml0RGF0YUFy
cmF5LT5sZW5ndGgoKV07CiAgICAgbV9tZWRpYVNvdXJjZS0+c291cmNlQnVmZmVyS2V5TmVlZGVk
KHRoaXMsIGluaXREYXRhQXJyYXkuZ2V0KCkpOworICAgIGlmIChhdXRvIHNlc3Npb24gPSBtX21l
ZGlhU291cmNlLT5wbGF5ZXIoKS0+Y2RtU2Vzc2lvbigpKSB7CisgICAgICAgIHNlc3Npb24tPmFk
ZFBhcnNlcihtX3BhcnNlci5nZXQoKSk7CisgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9zaWdu
YWwoaGFzU2Vzc2lvblNlbWFwaG9yZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1faGFzU2Vzc2lvblNlbWFwaG9yZSkKKyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9z
aWduYWwobV9oYXNTZXNzaW9uU2VtYXBob3JlLmdldCgpKTsKKyAgICAgICAgbV9oYXNTZXNzaW9u
U2VtYXBob3JlID0gaGFzU2Vzc2lvblNlbWFwaG9yZTsKKyAgICB9CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShpbml0RGF0YSk7CiAjZW5kaWYKQEAgLTkyMSw2ICs5MjgsMjUgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6dHJhY2tEaWRDaGFuZ2VFbmFibGVkKEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3UKICAgICB9CiB9CiAKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akM6OnNldENETVNlc3Npb24oQ0RNU2Vzc2lvbk1lZGlhU291cmNlQVZGT2JqQyogc2Vzc2lvbikK
K3sKKyAgICBpZiAoc2Vzc2lvbiA9PSBtX3Nlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3Nlc3Npb24pCisgICAgICAgIG1fc2Vzc2lvbi0+cmVtb3ZlU291cmNlQnVmZmVyKHRo
aXMpOworCisgICAgbV9zZXNzaW9uID0gc2Vzc2lvbjsKKworICAgIGlmIChtX3Nlc3Npb24pIHsK
KyAgICAgICAgbV9zZXNzaW9uLT5hZGRTb3VyY2VCdWZmZXIodGhpcyk7CisgICAgICAgIGlmICht
X2hhc1Nlc3Npb25TZW1hcGhvcmUpIHsKKyAgICAgICAgICAgIGRpc3BhdGNoX3NlbWFwaG9yZV9z
aWduYWwobV9oYXNTZXNzaW9uU2VtYXBob3JlLmdldCgpKTsKKyAgICAgICAgICAgIG1faGFzU2Vz
c2lvblNlbWFwaG9yZSA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmZsdXNoKCkKIHsKICAgICBpZiAobV9kaXNwbGF5TGF5
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDgyMDFlY2ZlYTc2NDYx
NmJlZmQyODVjMTY1Mjk0ZTliODE1NzlmZDUuLmY2ODQ5YzM1MzZlMmZlNjNkMzRjZjczMzZhYWY1
NGU5NzUzNDM4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC02Nyw2
ICs2Nyw3IEBACiAjZW5kaWYKIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5k
YXRpb24pCisKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKaW5k
ZXggZGYyNTE4ZmViODhlOWM3NGQ4NDQxZTZlNDZlYzkyMDVhMDAwOGRlNS4uYjczNGZmZGE1NGVl
MTYwMGM2ZTk2OWRmYzRiOWZmNDE1ZWEzYzQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrQ0RNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0u
Y3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTW9ja0NE
TVNlc3Npb24gOiBwdWJsaWMgQ0RNU2Vzc2lvbiB7CiBwdWJsaWM6Ci0gICAgTW9ja0NETVNlc3Np
b24oKTsKKyAgICBNb2NrQ0RNU2Vzc2lvbihDRE1TZXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVh
bCB+TW9ja0NETVNlc3Npb24oKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoQ0RN
U2Vzc2lvbkNsaWVudCogY2xpZW50KSBvdmVycmlkZSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CkBA
IC03MSw5ICs3MSw5IEBAIGJvb2wgTW9ja0NETTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgInZp
ZGVvL21vY2siKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IE1vY2tDRE06OmNy
ZWF0ZVNlc3Npb24oKQorc3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IE1vY2tDRE06OmNyZWF0
ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPE1vY2tDRE1TZXNzaW9uPigpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PE1vY2tDRE1TZXNzaW9uPihjbGllbnQpOwogfQogCiBzdGF0aWMgVWludDhBcnJheSogaW5pdERh
dGFQcmVmaXgoKQpAQCAtMTA2LDggKzEwNiw5IEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTZXNz
aW9uSWQoKQogICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1Nlc3Npb25JZCsrKTsKIH0KIAotTW9ja0NETVNlc3Npb246Ok1vY2tDRE1TZXNzaW9uKCkKLSAg
ICA6IG1fc2Vzc2lvbklkKGdlbmVyYXRlU2Vzc2lvbklkKCkpCitNb2NrQ0RNU2Vzc2lvbjo6TW9j
a0NETVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9zZXNzaW9uSWQoZ2VuZXJhdGVTZXNzaW9uSWQoKSkKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmggYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tDRE0uaAppbmRleCA3NGYzOGI5NzI3NWY3NmQ4ZDM4MjJkODk3YTU0NWY3
MmM4N2EwNjAyLi4yY2Q4MThkZjE5YmYzZjBhNjhmZWNjMGVmMjY2MzMzOTNiMTQ5MGU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE0uaApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+TW9ja0NETSgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8Q0RNU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
c3RkOjp1bmlxdWVfcHRyPENETVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oQ0RNU2Vzc2lvbkNsaWVu
dCopIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ0RNKiBtX2NkbTsK
</data>
<flag name="review"
          id="291576"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>