<?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>236543</bug_id>
          
          <creation_ts>2022-02-12 15:29:44 -0800</creation_ts>
          <short_desc>Track silent push counts</short_desc>
          <delta_ts>2022-03-01 02:23:44 -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>DUPLICATE</resolution>
          <dup_id>236863</dup_id>
          
          <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="Ben Nham">nham</reporter>
          <assigned_to name="Ben Nham">nham</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>nham</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1840737</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-12 15:29:44 -0800</bug_when>
    <thetext>Track silent push counts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840738</commentid>
    <comment_count>1</comment_count>
      <attachid>451797</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-12 15:33:16 -0800</bug_when>
    <thetext>Created attachment 451797
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841052</commentid>
    <comment_count>2</comment_count>
      <attachid>451835</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-13 11:54:05 -0800</bug_when>
    <thetext>Created attachment 451835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841122</commentid>
    <comment_count>3</comment_count>
      <attachid>451857</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-13 20:58:03 -0800</bug_when>
    <thetext>Created attachment 451857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841123</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-13 20:58:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/88886050&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842445</commentid>
    <comment_count>5</comment_count>
      <attachid>451857</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-16 12:19:28 -0800</bug_when>
    <thetext>Comment on attachment 451857
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        e.g. making push subscriptions associated with this oirgin non-waking or removing the push

s/oirgin/origin.
It seems like we should add some callback API to inform the application each time the counter got increased.
That would be useful for API tests as well.

&gt; Source/WebCore/workers/service/server/RegistrationDatabase.cpp:424
&gt; +    Vector&lt;SecurityOriginData&gt; removedPushMetadata;

Maybe we could simplify and consider that an updatedPushMetadata with a counter of 0 is a removed push metadata?

&gt; Source/WebCore/workers/service/server/RegistrationDatabase.cpp:761
&gt; +        callOnMainThread([protectedThis = Ref { *this }, data = data.isolatedCopy()]() mutable {

WTFMove(data).isolatedCopy().

&gt; Source/WebCore/workers/service/server/RegistrationDatabase.cpp:762
&gt; +            protectedThis-&gt;addPushMetadataToStore(WTFMove(data));

Maybe we could build the vector/map, and do just one call to add the metadata to store.

&gt; Source/WebCore/workers/service/server/RegistrationStore.cpp:127
&gt; +    ASSERT(!data.origin.protocol.isEmpty() &amp;&amp; !data.origin.host.isEmpty());

Preexisting pattern, but I wonder whether this is needed here.
Ditto for removePushMetadata

&gt; Source/WebCore/workers/service/server/RegistrationStore.cpp:142
&gt; +    m_updatedPushMetadata.set(origin, std::nullopt);

Why using std::nullopt, and not a counter of 0?

&gt; Source/WebCore/workers/service/server/SWServer.cpp:193
&gt; +void SWServer::addPushMetadataFromStore(PushMetadataData &amp;&amp;data)

&amp;&amp; data.

&gt; Source/WebCore/workers/service/server/SWServer.cpp:195
&gt; +    m_originToPushMetadata.set(data.origin, WTFMove(data));

ASSERT(!m_originToPushMetadata.contains(data.origin));
m_originToPushMetadata.add(...);
But we could also just have just one big init by setting m_originToPushMetadata directly.

&gt; Source/WebCore/workers/service/server/SWServer.cpp:598
&gt; +void SWServer::flushPendingRegistrationsForTesting(CompletionHandler&lt;void()&gt;&amp;&amp; handler)

Could tests reuse storeRegistrationsOnDisk instead?

&gt; Source/WebCore/workers/service/server/SWServer.cpp:1264
&gt; +    m_originToPushMetadata.set(origin, WTFMove(data));

We can probably simplify with something like:
m_originToPushMetadata.add(origin, { origin, 0 }).iterator-&gt;value++;
m_registrationStore-&gt;updatePushMetadata(data);

&gt; Source/WebCore/workers/service/server/SWServer.cpp:1289
&gt; +        if (auto it = m_originToPushMetadata.find(origin); it != m_originToPushMetadata.end()) {

s/it/iterator.
Also, what is the difference between std::nullopt and 0?
Maybe we can simply do:
completionHandler(m_originToPushMetadata.get(origin).silentPushCount).

&gt; Source/WebCore/workers/service/server/SWServer.cpp:1338
&gt; +                    weakThis-&gt;incrementSilentPushCount(origin);

This is probably wrong in case of third party service worker. Do we have tests covering this area for third-party service workers?

&gt; Source/WebCore/workers/service/server/SWServer.h:309
&gt; +    HashMap&lt;SecurityOriginData, PushMetadataData&gt; m_originToPushMetadata;

Should we simplify to HashMap&lt;SecurityOriginData, unsigned&gt;?

&gt; Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:198
&gt; +        server().resetSilentPushCount(registration-&gt;key().topOrigin());

I am not sure we want this.
There could be no controlling registration for the given URL even though there might be a related service worker.
For instance, a web site might have a unique push service worker but this service worker is only used for push and not for controlling any page. 
Why not simply calling server().resetSileintPushCount for any top level navigation load?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842701</commentid>
    <comment_count>6</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-16 21:52:30 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 451857 [details]
&gt; Patch
&gt; 
&gt; &gt; Source/WebCore/workers/service/server/RegistrationDatabase.cpp:424
&gt; &gt; +    Vector&lt;SecurityOriginData&gt; removedPushMetadata;
&gt; 
&gt; Maybe we could simplify and consider that an updatedPushMetadata with a
&gt; counter of 0 is a removed push metadata?

The reason for this is because I am thinking we may eventually need to store other stuff in this PushMetadata object. So the value of the updatedPushMetadata isn&apos;t an integer but rather the whole PushMetadata object. Perhaps a premature optimization.

&gt; WTFMove(data).isolatedCopy().
&gt; 
&gt; &gt; Source/WebCore/workers/service/server/RegistrationDatabase.cpp:762
&gt; &gt; +            protectedThis-&gt;addPushMetadataToStore(WTFMove(data));
&gt; 
&gt; Maybe we could build the vector/map, and do just one call to add the
&gt; metadata to store.

I originally did that, but then decided to follow the existing pattern. I can change it to just build up one vector and hop to the main thread just once.

I think would have to be passed in a vector since I don&apos;t think HashMap implements a cross-thread copier.

&gt; &gt; Source/WebCore/workers/service/server/RegistrationStore.cpp:142
&gt; &gt; +    m_updatedPushMetadata.set(origin, std::nullopt);
&gt; 
&gt; Why using std::nullopt, and not a counter of 0?

Same reason as above, it&apos;s so that we can add more columns to PushMetadata in the future without having to rewrite this.

&gt; &gt; Source/WebCore/workers/service/server/SWServer.cpp:1338
&gt; &gt; +                    weakThis-&gt;incrementSilentPushCount(origin);
&gt; 
&gt; This is probably wrong in case of third party service worker. Do we have
&gt; tests covering this area for third-party service workers?

I need to investigate this.

&gt; &gt; Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:198
&gt; &gt; +        server().resetSilentPushCount(registration-&gt;key().topOrigin());
&gt; 
&gt; I am not sure we want this.
&gt; There could be no controlling registration for the given URL even though
&gt; there might be a related service worker.
&gt; For instance, a web site might have a unique push service worker but this
&gt; service worker is only used for push and not for controlling any page. 
&gt; Why not simply calling server().resetSileintPushCount for any top level
&gt; navigation load?

I&apos;m going to remove the call to resetSilentPushCount for now since Brady wants a further discussion on when or if we should be doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842708</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-16 22:04:52 -0800</bug_when>
    <thetext>HashMap appears to have a cross thread copier:
https://trac.webkit.org/browser/webkit/trunk/Source/WTF/wtf/CrossThreadCopier.h#L160</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843683</commentid>
    <comment_count>8</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-18 16:01:43 -0800</bug_when>
    <thetext>Went with another approach. Duping to the newer patch.

*** This bug has been marked as a duplicate of bug 236863 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451797</attachid>
            <date>2022-02-12 15:33:16 -0800</date>
            <delta_ts>2022-02-13 11:54:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236543-20220212153315.patch</filename>
            <type>text/plain</type>
            <size>53183</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyMjFhMWE5MTc1OTA5
YmVhMzFlMTM0YzZlY2UwMzQzOWQ4MmMzZC4uOTcwMjQ0ZjhlNGY3YTcyM2U0OTkxZDgxMzMwMDky
ZDMxN2M0MWY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIyLTAyLTEyICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIFRyYWNrIHNpbGVudCBwdXNoIGNvdW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVzY3Jp
cHRpb24gdG8gY29tZS4KKworICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6aXNv
bGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hNZXRhZGF0YURhdGE6Omlz
b2xhdGVkQ29weSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hNZXRhZGF0YURhdGE6OmRlY29kZSk6CisgICAg
ICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwdXNoTWV0YWRhdGFUYWJsZVNjaGVtYSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Om9wZW5TUUxpdGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93c0lmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxp
ZFB1c2hNZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjpwdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6c2NoZWR1bGVQdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25E
YXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25E
YXRhYmFzZTo6ZG9SZWdpc3RyYXRpb25DaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hNZXRhZGF0YUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFB1c2hNZXRhZGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6YWRkUHVzaE1ldGFkYXRhVG9TdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkc0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJh
dGlvbkRhdGFiYXNlLmg6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25TdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25TdG9yZTo6cHVz
aENoYW5nZXNUb0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3Jl
OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25TdG9yZTo6dXBkYXRl
UHVzaE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3JlOjpyZW1v
dmVQdXNoTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uU3RvcmU6OmFk
ZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFzZSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9SZWdpc3RyYXRpb25TdG9yZS5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2ZXI6OmFkZFB1c2hNZXRh
ZGF0YUZyb21TdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Y2xlYXJBbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNX
U2VydmVyOjpmbHVzaFBlbmRpbmdSZWdpc3RyYXRpb25zRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTV1NlcnZlcjo6aW5jcmVtZW50U2lsZW50UHVzaENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNXU2VydmVyOjpyZXNldFNpbGVudFB1c2hDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTV1NlcnZlcjo6Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTV1NlcnZlcjo6cHJvY2Vzc1B1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1NXU2VydmVyLmg6CisKIDIwMjItMDItMDkgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSBpbXByb3ZlIHNpemluZyBvbiBt
YWNPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBiMjFkMDFmOTRjYTk3ODA5YThhMGUzNjJmODJmYTg1ZThlNDVhMzlm
Li5kYjYwZmQyMDRmZjdlOGZmYjE2ODEwMGRhMmQ1MGIwOTdjZDY5ZjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDIyLTAyLTEyICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFRyYWNrIHNpbGVudCBwdXNoIGNvdW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRGVzY3JpcHRpb24gdG8gY29tZS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmdldFNpbGVudFB1c2hDb3VudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Zmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bnNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGVG
ZXRjaFRhc2spOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX2ZsdXNoUGVuZGluZ1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRl
RGF0YVN0b3JlIF9nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRTaWxlbnRQdXNo
Q291bnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
Zmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisKIDIwMjItMDIt
MDkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVs
XSBpbXByb3ZlIHNpemluZyBvbiBtYWNPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcAppbmRleCAxYTQx
MTEzNjQwMDBmM2FjYWYzNzBmMGM5ZTMxMTQyMjdhODljMDllLi4wODFiZjVhMjM3MDI4ZmJiOGI5
Zjg2NjY4Y2QzNWZhYjIzNzA1Y2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcApAQCAtNzMsNiAr
NzMsMjIgQEAgU2VydmljZVdvcmtlckNvbnRleHREYXRhIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YTo6aXNvbGF0ZWRDb3B5KCkgJiYKICAgICB9OwogfQogCitQdXNoTWV0YWRhdGFEYXRhIFB1c2hN
ZXRhZGF0YURhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0ICYKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBvcmlnaW4uaXNvbGF0ZWRDb3B5KCksCisgICAgICAgIHNpbGVudFB1c2hDb3VudAorICAg
IH07Cit9CisKK1B1c2hNZXRhZGF0YURhdGEgUHVzaE1ldGFkYXRhRGF0YTo6aXNvbGF0ZWRDb3B5
KCkgJiYKK3sKKyAgICByZXR1cm4geworICAgICAgICBXVEZNb3ZlKG9yaWdpbikuaXNvbGF0ZWRD
b3B5KCksCisgICAgICAgIHNpbGVudFB1c2hDb3VudAorICAgIH07Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4
dERhdGEuaAppbmRleCA0NmE5ZmE3MDEyOWUzNzVjNTk2ODFiYmE2ZTMwZWE5OGFiY2IxZDg3Li5h
MDA2OTljMjgxZGRhYWQ3YzA3MzA5Nzc1Nzk5NTI0ODc0M2UyZDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTmF2aWdhdGlvblByZWxvYWRTdGF0ZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5j
bHVkZSAiU2VydmljZVdvcmtlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2Vy
Sm9iRGF0YUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGF0YS5oIgpAQCAtMjAxLDYgKzIwMiw0MiBAQCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJD
b250ZXh0RGF0YT4gU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpkZWNvZGUoRGVjb2RlcgogICAg
IH19OwogfQogCitzdHJ1Y3QgUHVzaE1ldGFkYXRhRGF0YSB7CisgICAgU2VjdXJpdHlPcmlnaW5E
YXRhIG9yaWdpbjsKKyAgICB1bnNpZ25lZCBzaWxlbnRQdXNoQ291bnQ7CisKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRhRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKKworICAgIFB1c2hNZXRhZGF0YURhdGEgaXNvbGF0ZWRDb3B5KCkg
Y29uc3QgJjsKKyAgICBQdXNoTWV0YWRhdGFEYXRhIGlzb2xhdGVkQ29weSgpICYmOworfTsKKwor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHVzaE1ldGFkYXRhRGF0YTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBvcmlnaW4gPDwgc2lsZW50
UHVzaENvdW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxQ
dXNoTWV0YWRhdGFEYXRhPiBQdXNoTWV0YWRhdGFEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luOworICAg
IGRlY29kZXIgPj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2lsZW50UHVzaENvdW50
OworICAgIGRlY29kZXIgPj4gc2lsZW50UHVzaENvdW50OworICAgIGlmICghc2lsZW50UHVzaENv
dW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeworICAg
ICAgICBXVEZNb3ZlKCpvcmlnaW4pLAorICAgICAgICBXVEZNb3ZlKCpzaWxlbnRQdXNoQ291bnQp
CisgICAgfSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IGI0ZTFh
NDU4NDhlZWMzNzkxMzJjMDM5OTY4YzU1MWZjYjljMmFkN2EuLmU2MGUzMmFlMzY0MTBmMGVmZGEy
YmJkZWZkMGQzZTU5ODhiY2Y4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC01
MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IHVpbnQ2
NF90IHNjaGVtYVZlcnNpb24gPSA4Oworc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNjaGVtYVZlcnNp
b24gPSA5OwogCiAjZGVmaW5lIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1BSRUZJWCAiQ1JFQVRFIFRB
QkxFICIKICNkZWZpbmUgUkVDT1JEU19UQUJMRV9TQ0hFTUFfU1VGRklYICIoIiBcCkBAIC03MCw2
ICs3MCwxMSBAQCBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDg7CiAgICAg
IiwgcHJlbG9hZFN0YXRlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCIgXAogICAgICIp
Il9zOwogCisjZGVmaW5lIFBVU0hfTUVUQURBVEFfVEFCTEVfU0NIRU1BICJDUkVBVEUgVEFCTEUg
UHVzaE1ldGFkYXRhICgiIFwKKyAgICAib3JpZ2luIFRFWFQgUFJJTUFSWSBLRVkiIFwKKyAgICAi
LCBzaWxlbnRQdXNoQ291bnQgSU5UIE5PVCBOVUxMIiBcCisgICAgIikiX3M7CisKIHN0YXRpYyBB
U0NJSUxpdGVyYWwgcmVjb3Jkc1RhYmxlU2NoZW1hKCkKIHsKICAgICByZXR1cm4gUkVDT1JEU19U
QUJMRV9TQ0hFTUFfUFJFRklYICJSZWNvcmRzIiBSRUNPUkRTX1RBQkxFX1NDSEVNQV9TVUZGSVg7
CkBAIC04MCw2ICs4NSwxMSBAQCBzdGF0aWMgQVNDSUlMaXRlcmFsIHJlY29yZHNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpCiAgICAgcmV0dXJuIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1BSRUZJWCAiXCJS
ZWNvcmRzXCIiIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1NVRkZJWDsKIH0KIAorc3RhdGljIEFTQ0lJ
TGl0ZXJhbCBwdXNoTWV0YWRhdGFUYWJsZVNjaGVtYSgpCit7CisgICAgcmV0dXJuIFBVU0hfTUVU
QURBVEFfVEFCTEVfU0NIRU1BOworfQorCiBzdGF0aWMgaW5saW5lIFN0cmluZyBkYXRhYmFzZUZp
bGVuYW1lRnJvbVZlcnNpb24odWludDY0X3QgdmVyc2lvbikKIHsKICAgICByZXR1cm4gbWFrZVN0
cmluZygiU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMtIiwgdmVyc2lvbiwgIi5zcWxpdGUzIik7
CkBAIC0xNzIsNyArMTgyLDcgQEAgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OlJlZ2lzdHJhdGlvbkRh
dGFiYXNlKFJlZ2lzdHJhdGlvblN0b3JlJiBzdG9yZSwgU3RyaW5nJiYgZGEKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgcG9zdFRhc2tUb1dvcmtRdWV1ZShbdGhpc10gewotICAg
ICAgICBpbXBvcnRSZWNvcmRzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW1wb3J0Um93c0lmTmVj
ZXNzYXJ5KCk7CiAgICAgfSk7CiB9CiAKQEAgLTIzMSwxMCArMjQxLDE3IEBAIGJvb2wgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6Om9wZW5TUUxpdGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIGZ1bGxGaWxl
bmFtZSkKICAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KKworICAgIGVycm9yTWVzc2FnZSA9IGVuc3VyZVZhbGlkUHVzaE1ldGFkYXRhVGFi
bGUoKTsKKyAgICBpZiAoIWVycm9yTWVzc2FnZS5pc051bGwoKSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiZW5zdXJlVmFsaWRQdXNoTWV0YWRhdGFUYWJsZSBm
YWlsZWQsIHJlYXNvbjogJSIgUFVCTElDX0xPR19TVFJJTkcsIGVycm9yTWVzc2FnZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KICAgICAKLSAgICBlcnJvck1lc3NhZ2UgPSBpbXBvcnRSZWNvcmRzKCk7Cisg
ICAgZXJyb3JNZXNzYWdlID0gaW1wb3J0Um93cygpOwogICAgIGlmICghZXJyb3JNZXNzYWdlLmlz
TnVsbCgpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJpbXBv
cnRSZWNvcmRzIGZhaWxlZCwgcmVhc29uOiAlIiBQVUJMSUNfTE9HX1NUUklORywgZXJyb3JNZXNz
YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29y
a2VyLCAiaW1wb3J0Um93cyBmYWlsZWQsIHJlYXNvbjogJSIgUFVCTElDX0xPR19TVFJJTkcsIGVy
cm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI1NCw3ICsyNzEsNyBAQCBTV1Njcmlw
dFN0b3JhZ2UmIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpzY3JpcHRTdG9yYWdlKCkKICAgICByZXR1
cm4gKm1fc2NyaXB0U3RvcmFnZTsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3Jkc0lmTmVjZXNzYXJ5KCkKK3ZvaWQgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJvd3NJZk5lY2Vzc2FyeSgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAg
LTMwOCw2ICszMjUsNDIgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxp
ZFJlY29yZHNUYWJsZSgpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgc2NoZW1h
OiAiLCBjdXJyZW50U2NoZW1hKTsKIH0KIAorU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpl
bnN1cmVWYWxpZFB1c2hNZXRhZGF0YVRhYmxlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPmlz
T3BlbigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8g
RmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgcHVzaCBtZXRhZGF0YSB0YWJsZS4KKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUHVzaE1ldGFk
YXRhJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuICJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUHVzaE1l
dGFkYXRhIHRhYmxlLiJfczsKKworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gUHVzaE1ldGFkYXRhIHRhYmxl
IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChzcWxpdGVSZXN1
bHQgPT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0
ZUNvbW1hbmQocHVzaE1ldGFkYXRhVGFibGVTY2hlbWEoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBjcmVhdGUgUHVzaE1ldGFkYXRhIHRhYmxlIGluIGRh
dGFiYXNlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikgLSAiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcmV0dXJu
ICJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFB1c2hN
ZXRhZGF0YSB0YWJsZS4iX3M7CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Y29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0
eSgpKTsKKworICAgIGlmIChjdXJyZW50U2NoZW1hID09IHB1c2hNZXRhZGF0YVRhYmxlU2NoZW1h
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVW5leHBl
Y3RlZCBzY2hlbWE6ICIsIGN1cnJlbnRTY2hlbWEpOworfQorCiBzdGF0aWMgU3RyaW5nIHVwZGF0
ZVZpYUNhY2hlVG9TdHJpbmcoU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlIHVwZGF0ZSkKIHsK
ICAgICBzd2l0Y2ggKHVwZGF0ZSkgewpAQCAtMzU2LDcgKzQwOSw3IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFdvcmtlclR5cGU+IHN0cmluZ1RvV29ya2VyVHlwZShjb25zdCBTdHJpbmcmIHR5cGUp
CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5
LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4+JiBjaGFuZ2VkUmVnaXN0
cmF0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YT4+JiBjaGFuZ2VkUmVnaXN0cmF0aW9ucywgY29uc3QgSGFzaE1hcDxTZWN1cml0eU9y
aWdpbkRhdGEsIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRhRGF0YT4+JiBjaGFuZ2VkUHVzaE1l
dGFkYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4gdXBkYXRlZFJlZ2lzdHJhdGlv
bnM7CiAgICAgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+IHJlbW92ZWRSZWdp
c3RyYXRpb25zOwpAQCAtMzY2LDIyICs0MTksMzQgQEAgdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2UK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMuYXBwZW5kKGtl
eVZhbHVlLmtleS5pc29sYXRlZENvcHkoKSk7CiAgICAgfQotICAgIHNjaGVkdWxlUHVzaENoYW5n
ZXMoV1RGTW92ZSh1cGRhdGVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJh
dGlvbnMpLCBTaG91bGRSZXRyeTo6WWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisK
KyAgICBWZWN0b3I8UHVzaE1ldGFkYXRhRGF0YT4gdXBkYXRlZFB1c2hNZXRhZGF0YTsKKyAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiByZW1vdmVkUHVzaE1ldGFkYXRhOworICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBjaGFuZ2VkUHVzaE1ldGFkYXRhKSB7CisgICAgICAgIGlmIChrZXlW
YWx1ZS52YWx1ZSkKKyAgICAgICAgICAgIHVwZGF0ZWRQdXNoTWV0YWRhdGEuYXBwZW5kKGtleVZh
bHVlLnZhbHVlLT5pc29sYXRlZENvcHkoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
bW92ZWRQdXNoTWV0YWRhdGEuYXBwZW5kKGtleVZhbHVlLmtleS5pc29sYXRlZENvcHkoKSk7Cisg
ICAgfQorCisgICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRp
b25zKSwgV1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUodXBkYXRlZFB1c2hN
ZXRhZGF0YSksIFdURk1vdmUocmVtb3ZlZFB1c2hNZXRhZGF0YSksIFNob3VsZFJldHJ5OjpZZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6c2NoZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRh
PiYmIHVwZGF0ZWRSZWdpc3RyYXRpb25zLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4mJiByZW1vdmVkUmVnaXN0cmF0aW9ucywgU2hvdWxkUmV0cnkgc2hvdWxkUmV0cnksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OnNjaGVkdWxlUHVzaENoYW5nZXMoVmVjdG9yPFNlcnZpY2VXb3JrZXJD
b250ZXh0RGF0YT4mJiB1cGRhdGVkUmVnaXN0cmF0aW9ucywgVmVjdG9yPFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25LZXk+JiYgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMsIFZlY3RvcjxQdXNoTWV0YWRh
dGFEYXRhPiYmIHVwZGF0ZWRQdXNoTWV0YWRhdGEsIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
JiYgcmVtb3ZlZFB1c2hNZXRhZGF0YSwgU2hvdWxkUmV0cnkgc2hvdWxkUmV0cnksIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIHB1c2hD
b3VudGVyID0gc2hvdWxkUmV0cnkgPT0gU2hvdWxkUmV0cnk6OlllcyA/IG1fcHVzaENvdW50ZXIg
OiAwOwotICAgIHBvc3RUYXNrVG9Xb3JrUXVldWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBwdXNoQ291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHVw
ZGF0ZWRSZWdpc3RyYXRpb25zKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHJlbW92
ZWRSZWdpc3RyYXRpb25zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZG9QdXNoQ2hhbmdl
cyh1cGRhdGVkUmVnaXN0cmF0aW9ucywgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpOworICAgIHBvc3RU
YXNrVG9Xb3JrUXVldWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwdXNo
Q291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRp
b25zKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHJlbW92ZWRSZWdpc3RyYXRpb25z
KSwgdXBkYXRlZFB1c2hNZXRhZGF0YSA9IFdURk1vdmUodXBkYXRlZFB1c2hNZXRhZGF0YSksIHJl
bW92ZWRQdXNoTWV0YWRhdGEgPSBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0YWRhdGEpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBkb1B1c2hDaGFuZ2VzKHVwZGF0ZWRSZWdpc3RyYXRpb25zLCBy
ZW1vdmVkUmVnaXN0cmF0aW9ucywgdXBkYXRlZFB1c2hNZXRhZGF0YSwgcmVtb3ZlZFB1c2hNZXRh
ZGF0YSk7CiAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICB1cGRhdGVkUmVnaXN0
cmF0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMuY2xlYXIo
KTsKKyAgICAgICAgICAgIHVwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAg
IHJlbW92ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
c3VjY2VzcywgcHVzaENvdW50ZXIsIHVwZGF0ZWRSZWdpc3RyYXRpb25zID0gV1RGTW92ZSh1cGRh
dGVkUmVnaXN0cmF0aW9ucykuaXNvbGF0ZWRDb3B5KCksIHJlbW92ZWRSZWdpc3RyYXRpb25zID0g
V1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucykuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpLCBzdWNjZXNzLCBwdXNoQ291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZN
b3ZlKHVwZGF0ZWRSZWdpc3RyYXRpb25zKS5pc29sYXRlZENvcHkoKSwgcmVtb3ZlZFJlZ2lzdHJh
dGlvbnMgPSBXVEZNb3ZlKHJlbW92ZWRSZWdpc3RyYXRpb25zKS5pc29sYXRlZENvcHkoKSwgdXBk
YXRlZFB1c2hNZXRhZGF0YSA9IFdURk1vdmUodXBkYXRlZFB1c2hNZXRhZGF0YSkuaXNvbGF0ZWRD
b3B5KCksIHJlbW92ZWRQdXNoTWV0YWRhdGEgPSBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0YWRhdGEp
Lmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIChwdXNoQ291
bnRlciArIDEpID09IG1fcHVzaENvdW50ZXIpIHsKICAgICAgICAgICAgICAgICAvLyBXZSByZXRy
eSB3cml0aW5nIG9uY2UgaWYgbm8gb3RoZXIgY2hhbmdlIHdhcyBwdXNoZWQuCi0gICAgICAgICAg
ICAgICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRpb25zKSwg
V1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFNob3VsZFJldHJ5OjpObywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlUHVzaENoYW5nZXMo
V1RGTW92ZSh1cGRhdGVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJhdGlv
bnMpLCBXVEZNb3ZlKHVwZGF0ZWRQdXNoTWV0YWRhdGEpLCBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0
YWRhdGEpLCBTaG91bGRSZXRyeTo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29t
cGxldGlvbkhhbmRsZXIpCkBAIC00MTIsNyArNDc3LDcgQEAgdm9pZCBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGUKICAgICB9KTsKIH0KIAotYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdl
cyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYgdXBkYXRlZFJlZ2lzdHJh
dGlvbnMsIGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5PiYgcmVtb3Zl
ZFJlZ2lzdHJhdGlvbnMpCitib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2Vz
KGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JiB1cGRhdGVkUmVnaXN0cmF0
aW9ucywgY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiByZW1vdmVk
UmVnaXN0cmF0aW9ucywgY29uc3QgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiB1cGRhdGVkUHVz
aE1ldGFkYXRhLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgcmVtb3ZlZFB1c2hN
ZXRhZGF0YSkKIHsKICAgICBpZiAoIW1fZGF0YWJhc2UpIHsKICAgICAgICAgb3BlblNRTGl0ZURh
dGFiYXNlKG1fZGF0YWJhc2VGaWxlUGF0aCk7CkBAIC00MjMsNiArNDg4LDIwIEBAIGJvb2wgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3Jr
ZXJDb250ZXh0RGF0YT4mCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGF0
YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKKyAgICBpZiAoIWRvUmVnaXN0cmF0
aW9uQ2hhbmdlcyh1cGRhdGVkUmVnaXN0cmF0aW9ucywgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRvUHVzaE1ldGFkYXRhQ2hhbmdlcyh1
cGRhdGVkUHVzaE1ldGFkYXRhLCByZW1vdmVkUHVzaE1ldGFkYXRhKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICBSRUxFQVNFX0xPRyhT
ZXJ2aWNlV29ya2VyLCAiVXBkYXRlZCBTZXJ2aWNlV29ya2VyIHJlZ2lzdHJhdGlvbiBkYXRhYmFz
ZSAoJXp1IGFkZGVkL3VwZGF0ZWQgcmVnaXN0cmF0aW9ucyBhbmQgJXp1IHJlbW92ZWQgcmVnaXN0
cmF0aW9uczsgJXp1IGFkZGVkL3VwZGF0ZWQgcHVzaCBtZXRhZGF0YSBhbmQgJXp1IHJlbW92ZWQg
cHVzaCBtZXRhZGF0YSkiLCB1cGRhdGVkUmVnaXN0cmF0aW9ucy5zaXplKCksIHJlbW92ZWRSZWdp
c3RyYXRpb25zLnNpemUoKSwgdXBkYXRlZFB1c2hNZXRhZGF0YS5zaXplKCksIHJlbW92ZWRQdXNo
TWV0YWRhdGEuc2l6ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9SZWdpc3RyYXRpb25DaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGE+JiB1cGRhdGVkUmVnaXN0cmF0aW9ucywgY29uc3QgVmVjdG9yPFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiByZW1vdmVkUmVnaXN0cmF0aW9ucykKK3sKICAgICBh
dXRvIGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/KSJfcyk7CiAgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKQEAg
LTQ5NiwxNiArNTc1LDU4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5n
ZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAgICAgIH0pOwog
ICAgIH0KIAotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIFJFTEVBU0VfTE9HKFNlcnZp
Y2VXb3JrZXIsICJVcGRhdGVkIFNlcnZpY2VXb3JrZXIgcmVnaXN0cmF0aW9uIGRhdGFiYXNlICgl
enUgYWRkZWQvdXBkYXRlZCByZWdpc3RyYXRpb25zIGFuZCAlenUgcmVtb3ZlZCByZWdpc3RyYXRp
b25zIiwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMuc2l6ZSgpLCByZW1vdmVkUmVnaXN0cmF0aW9ucy5z
aXplKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yZHMoKQorYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoTWV0
YWRhdGFDaGFuZ2VzKGNvbnN0IFZlY3RvcjxQdXNoTWV0YWRhdGFEYXRhPiYgdXBkYXRlZFB1c2hN
ZXRhZGF0YSwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIHJlbW92ZWRQdXNoTWV0
YWRhdGEpCit7CisgICAgYXV0byB1cGRhdGVTUUwgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFB1c2hNZXRhZGF0YSBWQUxVRVMgKD8sID8pIl9z
KTsKKyAgICBpZiAoIXVwZGF0ZVNRTCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2
aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHVwZGF0ZSBwdXNoIG1l
dGFkYXRhICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRv
IGRlbGV0ZVNRTCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFB1
c2hNZXRhZGF0YSBXSEVSRSBvcmlnaW4gPSA/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVNRTCkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGRlbGV0ZSBwdXNoIG1ldGFkYXRhICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiB1cGRhdGVkUHVzaE1l
dGFkYXRhKSB7CisgICAgICAgIGlmICh1cGRhdGVTUUwtPmJpbmRUZXh0KDEsIGRhdGEub3JpZ2lu
LnRvU3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgdXBkYXRlU1FMLT5iaW5k
SW50KDIsIGRhdGEuc2lsZW50UHVzaENvdW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IHVwZGF0ZVNRTC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHVwZGF0ZSBwdXNoIG1ldGFkYXRh
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHJlbW92ZWRQdXNoTWV0YWRhdGEpIHsKKyAgICAgICAg
aWYgKGRlbGV0ZVNRTC0+YmluZFRleHQoMSwgb3JpZ2luLnRvU3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgZGVsZXRlU1FMLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcmVt
b3ZlIHB1c2ggbWV0YWRhdGEgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmltcG9ydFJvd3MoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNl
OjppbXBvcnRSZWNvcmRzOiIpOworICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93czoiKTsKKworICAgIGF1dG8gZXJyb3JNZXNzYWdl
ID0gaW1wb3J0UmVjb3JkcygpOworICAgIGlmICghZXJyb3JNZXNzYWdlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOworCisgICAgcmV0dXJuIGltcG9ydFB1c2hNZXRhZGF0
YSgpOworfQorCitTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQor
ewogICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICog
RlJPTSBSZWNvcmRzOyJfcyk7CiAgICAgaWYgKCFzcWwpCiAgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9u
cyBmcm9tIHJlY29yZHMgdGFibGUgKCIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCAiKSAtICIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKQEAgLTYxNiwxMiArNzM3LDUwIEBAIFN0cmlu
ZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAorU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRQdXNoTWV0YWRhdGEoKQor
eworICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICog
RlJPTSBQdXNoTWV0YWRhdGE7Il9zKTsKKyAgICBpZiAoIXNxbCkKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWNvcmRz
IGZyb20gUHVzaE1ldGFkYXRhIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikg
LSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisKKyAgICBpbnQgcmVzdWx0ID0gc3Fs
LT5zdGVwKCk7CisKKyAgICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNx
bC0+c3RlcCgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3Ry
YXRpb25EYXRhYmFzZTo6aW1wb3J0UHVzaE1ldGFkYXRhOiBJbXBvcnRpbmcgYSBwdXNoIG1ldGFk
YXRhIHJvdyBmcm9tIHRoZSBkYXRhYmFzZSIpOworCisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0g
VVJMIHsgVVJMKCksIHNxbC0+Y29sdW1uVGV4dCgwKSB9OworICAgICAgICBhdXRvIHNpbGVudFB1
c2hDb3VudCA9IHNxbC0+Y29sdW1uSW50KDEpOworICAgICAgICBpZiAob3JpZ2luVVJMLnByb3Rv
Y29sKCkuaXNFbXB0eSgpIHx8IG9yaWdpblVSTC5ob3N0KCkuaXNFbXB0eSgpIHx8IHNpbGVudFB1
c2hDb3VudCA8IDApCisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBpbXBvcnQgcHVzaCBt
ZXRhZGF0YSByb3cgd2l0aCBtYWxmb3JtZWQgZGF0YSJfczsKKworICAgICAgICBhdXRvIGRhdGEg
PSBQdXNoTWV0YWRhdGFEYXRhIHsKKyAgICAgICAgICAgIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bVVSTChvcmlnaW5VUkwpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpbGVu
dFB1c2hDb3VudCkKKyAgICAgICAgfTsKKworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZGF0YSA9IGRhdGEuaXNvbGF0ZWRDb3B5KCldKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRQdXNoTWV0YWRhdGFUb1N0
b3JlKFdURk1vdmUoZGF0YSkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIGlt
cG9ydCBhdCBsZWFzdCBvbmUgcm93IGZyb20gcHVzaCBtZXRhZGF0YSB0YWJsZSAoIiwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6YWRkUmVn
aXN0cmF0aW9uVG9TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEmJiBjb250ZXh0KQogewog
ICAgIGlmIChtX3N0b3JlKQogICAgICAgICBtX3N0b3JlLT5hZGRSZWdpc3RyYXRpb25Gcm9tRGF0
YWJhc2UoV1RGTW92ZShjb250ZXh0KSk7CiB9CiAKK3ZvaWQgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmFkZFB1c2hNZXRhZGF0YVRvU3RvcmUoUHVzaE1ldGFkYXRhRGF0YSYmIGRhdGEpCit7CisgICAg
aWYgKG1fc3RvcmUpCisgICAgICAgIG1fc3RvcmUtPmFkZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFz
ZShXVEZNb3ZlKGRhdGEpKTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZGF0YWJh
c2VGYWlsZWRUb09wZW4oKQogewogICAgIGlmIChtX3N0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFz
ZS5oCmluZGV4IDZiMWNmMGIyYzA4NDUzYWY2MmU1OTJlNGU3MGE1N2FjNjQ4MGE1ZTQuLjJiZDFk
ZjNkMGM0NzI2MjVjY2Y2ZGJmMjQzZmE2ZDUzMTYzNDEyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFi
YXNlLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVnaXN0
cmF0aW9uU3RvcmU7CiBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKIGNsYXNzIFNXU2NyaXB0U3RvcmFn
ZTsKK3N0cnVjdCBQdXNoTWV0YWRhdGFEYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
YXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtNTMs
NyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICB+UmVnaXN0cmF0aW9uRGF0YWJhc2UoKTsKIAotICAg
IHZvaWQgcHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4+JiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHB1c2hDaGFuZ2VzKGNvbnN0IEhhc2hNYXA8
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSwgc3RkOjpvcHRpb25hbDxTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGE+PiYsIGNvbnN0IEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBzdGQ6Om9w
dGlvbmFsPFB1c2hNZXRhZGF0YURhdGE+PiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBjbGVhckFsbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgY2xvc2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIApAQCAtNjMsMjEgKzY0LDI3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5SXNvbGF0ZWRDb3B5KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeS5pc29sYXRlZENvcHkoKTsgfQogCiAg
ICAgZW51bSBjbGFzcyBTaG91bGRSZXRyeSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHNjaGVkdWxl
UHVzaENoYW5nZXMoVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mJiwgVmVjdG9yPFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiYsIFNob3VsZFJldHJ5LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2NoZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8U2Vy
dmljZVdvcmtlckNvbnRleHREYXRhPiYmLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4mJiwgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiYsIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+JiYsIFNob3VsZFJldHJ5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgcG9zdFRhc2tUb1dvcmtRdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCiAgICAgLy8g
TWV0aG9kcyB0byBiZSBydW4gb24gdGhlIHdvcmsgcXVldWUuCiAgICAgYm9vbCBvcGVuU1FMaXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmdWxsRmlsZW5hbWUpOwogICAgIFN0cmluZyBlbnN1cmVW
YWxpZFJlY29yZHNUYWJsZSgpOworICAgIFN0cmluZyBlbnN1cmVWYWxpZFB1c2hNZXRhZGF0YVRh
YmxlKCk7CisgICAgU3RyaW5nIGltcG9ydFJvd3MoKTsKICAgICBTdHJpbmcgaW1wb3J0UmVjb3Jk
cygpOwotICAgIHZvaWQgaW1wb3J0UmVjb3Jkc0lmTmVjZXNzYXJ5KCk7Ci0gICAgYm9vbCBkb1B1
c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JiwgY29uc3Qg
VmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+Jik7CisgICAgU3RyaW5nIGltcG9y
dFB1c2hNZXRhZGF0YSgpOworICAgIHZvaWQgaW1wb3J0Um93c0lmTmVjZXNzYXJ5KCk7CisgICAg
Ym9vbCBkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+
JiwgY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiwgY29uc3QgVmVj
dG9yPFB1c2hNZXRhZGF0YURhdGE+JiwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4m
KTsKKyAgICBib29sIGRvUmVnaXN0cmF0aW9uQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdv
cmtlckNvbnRleHREYXRhPiYsIGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5PiYpOworICAgIGJvb2wgZG9QdXNoTWV0YWRhdGFDaGFuZ2VzKGNvbnN0IFZlY3RvcjxQdXNo
TWV0YWRhdGFEYXRhPiYsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAg
dm9pZCBkb0NsZWFyT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7CiAgICAgU1dTY3JpcHRT
dG9yYWdlJiBzY3JpcHRTdG9yYWdlKCk7CiAgICAgU3RyaW5nIHNjcmlwdFN0b3JhZ2VEaXJlY3Rv
cnkoKSBjb25zdDsKIAogICAgIC8vIFJlcGxpZXMgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIHZv
aWQgYWRkUmVnaXN0cmF0aW9uVG9TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEmJik7Cisg
ICAgdm9pZCBhZGRQdXNoTWV0YWRhdGFUb1N0b3JlKFB1c2hNZXRhZGF0YURhdGEmJik7CiAgICAg
dm9pZCBkYXRhYmFzZUZhaWxlZFRvT3BlbigpOwogICAgIHZvaWQgZGF0YWJhc2VPcGVuZWRBbmRS
ZWNvcmRzSW1wb3J0ZWQoKTsgCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKaW5kZXggMjE5MDU3NjE2
Mzg5NzkyZWMzYWM2MDE2NTE4MTJjMzc1NTkyMjhjZC4uYjAxN2JmMjVmMTNmMGJkODdkNDM0ZTMw
NzM2N2U4NDA3NDY0YmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKQEAgLTU3LDE0ICs1Nywx
NiBAQCB2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjpwdXNoQ2hhbmdlc1RvRGF0YWJhc2UoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9kYXRhYmFzZS0+cHVzaENoYW5nZXMobV91cGRhdGVkUmVnaXN0cmF0aW9ucywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG1fZGF0YWJhc2UtPnB1c2hDaGFuZ2VzKG1fdXBk
YXRlZFJlZ2lzdHJhdGlvbnMsIG1fdXBkYXRlZFB1c2hNZXRhZGF0YSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIG1fdXBkYXRlZFJlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKKyAgICBt
X3VwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKIH0KIAogdm9pZCBSZWdpc3RyYXRpb25TdG9y
ZTo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIG1fbmVlZHNQdXNoaW5nQ2hhbmdlcyA9IGZhbHNlOwogICAgIG1fdXBkYXRlZFJl
Z2lzdHJhdGlvbnMuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsK
ICAgICBtX2RhdGFiYXNlUHVzaFRpbWVyLnN0b3AoKTsKICAgICBtX2RhdGFiYXNlLT5jbGVhckFs
bChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CkBAIC0xMTksNiArMTIxLDI4IEBAIHZv
aWQgUmVnaXN0cmF0aW9uU3RvcmU6OnJlbW92ZVJlZ2lzdHJhdGlvbihjb25zdCBTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uS2V5JiBrCiAgICAgc2NoZWR1bGVEYXRhYmFzZVB1c2hJZk5lY2Vzc2Fy
eSgpOwogfQogCit2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjp1cGRhdGVQdXNoTWV0YWRhdGEoY29u
c3QgUHVzaE1ldGFkYXRhRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghZGF0YS5vcmlnaW4ucHJvdG9jb2wuaXNFbXB0eSgpICYmICFkYXRhLm9y
aWdpbi5ob3N0LmlzRW1wdHkoKSk7CisgICAgaWYgKGRhdGEub3JpZ2luLnByb3RvY29sLmlzRW1w
dHkoKSB8fCBkYXRhLm9yaWdpbi5ob3N0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV91cGRhdGVkUHVzaE1ldGFkYXRhLnNldChkYXRhLm9yaWdpbiwgZGF0YSk7CisgICAgc2No
ZWR1bGVEYXRhYmFzZVB1c2hJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlZ2lzdHJhdGlvblN0
b3JlOjpyZW1vdmVQdXNoTWV0YWRhdGEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW9yaWdpbi5wcm90
b2NvbC5pc0VtcHR5KCkgJiYgIW9yaWdpbi5ob3N0LmlzRW1wdHkoKSk7CisgICAgaWYgKG9yaWdp
bi5wcm90b2NvbC5pc0VtcHR5KCkgfHwgb3JpZ2luLmhvc3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3VwZGF0ZWRQdXNoTWV0YWRhdGEuc2V0KG9yaWdpbiwgc3RkOjpudWxs
b3B0KTsKKyAgICBzY2hlZHVsZURhdGFiYXNlUHVzaElmTmVjZXNzYXJ5KCk7Cit9CisKIHZvaWQg
UmVnaXN0cmF0aW9uU3RvcmU6OmFkZFJlZ2lzdHJhdGlvbkZyb21EYXRhYmFzZShTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGEmJiBkYXRhKQogewogICAgIEFTU0VSVCghZGF0YS5yZWdpc3RyYXRpb24u
a2V5LmlzRW1wdHkoKSk7CkBAIC0xMjgsNiArMTUyLDE1IEBAIHZvaWQgUmVnaXN0cmF0aW9uU3Rv
cmU6OmFkZFJlZ2lzdHJhdGlvbkZyb21EYXRhYmFzZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEm
JiBkCiAgICAgbV9zZXJ2ZXIuYWRkUmVnaXN0cmF0aW9uRnJvbVN0b3JlKFdURk1vdmUoZGF0YSkp
OwogfQogCit2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjphZGRQdXNoTWV0YWRhdGFGcm9tRGF0YWJh
c2UoUHVzaE1ldGFkYXRhRGF0YSYmIGRhdGEpCit7CisgICAgQVNTRVJUKCFkYXRhLm9yaWdpbi5w
cm90b2NvbC5pc0VtcHR5KCkgJiYgIWRhdGEub3JpZ2luLmhvc3QuaXNFbXB0eSgpKTsKKyAgICBp
ZiAoZGF0YS5vcmlnaW4ucHJvdG9jb2wuaXNFbXB0eSgpIHx8IGRhdGEub3JpZ2luLmhvc3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NlcnZlci5hZGRQdXNoTWV0YWRhdGFG
cm9tU3RvcmUoV1RGTW92ZShkYXRhKSk7Cit9CisKIHZvaWQgUmVnaXN0cmF0aW9uU3RvcmU6OmRp
ZFNhdmVXb3JrZXJTY3JpcHRzVG9EaXNrKFNlcnZpY2VXb3JrZXJJZGVudGlmaWVyIHNlcnZpY2VX
b3JrZXJJZGVudGlmaWVyLCBTY3JpcHRCdWZmZXImJiBtYWluU2NyaXB0LCBIYXNoTWFwPFVSTCwg
U2NyaXB0QnVmZmVyPiYmIGltcG9ydGVkU2NyaXB0cykKIHsKICAgICBtX3NlcnZlci5kaWRTYXZl
V29ya2VyU2NyaXB0c1RvRGlzayhzZXJ2aWNlV29ya2VySWRlbnRpZmllciwgV1RGTW92ZShtYWlu
U2NyaXB0KSwgV1RGTW92ZShpbXBvcnRlZFNjcmlwdHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaAppbmRl
eCAzYjNjZDk4N2I3MWU0MjQ3MWYxZTIyNjY3NTA3MDU5NDkxZTJjYjNkLi42MTBlMDRkOWNmYzg3
MmRlZTVjMjEwOTQ0MmQzOGMzYzk1YzE4ZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCkBAIC01OSw5
ICs1OSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIFNXU2VydmVyCiAg
ICAgdm9pZCB1cGRhdGVSZWdpc3RyYXRpb24oY29uc3QgU2VydmljZVdvcmtlckNvbnRleHREYXRh
Jik7CiAgICAgdm9pZCByZW1vdmVSZWdpc3RyYXRpb24oY29uc3QgU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbktleSYpOworICAgIHZvaWQgdXBkYXRlUHVzaE1ldGFkYXRhKGNvbnN0IFB1c2hNZXRh
ZGF0YURhdGEmKTsKKyAgICB2b2lkIHJlbW92ZVB1c2hNZXRhZGF0YShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmKTsKIAogICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgIHZv
aWQgYWRkUmVnaXN0cmF0aW9uRnJvbURhdGFiYXNlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYm
KTsKKyAgICB2b2lkIGFkZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFzZShQdXNoTWV0YWRhdGFEYXRh
JiYpOwogICAgIHZvaWQgZGF0YWJhc2VGYWlsZWRUb09wZW4oKTsKICAgICB2b2lkIGRhdGFiYXNl
T3BlbmVkQW5kUmVjb3Jkc0ltcG9ydGVkKCk7CiAgICAgdm9pZCBkaWRTYXZlV29ya2VyU2NyaXB0
c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFpblNjcmlw
dCwgSGFzaE1hcDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpOwpAQCAtNzcs
NiArODAsNyBAQCBwcml2YXRlOgogICAgIFJlZjxSZWdpc3RyYXRpb25EYXRhYmFzZT4gbV9kYXRh
YmFzZTsKIAogICAgIEhhc2hNYXA8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSwgc3RkOjpv
cHRpb25hbDxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+PiBtX3VwZGF0ZWRSZWdpc3RyYXRpb25z
OworICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBzdGQ6Om9wdGlvbmFsPFB1c2hNZXRh
ZGF0YURhdGE+PiBtX3VwZGF0ZWRQdXNoTWV0YWRhdGE7CiAgICAgVGltZXIgbV9kYXRhYmFzZVB1
c2hUaW1lcjsKIAogICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCmluZGV4IDM5
ZmUxYjc4N2RhNzVmNDQxYmFlNWNhNDc1YTkyMWJmNTljYzM1NjYuLmQ4YTY1ZmY3OTI5OTM2MmQ3
ZDIxZmE1YjQ3NzFmZDdhZGFiNzkzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCkBAIC0xOTAsNiArMTkwLDExIEBAIHZvaWQg
U1dTZXJ2ZXI6OmFkZFJlZ2lzdHJhdGlvbkZyb21TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEmJiBkYXRhKQogICAgIH0pOwogfQogCit2b2lkIFNXU2VydmVyOjphZGRQdXNoTWV0YWRhdGFG
cm9tU3RvcmUoUHVzaE1ldGFkYXRhRGF0YSAmJmRhdGEpCit7CisgICAgbV9vcmlnaW5Ub1B1c2hN
ZXRhZGF0YS5zZXQoZGF0YS5vcmlnaW4sIFdURk1vdmUoZGF0YSkpOworfQorCiB2b2lkIFNXU2Vy
dmVyOjpkaWRTYXZlV29ya2VyU2NyaXB0c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciBz
ZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFpblNjcmlwdCwgSGFzaE1h
cDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpCiB7CiAgICAgaWYgKGF1dG8g
d29ya2VyID0gd29ya2VyQnlJRChzZXJ2aWNlV29ya2VySWRlbnRpZmllcikpCkBAIC0yNjksNiAr
Mjc0LDcgQEAgdm9pZCBTV1NlcnZlcjo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3JlZ2lzdHJhdGlvbnMuYmVnaW4oKS0+
dmFsdWUtPmNsZWFyKCk7CiAgICAgbV9wZW5kaW5nQ29udGV4dERhdGFzLmNsZWFyKCk7CiAgICAg
bV9vcmlnaW5TdG9yZS0+Y2xlYXJBbGwoKTsKKyAgICBtX29yaWdpblRvUHVzaE1ldGFkYXRhLmNs
ZWFyKCk7CiAgICAgaWYgKG1fcmVnaXN0cmF0aW9uU3RvcmUpCiAgICAgICAgIG1fcmVnaXN0cmF0
aW9uU3RvcmUtPmNsZWFyQWxsKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KQEAgLTMw
OCw2ICszMTQsOCBAQCB2b2lkIFNXU2VydmVyOjpjbGVhcihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmIHNlY3VyaXR5T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgcmVnaXN0
cmF0aW9uc1RvUmVtb3ZlLmFwcGVuZChyZWdpc3RyYXRpb24uZ2V0KCkpOwogICAgIH0KIAorICAg
IHJlc2V0U2lsZW50UHVzaENvdW50KHNlY3VyaXR5T3JpZ2luKTsKKwogICAgIGZvciAoYXV0byYg
Y29udGV4dERhdGFzIDogbV9wZW5kaW5nQ29udGV4dERhdGFzLnZhbHVlcygpKSB7CiAgICAgICAg
IGNvbnRleHREYXRhcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgY29udGV4dERhdGEpIHsK
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0RGF0YS5yZWdpc3RyYXRpb24ua2V5LnJlbGF0ZXNU
b09yaWdpbihzZWN1cml0eU9yaWdpbik7CkBAIC01ODcsNiArNTk1LDE5IEBAIHZvaWQgU1dTZXJ2
ZXI6OmRpZEZpbmlzaEFjdGl2YXRpb24oU1dTZXJ2ZXJXb3JrZXImIHdvcmtlcikKICAgICByZWdp
c3RyYXRpb24tPmRpZEZpbmlzaEFjdGl2YXRpb24od29ya2VyLmlkZW50aWZpZXIoKSk7CiB9CiAK
K3ZvaWQgU1dTZXJ2ZXI6OmZsdXNoUGVuZGluZ1JlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBoYW5kbGVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fcmVnaXN0cmF0aW9uU3RvcmUpOworCisgICAgaWYgKCFtX3Jl
Z2lzdHJhdGlvblN0b3JlKSB7CisgICAgICAgIGhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUtPmZsdXNoQ2hhbmdlcyhXVEZNb3ZlKGhh
bmRsZXIpKTsKK30KKwogdm9pZCBTV1NlcnZlcjo6c3RvcmVSZWdpc3RyYXRpb25Gb3JXb3JrZXIo
U1dTZXJ2ZXJXb3JrZXImIHdvcmtlcikKIHsKICAgICBpZiAobV9yZWdpc3RyYXRpb25TdG9yZSkK
QEAgLTEyMjEsNiArMTI0Miw1OSBAQCB2b2lkIFNXU2VydmVyOjpzb2Z0VXBkYXRlKFNXU2VydmVy
UmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24pCiAgICAgc2NoZWR1bGVKb2IoV1RGTW92ZShqb2JE
YXRhKSk7CiB9CiAKK3ZvaWQgU1dTZXJ2ZXI6OmluY3JlbWVudFNpbGVudFB1c2hDb3VudChjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKK3sKKyAgICBBU1NFUlQobV9pbXBvcnRDb21w
bGV0ZWQpOworICAgIEFTU0VSVChtX3JlZ2lzdHJhdGlvblN0b3JlKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3JlZ2lzdHJhdGlvblN0b3JlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogbWVzc2FnZSB3ZWJwdXNoZCBpZiBuZWNlc3NhcnkgdG8g
Y2hhbmdlIHRoZSB3YWtlIHN0YXRlIG9mIHRoZSB0b3BpYy4KKworICAgIGlmIChhdXRvIGl0ID0g
bV9vcmlnaW5Ub1B1c2hNZXRhZGF0YS5maW5kKG9yaWdpbik7IGl0ICE9IG1fb3JpZ2luVG9QdXNo
TWV0YWRhdGEuZW5kKCkpIHsKKyAgICAgICAgaXQtPnZhbHVlLnNpbGVudFB1c2hDb3VudCsrOwor
ICAgICAgICBtX3JlZ2lzdHJhdGlvblN0b3JlLT51cGRhdGVQdXNoTWV0YWRhdGEoaXQtPnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFB1c2hNZXRhZGF0YURhdGEgZGF0YSB7
IG9yaWdpbiwgMSB9OworICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUtPnVwZGF0ZVB1c2hNZXRhZGF0
YShkYXRhKTsKKyAgICBtX29yaWdpblRvUHVzaE1ldGFkYXRhLnNldChvcmlnaW4sIFdURk1vdmUo
ZGF0YSkpOworfQorCit2b2lkIFNXU2VydmVyOjpyZXNldFNpbGVudFB1c2hDb3VudChjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGVk
KTsKKyAgICBBU1NFUlQobV9yZWdpc3RyYXRpb25TdG9yZSk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBtZXNzYWdlIHdlYnB1c2hkIGlmIG5lY2Vzc2FyeSB0
byByZXNldCB0aGUgd2FrZSBzdGF0ZSBvZiB0aGUgdG9waWMuCisKKyAgICBpZiAobV9vcmlnaW5U
b1B1c2hNZXRhZGF0YS5yZW1vdmUoZGF0YSkpCisgICAgICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUt
PnJlbW92ZVB1c2hNZXRhZGF0YShkYXRhKTsKK30KKwordm9pZCBTV1NlcnZlcjo6Z2V0U2lsZW50
UHVzaENvdW50Rm9yVGVzdGluZyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHdoZW5JbXBv
cnRJc0NvbXBsZXRlZElmTmVlZGVkKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9
LCBvcmlnaW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYXV0byBpdCA9IG1fb3JpZ2luVG9QdXNoTWV0YWRhdGEuZmluZChv
cmlnaW4pOyBpdCAhPSBtX29yaWdpblRvUHVzaE1ldGFkYXRhLmVuZCgpKSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihpdC0+dmFsdWUuc2lsZW50UHVzaENvdW50KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6
bnVsbG9wdCk7CisgICAgfSk7Cit9CisKIHZvaWQgU1dTZXJ2ZXI6OnByb2Nlc3NQdXNoTWVzc2Fn
ZShzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBkYXRhLCBVUkwmJiByZWdpc3RyYXRp
b25VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCiB7CiAgICAg
d2hlbkltcG9ydElzQ29tcGxldGVkSWZOZWVkZWQoW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7
ICp0aGlzIH0sIGRhdGEgPSBXVEZNb3ZlKGRhdGEpLCByZWdpc3RyYXRpb25VUkwgPSBXVEZNb3Zl
KHJlZ2lzdHJhdGlvblVSTCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJs
ZSB7CkBAIC0xMjQ5LDE1ICsxMzIzLDE5IEBAIHZvaWQgU1dTZXJ2ZXI6OnByb2Nlc3NQdXNoTWVz
c2FnZShzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBkYXRhLCBVUkwmJiByCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gc2VydmljZVdvcmtlcklkZW50aWZpZXIgPSB3
b3JrZXItPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIGF1dG8gdGVybWluYXRlV29ya2VyVGlt
ZXIgPSBtYWtlVW5pcXVlPFRpbWVyPihbd29ya2VyID0gV1RGTW92ZSh3b3JrZXIpXSB7CisgICAg
ICAgICAgICBhdXRvIG9yaWdpbiA9IHdvcmtlci0+cmVnaXN0cmF0aW9uS2V5KCkudG9wT3JpZ2lu
KCk7CisgICAgICAgICAgICBhdXRvIHRlcm1pbmF0ZVdvcmtlclRpbWVyID0gbWFrZVVuaXF1ZTxU
aW1lcj4oW3dvcmtlciA9IFdURk1vdmUod29ya2VyKSwgd2Vha1RoaXNdIHsKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiVGVybWluYXRpbmcgc2Vydmlj
ZSB3b3JrZXIgYXMgcHJvY2Vzc2luZyBwdXNoIGV2ZW50IHRvb2sgdG9vIG11Y2ggdGltZSIpOwor
ICAgICAgICAgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPmluY3JlbWVudFNpbGVudFB1c2hDb3VudCh3b3JrZXItPnJlZ2lzdHJhdGlvbktleSgpLnRv
cE9yaWdpbigpKTsKICAgICAgICAgICAgICAgICB3b3JrZXItPnRlcm1pbmF0ZSgpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB0ZXJtaW5hdGVXb3JrZXJUaW1lci0+c3RhcnRPbmVTaG90
KHdlYWtUaGlzICYmIHdlYWtUaGlzLT5tX2lzUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
ID8gZGVmYXVsdFRlcm1pbmF0aW9uRGVsYXkgOiAyX3MpOwotICAgICAgICAgICAgY29ubmVjdGlv
bk9yU3RhdHVzLnZhbHVlKCktPmZpcmVQdXNoRXZlbnQoc2VydmljZVdvcmtlcklkZW50aWZpZXIs
IGRhdGEsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB0ZXJtaW5hdGVXb3JrZXJUaW1l
ciA9IFdURk1vdmUodGVybWluYXRlV29ya2VyVGltZXIpXShib29sIHN1Y2NlZWRlZCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBjb25uZWN0aW9uT3JTdGF0dXMudmFsdWUoKS0+ZmlyZVB1c2hFdmVu
dChzZXJ2aWNlV29ya2VySWRlbnRpZmllciwgZGF0YSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHRlcm1pbmF0ZVdvcmtlclRpbWVyID0gV1RGTW92ZSh0ZXJtaW5hdGVXb3JrZXJUaW1l
ciksIG9yaWdpbiA9IFdURk1vdmUob3JpZ2luKSwgd2Vha1RoaXNdKGJvb2wgc3VjY2VlZGVkKSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAodGVybWluYXRlV29ya2VyVGltZXItPmlzQWN0
aXZlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVdvcmtlclRpbWVyLT5zdG9wKCk7
Ci0KKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2NlZWRlZCAmJiB3ZWFrVGhpcykKKyAgICAgICAg
ICAgICAgICAgICAgd2Vha1RoaXMtPmluY3JlbWVudFNpbGVudFB1c2hDb3VudChvcmlnaW4pOwog
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWRlZCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1NXU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NX
U2VydmVyLmgKaW5kZXggMzIzNzU0NTNiNGZkMGNjZjNmMWFkYWIyNzMzOWMwZGVmN2E1NzVmNi4u
NjBlOTk4NTdlMTlmOGY1YWQ2ZWYyYTk0ZGYxYzIwM2FhY2U4NjJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckNsaWVu
dERhdGEuaCIKKyNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaCIKICNpbmNsdWRl
ICJTZXJ2aWNlV29ya2VySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJKb2Iu
aCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGF0YS5oIgpAQCAtNjIsOCAr
NjMsOCBAQCBlbnVtIGNsYXNzIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25TdGF0ZSA6IHVpbnQ4
X3Q7CiBlbnVtIGNsYXNzIFNlcnZpY2VXb3JrZXJTdGF0ZSA6IHVpbnQ4X3Q7CiBzdHJ1Y3QgRXhj
ZXB0aW9uRGF0YTsKIHN0cnVjdCBNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0czsKK3N0cnVjdCBQdXNo
TWV0YWRhdGFEYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnM7Ci1z
dHJ1Y3QgU2VydmljZVdvcmtlckNvbnRleHREYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EYXRhOwogc3RydWN0IFdvcmtlckZldGNoUmVzdWx0OwogCkBAIC0xOTEsMTEgKzE5
MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNvbHZlUmVnaXN0cmF0aW9uUmVhZHlSZXF1ZXN0
cyhTV1NlcnZlclJlZ2lzdHJhdGlvbiYpOwogCiAgICAgdm9pZCBhZGRSZWdpc3RyYXRpb25Gcm9t
U3RvcmUoU2VydmljZVdvcmtlckNvbnRleHREYXRhJiYpOworICAgIHZvaWQgYWRkUHVzaE1ldGFk
YXRhRnJvbVN0b3JlKFB1c2hNZXRhZGF0YURhdGEmJik7CiAgICAgdm9pZCBkaWRTYXZlV29ya2Vy
U2NyaXB0c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFp
blNjcmlwdCwgSGFzaE1hcDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpOwog
ICAgIHZvaWQgcmVnaXN0cmF0aW9uU3RvcmVJbXBvcnRDb21wbGV0ZSgpOwogICAgIHZvaWQgcmVn
aXN0cmF0aW9uU3RvcmVEYXRhYmFzZUZhaWxlZFRvT3BlbigpOwogICAgIHZvaWQgc3RvcmVSZWdp
c3RyYXRpb25Gb3JXb3JrZXIoU1dTZXJ2ZXJXb3JrZXImKTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmx1c2hQZW5kaW5nUmVnaXN0cmF0aW9uc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0T3JpZ2luc1dpdGhS
ZWdpc3RyYXRpb25zKEZ1bmN0aW9uPHZvaWQoY29uc3QgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRh
dGE+Jik+JiYpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1
cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIyMiw2ICsyMjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
aG91bGRSdW5TZXJ2aWNlV29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZzsgfQog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzUHVzaE1lc3NhZ2Uoc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+JiYsIFVSTCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0U2lsZW50UHVzaENvdW50KGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0U2lsZW50
UHVzaENvdW50Rm9yVGVzdGluZyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KT4mJik7CiAKICAgICBlbnVtIGNs
YXNzIFNob3VsZFNraXBFdmVudCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgdm9pZCBmaXJlRnVu
Y3Rpb25hbEV2ZW50KFNXU2VydmVyUmVnaXN0cmF0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChFeHBlY3RlZDxTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24qLCBTaG91bGRTa2lwRXZlbnQ+
KT4mJik7CkBAIC0yNTYsNiArMjYyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUFwcElu
aXRpYXRlZFZhbHVlRm9yV29ya2Vycyhjb25zdCBDbGllbnRPcmlnaW4mLCBMYXN0TmF2aWdhdGlv
bldhc0FwcEluaXRpYXRlZCk7CiAgICAgdm9pZCB3aGVuSW1wb3J0SXNDb21wbGV0ZWRJZk5lZWRl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgdm9pZCBpbmNyZW1lbnRTaWxl
bnRQdXNoQ291bnQoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJik7CisKICAgICBIYXNoTWFwPFNX
U2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0aW9uPj4g
bV9jb25uZWN0aW9uczsKICAgICBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXks
IFdlYWtQdHI8U1dTZXJ2ZXJSZWdpc3RyYXRpb24+PiBtX3Njb3BlVG9SZWdpc3RyYXRpb25NYXA7
CiAgICAgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllciwgc3RkOjp1
bmlxdWVfcHRyPFNXU2VydmVyUmVnaXN0cmF0aW9uPj4gbV9yZWdpc3RyYXRpb25zOwpAQCAtMjk3
LDYgKzMwNSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1NlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVkQXBwQm91bmREb21haW5zIHsg
ZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX3VuaXF1ZVJlZ2lzdHJhdGlvbkNvdW50IHsgMCB9Owor
CisgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIFB1c2hNZXRhZGF0YURhdGE+IG1fb3Jp
Z2luVG9QdXNoTWV0YWRhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDE3NWJk
MzgxNjQ3NDkxNmNjMDExNWM5ZDhmZjJjNTg2YmQwZTMxZTguLjRlMmFmOGVlNzkxN2IyNzRiNGVl
MDc3Mzc3ZjgyY2IwYmI1MzA0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMjY2LDYgKzIyNjYsMTggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UHVzaE1lc3NhZ2UKICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Np
b25JRCkpCiAgICAgICAgIHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCkucHJvY2Vzc1B1c2hNZXNz
YWdlKFdURk1vdmUocHVzaE1lc3NhZ2UucHVzaERhdGEpLCBXVEZNb3ZlKHB1c2hNZXNzYWdlLnJl
Z2lzdHJhdGlvblVSTCksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoYXV0
byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24t
PmVuc3VyZVNXU2VydmVyKCkuZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhvcmlnaW4sIFdU
Rk1vdmUoY2FsbGJhY2spKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6Zmx1c2hQZW5kaW5n
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lv
bi0+ZW5zdXJlU1dTZXJ2ZXIoKS5mbHVzaFBlbmRpbmdSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhX
VEZNb3ZlKGNhbGxiYWNrKSk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXgg
MGY4NTMzZWQxM2RkMjYyNzdhNmRkNTJhYjZkYWJlMjBjM2UwODgwNS4uMmJkMGNlOWRlYmZjNGYw
ZTBjNzQwYjcyMzBmNmIwY2EyNDE5YjZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMzc1LDYgKzM3NSw4IEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgdm9pZCBnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJQdXNo
TWVzc2FnZT4mKT4mJik7CiAgICAgdm9pZCBwcm9jZXNzUHVzaE1lc3NhZ2UoUEFMOjpTZXNzaW9u
SUQsIFdlYlB1c2hNZXNzYWdlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwor
ICAgIHZvaWQgZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pPiYmKTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBkZWxldGVQdXNoQW5kTm90
aWZpY2F0aW9uUmVnaXN0cmF0aW9uKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluCmluZGV4IDYzMWUyYjYwNzNjMDE5MjEzMDY4YzIwOTZiODI3YjI3OWRi
YzdkZTAuLjA4ZmU1YTYyMDc5YjFlM2ZlZGNmMGEyZjBmNjYwNmJhNGZiZDViOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMjA5LDYgKzIwOSw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExl
Z2FjeVJlY2VpdmVyIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgR2V0UGVuZGlu
Z1B1c2hNZXNzYWdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChWZWN0b3I8V2ViS2l0
OjpXZWJQdXNoTWVzc2FnZT4gbWVzc2FnZXMpIEFzeW5jCiAgICAgUHJvY2Vzc1B1c2hNZXNzYWdl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2Ug
cHVzaE1lc3NhZ2UpIC0+IChib29sIGRpZFN1Y2NlZWQpIEFzeW5jCisgICAgR2V0U2lsZW50UHVz
aENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEgb3JpZ2luKSAtPiAoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
Y291bnQpIEFzeW5jCisgICAgRmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICNlbmRpZgog
ICAgIERlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG9yaWdpbikgLT4g
KFN0cmluZyBlcnJvck1lc3NhZ2UpIEFzeW5jCiAgICAgR2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2lucykgQXN5bmMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2Vy
L1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggYjM5MGNhZmE2MDQxZjNlODAxZmQyZDNh
OGMyNDNiNTU0NzUxMjI5NC4uMmVhMWJjZDg4YzY1NzBkYThiZTcwMDYxN2JkOWRiZjE2ODk5ZDcz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2Vy
L1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTE5NCw2ICsx
OTQsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtlckZldGNoVGFzaz4gV2ViU1dTZXJ2
ZXJDb25uZWN0aW9uOjpjcmVhdGVGZXRjaFRhc2soTgogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKKyAgICBpZiAod29ya2VyICYmIHJlcXVlc3QuaXNUb3BTaXRlKCkgJiYgcmVnaXN0
cmF0aW9uKQorICAgICAgICBzZXJ2ZXIoKS5yZXNldFNpbGVudFB1c2hDb3VudChyZWdpc3RyYXRp
b24tPmtleSgpLnRvcE9yaWdpbigpKTsKKwogICAgIGlmICh3b3JrZXItPnNob3VsZFNraXBGZXRj
aEV2ZW50KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi0+c2hvdWxkU29mdFVwZGF0ZShs
b2FkZXIucGFyYW1ldGVycygpLm9wdGlvbnMpKQogICAgICAgICAgICAgcmVnaXN0cmF0aW9uLT5z
Y2hlZHVsZVNvZnRVcGRhdGUobG9hZGVyLmlzQXBwSW5pdGlhdGVkKCkgPyBXZWJDb3JlOjpJc0Fw
cEluaXRpYXRlZDo6WWVzIDogV2ViQ29yZTo6SXNBcHBJbml0aWF0ZWQ6Ok5vKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tCmluZGV4IGY5MTM0ODNkZWRhMDQxMjc2MzhhZmJhZGYxZGQ3MmViODRiMzgyMTguLjdhMzc4
ZDc0ZTA1N2ZkOTQ5MTI5NjQzZDU5YjY0ZDJiNTlhNzgxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAt
NzY5LDYgKzc2OSwxNyBAQCAtKGJvb2wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZp
dHlGb3JUZXN0aW5nCiAgICAgcmV0dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTZXJ2aWNlV29y
a2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogfQogCistKHZvaWQpX2ZsdXNoUGVu
ZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZzoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgoreworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7
CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkKKyAgICAgICAgLmZsdXNo
UGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhfd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIFtjb21wbGV0aW9uSGFuZGxlckNvcHldKCkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KCk7CisgICAgICAgIH0pOworI2VuZGlmCit9CisKIC0o
dm9pZClfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczoodm9pZCheKShOU0FycmF5PE5TRGljdGlvbmFy
eSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
QEAgLTc5Nyw2ICs4MDgsMTggQEAgLSh2b2lkKV9wcm9jZXNzUHVzaE1lc3NhZ2U6KE5TRGljdGlv
bmFyeSAqKXB1c2hNZXNzYWdlRGljdGlvbmFyeSBjb21wbGV0aW9uSGFuZGwKICNlbmRpZgogfQog
CistKHZvaWQpX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6KE5TVVJMICopdXJsIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TSW50ZWdlcikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworICAgIF93ZWJzaXRlRGF0YVN0b3Jl
LT5uZXR3b3JrUHJvY2VzcygpCisgICAgICAgIC5nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5n
KF93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tVVJMKHVybCksIFtjb21wbGV0aW9uSGFuZGxlckNvcHldKHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGNvdW50KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoY291
bnQgPyBzdGF0aWNfY2FzdDxOU0ludGVnZXI+KCpjb3VudCkgOiBOU05vdEZvdW5kKTsKKyAgICAg
ICAgfSk7CisKKyNlbmRpZgorfQorCiAtKHZvaWQpX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25S
ZWdpc3RyYXRpb246KFdLU2VjdXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggMzFhODU0MDc0MTRkNGE3M2U5OGJjNDEx
ZTYxN2ZmOGM0OGNkMTg2OS4uNGVlNmViZmY4M2EwMzRjOTA0MTY2NGNhNjhmMTM2ODdhNjExMzhm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC0xMDksOCArMTA5LDEwIEBAIHR5cGVk
ZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25z
KSB7CiAtICh2b2lkKV9jb3VudE5vbkRlZmF1bHRTZXNzaW9uU2V0czoodm9pZCheKShzaXplX3Qp
KWNvbXBsZXRpb25IYW5kbGVyOwogCiAtKGJvb2wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CistKHZvaWQpX2ZsdXNoUGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25zRm9yVGVzdGluZzoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIC0odm9p
ZClfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczoodm9pZCheKShOU0FycmF5PE5TRGljdGlvbmFyeSAq
PiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogLSh2b2lkKV9wcm9jZXNzUHVzaE1lc3NhZ2U6KE5TRGljdGlv
bmFyeSAqKXB1c2hNZXNzYWdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKGJvb2wpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistKHZvaWQpX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6KE5TVVJMICop
dXJsIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TSW50ZWdlcikpY29tcGxldGlvbkhhbmRs
ZXI7CiAtKHZvaWQpX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb246KFdLU2Vj
dXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShO
U0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtKHZvaWQpX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOih2b2lkKF4pKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4g
KikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGFlNzc4MThkZjJlMTNh
YTg4ZTNkOGY4YzEyOTg0MTJkY2Y3YzMxNDIuLmMzMDgxOTNhNjQ3YTA5NzNiZjEyYTQ4OGY2YjJm
OWViNDgyMjlmOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTcxNCw2ICsxNzE0LDE2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgV2ViCiB7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1B1c2hNZXNzYWdlIHsgc2Vzc2lvbklELCBwdXNoTWVzc2Fn
ZSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCAgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik+JiYgY2FsbGJhY2spCit7CisgICAgc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0U2lsZW50UHVzaENv
dW50Rm9yVGVzdGluZyB7IHNlc3Npb25JRCwgb3JpZ2luIH0sIFdURk1vdmUoY2FsbGJhY2spKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaFBlbmRpbmdTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbnNGb3JUZXN0aW5nIHsgc2Vzc2lvbklEIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKK30K
ICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBj
NDMxOTg0OTM4OWQxMjI5MTVlMDc3ZjgzMGQzNWM5MDZlZjRkYjQxLi43NzI1NGYyZWZhZTdkNzVl
Yjk2YTcwNWI3NGE3MzAwZjMzOTFjNGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMjc5LDYgKzI3OSw4IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgdm9pZCBnZXRQZW5kaW5n
UHVzaE1lc3NhZ2VzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFZlY3RvcjxXZWJQdXNoTWVzc2FnZT4mKT4mJik7CiAgICAgdm9pZCBwcm9jZXNzUHVzaE1lc3Nh
Z2UoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYlB1c2hNZXNzYWdlJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIHdhc1Byb2Nlc3NlZCk+JiYpOworICAgIHZvaWQgZ2V0U2lsZW50UHVzaENv
dW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiwgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4p
PiYmKTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9y
VGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNl
bmRpZgogCiAgICAgdm9pZCBkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZjk3NDk2MTRhOTE2ZWY1ODBlZDcyNzAz
NWM2M2NlMzcyNDM3YzgwLi4xMGE4MzMxMDAxY2RjNDM1MmJlNTI3YTJhODExZGRhOTkwOTVmNWM3
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMjItMDItMTIgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgVHJhY2sgc2lsZW50IHB1c2ggY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEZXNjcmlwdGlvbiB0byBjb21lLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QdXNoQVBJLm1tOgorCiAyMDIyLTAyLTA5
ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5dIFNw
ZWNpZnkgTG9jYWxBdXRoZW50aWNhdG9yQWNjZXNzR3JvdXAgd2hlbiBpbXBvcnRpbmcgY3JlZGVu
dGlhbHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UHVzaEFQSS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHVzaEFQ
SS5tbQppbmRleCBiNjcyOTY3OGFmOTk4NTdkMmFmZjkwYzNjYWU0M2U2ZmIyNDdjYWI0Li41YjBi
NGE0OGQwYzBmMmIxY2UyNjM5ODE4NWJlNjNhNjIxYWM0NGE0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1B1c2hBUEkubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QdXNoQVBJLm1tCkBAIC04OSw2ICs4OSwxMSBA
QCBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZlbnQpID0+IHsKICAgICBwb3J0
LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwogfSk7CiBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoInB1c2gi
LCAoZXZlbnQpID0+IHsKKyAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLnRleHQoKSA9
PSAncmVqZWN0JykgeworICAgICAgICBldmVudC53YWl0VW50aWwoUHJvbWlzZS5yZWplY3QoJ2lu
c3RhLXJlamVjdCcpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHRyeSB7CiAgICAg
ICAgIGlmICghZXZlbnQuZGF0YSkgewogICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVj
ZWl2ZWQ6IG51bGwgZGF0YSIpOwpAQCAtMTI3LDEyICsxMzIsMjUgQEAgc3RhdGljIGJvb2wgd2Fp
dFVudGlsRXZhbHVhdGVzVG9UcnVlKGNvbnN0IEZ1bmN0aW9uPGJvb2woKT4mIGYpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdGF0aWMgTlNJbnRlZ2VyIGdldFNpbGVudFB1c2hDb3VudChXS1dl
YnNpdGVEYXRhU3RvcmUqIHN0b3JlLCBOU1VSTCAqdXJsKQoreworICAgIF9fYmxvY2sgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgX19ibG9jayBOU0ludGVnZXIgY291bnQgPSBOU05vdEZvdW5kOwor
ICAgIFtzdG9yZSBfZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZzp1cmwgY29tcGxldGlvbkhh
bmRsZXI6XihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGNvdW50ID0gcmVzdWx0OworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworICAgIHJldHVybiBjb3VudDsKK30KKwogVEVTVChQdXNoQVBJLCBmaXJlUHVzaEV2
ZW50KQogewogICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2VydmVyKHsKICAgICAgICAg
eyAiLyIsIHsgbWFpbkJ5dGVzIH0gfSwKICAgICAgICAgeyAiL3N3LmpzIiwgeyB7eyAiQ29udGVu
dC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH19LCBzY3JpcHRCeXRlcyB9IH0KICAg
ICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cCk7CisgICAgTlNV
UkwgKnVybCA9IFtzZXJ2ZXIucmVxdWVzdCgpIFVSTF07CiAKICAgICBbV0tXZWJzaXRlRGF0YVN0
b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOwogCkBAIC0xNjMsNiAr
MTgxLDcgQEAgVEVTVChQdXNoQVBJLCBmaXJlUHVzaEV2ZW50KQogCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZwdXNoTWVzc2FnZVByb2Nlc3NlZCk7CiAgICAgRVhQRUNUX1RSVUUocHVz
aE1lc3NhZ2VTdWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtj
b25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCBOU05vdEZvdW5kKTsKIAogICAg
IGRvbmUgPSBmYWxzZTsKICAgICBwdXNoTWVzc2FnZVByb2Nlc3NlZCA9IGZhbHNlOwpAQCAtMTc3
LDYgKzE5Niw0MCBAQCBURVNUKFB1c2hBUEksIGZpcmVQdXNoRXZlbnQpCiAKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsKICAgICBFWFBFQ1RfRkFM
U0UocHVzaE1lc3NhZ2VTdWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENv
dW50KFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCAxKTsKKworICAgIF9f
YmxvY2sgYm9vbCBkaWRGbHVzaENoYW5nZXMgPSBmYWxzZTsKKyAgICBbW2NvbmZpZ3VyYXRpb24g
d2Vic2l0ZURhdGFTdG9yZV0gX2ZsdXNoUGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25z
Rm9yVGVzdGluZzpeKCkgeworICAgICAgICBkaWRGbHVzaENoYW5nZXMgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZGlkRmx1c2hDaGFuZ2VzKTsKKworICAg
IC8vIFRyeSBzZW5kaW5nIGFub3RoZXIgc2lsZW50IHB1c2ggYWZ0ZXIgdGhlIG5ldHdvcmsgcHJv
Y2VzcyBkaWVzIHRvIG1ha2Ugc3VyZSB0aGUgY291bnQgaXMgcGVyc2lzdGVkLgorICAgIFtbY29u
ZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwor
CisgICAgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsKKyAgICBwdXNoTWVzc2FnZVN1Y2Nl
c3NmdWwgPSBmYWxzZTsKKyAgICBtZXNzYWdlID0gQCJyZWplY3QiOworICAgIFtbY29uZmlndXJh
dGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSBfcHJvY2Vzc1B1c2hNZXNzYWdlOm1lc3NhZ2VEaWN0aW9u
YXJ5KFttZXNzYWdlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgW3Nl
cnZlci5yZXF1ZXN0KCkgVVJMXSkgY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgewor
ICAgICAgICBwdXNoTWVzc2FnZVN1Y2Nlc3NmdWwgPSByZXN1bHQ7CisgICAgICAgIHB1c2hNZXNz
YWdlUHJvY2Vzc2VkID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsKKyAgICBFWFBFQ1RfRkFMU0UocHVzaE1lc3NhZ2VT
dWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtjb25maWd1cmF0
aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCAyKTsKKworICAgIC8vIFZpc2l0aW5nIHRoZSBw
YWdlIGFnYWluIHNob3VsZCBjbGVhciB0aGUgc2lsZW50IHB1c2ggY291bnQuCisgICAgZG9uZSA9
IGZhbHNlOworICAgIGV4cGVjdGVkTWVzc2FnZSA9ICJSZWFkeSI7CisgICAgYXV0byB3ZWJWaWV3
MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
W3dlYlZpZXcyIGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOworCisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50
KFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCBOU05vdEZvdW5kKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjbGVhcmVkIHNpbGVudCBwdXNoIGNvdW50IHdhcyBw
ZXJzaXN0ZWQuCisgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdIF90ZXJtaW5h
dGVOZXR3b3JrUHJvY2Vzc107CisgICAgRVhQRUNUX0VRKGdldFNpbGVudFB1c2hDb3VudChbY29u
ZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSwgdXJsKSwgTlNOb3RGb3VuZCk7CiAKICAgICBj
bGVhcldlYnNpdGVEYXRhU3RvcmUoW2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451835</attachid>
            <date>2022-02-13 11:54:05 -0800</date>
            <delta_ts>2022-02-13 20:58:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236543-20220213115404.patch</filename>
            <type>text/plain</type>
            <size>54112</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyMjFhMWE5MTc1OTA5
YmVhMzFlMTM0YzZlY2UwMzQzOWQ4MmMzZC4uOTcwMjQ0ZjhlNGY3YTcyM2U0OTkxZDgxMzMwMDky
ZDMxN2M0MWY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIyLTAyLTEyICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIFRyYWNrIHNpbGVudCBwdXNoIGNvdW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVzY3Jp
cHRpb24gdG8gY29tZS4KKworICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6aXNv
bGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hNZXRhZGF0YURhdGE6Omlz
b2xhdGVkQ29weSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1c2hNZXRhZGF0YURhdGE6OmRlY29kZSk6CisgICAg
ICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwdXNoTWV0YWRhdGFUYWJsZVNjaGVtYSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6Om9wZW5TUUxpdGVEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93c0lmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxp
ZFB1c2hNZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjpwdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6c2NoZWR1bGVQdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25E
YXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25E
YXRhYmFzZTo6ZG9SZWdpc3RyYXRpb25DaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lz
dHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hNZXRhZGF0YUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFB1c2hNZXRhZGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6YWRkUHVzaE1ldGFkYXRhVG9TdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkc0lmTmVjZXNz
YXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJh
dGlvbkRhdGFiYXNlLmg6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3Ry
YXRpb25TdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25TdG9yZTo6cHVz
aENoYW5nZXNUb0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3Jl
OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25TdG9yZTo6dXBkYXRl
UHVzaE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3JlOjpyZW1v
dmVQdXNoTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uU3RvcmU6OmFk
ZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFzZSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9SZWdpc3RyYXRpb25TdG9yZS5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2ZXI6OmFkZFB1c2hNZXRh
ZGF0YUZyb21TdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Y2xlYXJBbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNX
U2VydmVyOjpmbHVzaFBlbmRpbmdSZWdpc3RyYXRpb25zRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTV1NlcnZlcjo6aW5jcmVtZW50U2lsZW50UHVzaENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNXU2VydmVyOjpyZXNldFNpbGVudFB1c2hDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTV1NlcnZlcjo6Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTV1NlcnZlcjo6cHJvY2Vzc1B1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1NXU2VydmVyLmg6CisKIDIwMjItMDItMDkgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSBpbXByb3ZlIHNpemluZyBvbiBt
YWNPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCBiMjFkMDFmOTRjYTk3ODA5YThhMGUzNjJmODJmYTg1ZThlNDVhMzlm
Li5kYjYwZmQyMDRmZjdlOGZmYjE2ODEwMGRhMmQ1MGIwOTdjZDY5ZjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDIyLTAyLTEyICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFRyYWNrIHNpbGVudCBwdXNoIGNvdW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRGVzY3JpcHRpb24gdG8gY29tZS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmdldFNpbGVudFB1c2hDb3VudEZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Zmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bnNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGVG
ZXRjaFRhc2spOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX2ZsdXNoUGVuZGluZ1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRl
RGF0YVN0b3JlIF9nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nOmNvbXBsZXRpb25IYW5kbGVy
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRTaWxlbnRQdXNo
Q291bnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
Zmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisKIDIwMjItMDIt
MDkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVs
XSBpbXByb3ZlIHNpemluZyBvbiBtYWNPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcAppbmRleCAxYTQx
MTEzNjQwMDBmM2FjYWYzNzBmMGM5ZTMxMTQyMjdhODljMDllLi4wODFiZjVhMjM3MDI4ZmJiOGI5
Zjg2NjY4Y2QzNWZhYjIzNzA1Y2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmNwcApAQCAtNzMsNiAr
NzMsMjIgQEAgU2VydmljZVdvcmtlckNvbnRleHREYXRhIFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YTo6aXNvbGF0ZWRDb3B5KCkgJiYKICAgICB9OwogfQogCitQdXNoTWV0YWRhdGFEYXRhIFB1c2hN
ZXRhZGF0YURhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0ICYKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBvcmlnaW4uaXNvbGF0ZWRDb3B5KCksCisgICAgICAgIHNpbGVudFB1c2hDb3VudAorICAg
IH07Cit9CisKK1B1c2hNZXRhZGF0YURhdGEgUHVzaE1ldGFkYXRhRGF0YTo6aXNvbGF0ZWRDb3B5
KCkgJiYKK3sKKyAgICByZXR1cm4geworICAgICAgICBXVEZNb3ZlKG9yaWdpbikuaXNvbGF0ZWRD
b3B5KCksCisgICAgICAgIHNpbGVudFB1c2hDb3VudAorICAgIH07Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4
dERhdGEuaAppbmRleCA0NmE5ZmE3MDEyOWUzNzVjNTk2ODFiYmE2ZTMwZWE5OGFiY2IxZDg3Li5h
MDA2OTljMjgxZGRhYWQ3YzA3MzA5Nzc1Nzk5NTI0ODc0M2UyZDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0
YS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTmF2aWdhdGlvblByZWxvYWRTdGF0ZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5j
bHVkZSAiU2VydmljZVdvcmtlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2Vy
Sm9iRGF0YUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGF0YS5oIgpAQCAtMjAxLDYgKzIwMiw0MiBAQCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJD
b250ZXh0RGF0YT4gU2VydmljZVdvcmtlckNvbnRleHREYXRhOjpkZWNvZGUoRGVjb2RlcgogICAg
IH19OwogfQogCitzdHJ1Y3QgUHVzaE1ldGFkYXRhRGF0YSB7CisgICAgU2VjdXJpdHlPcmlnaW5E
YXRhIG9yaWdpbjsKKyAgICB1bnNpZ25lZCBzaWxlbnRQdXNoQ291bnQ7CisKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRhRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKKworICAgIFB1c2hNZXRhZGF0YURhdGEgaXNvbGF0ZWRDb3B5KCkg
Y29uc3QgJjsKKyAgICBQdXNoTWV0YWRhdGFEYXRhIGlzb2xhdGVkQ29weSgpICYmOworfTsKKwor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHVzaE1ldGFkYXRhRGF0YTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBvcmlnaW4gPDwgc2lsZW50
UHVzaENvdW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxQ
dXNoTWV0YWRhdGFEYXRhPiBQdXNoTWV0YWRhdGFEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luOworICAg
IGRlY29kZXIgPj4gb3JpZ2luOworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2lsZW50UHVzaENvdW50
OworICAgIGRlY29kZXIgPj4gc2lsZW50UHVzaENvdW50OworICAgIGlmICghc2lsZW50UHVzaENv
dW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeworICAg
ICAgICBXVEZNb3ZlKCpvcmlnaW4pLAorICAgICAgICBXVEZNb3ZlKCpzaWxlbnRQdXNoQ291bnQp
CisgICAgfSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCmluZGV4IGI0ZTFh
NDU4NDhlZWMzNzkxMzJjMDM5OTY4YzU1MWZjYjljMmFkN2EuLmU2MGUzMmFlMzY0MTBmMGVmZGEy
YmJkZWZkMGQzZTU5ODhiY2Y4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuY3BwCkBAIC01
MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IHVpbnQ2
NF90IHNjaGVtYVZlcnNpb24gPSA4Oworc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNjaGVtYVZlcnNp
b24gPSA5OwogCiAjZGVmaW5lIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1BSRUZJWCAiQ1JFQVRFIFRB
QkxFICIKICNkZWZpbmUgUkVDT1JEU19UQUJMRV9TQ0hFTUFfU1VGRklYICIoIiBcCkBAIC03MCw2
ICs3MCwxMSBAQCBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDg7CiAgICAg
IiwgcHJlbG9hZFN0YXRlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCIgXAogICAgICIp
Il9zOwogCisjZGVmaW5lIFBVU0hfTUVUQURBVEFfVEFCTEVfU0NIRU1BICJDUkVBVEUgVEFCTEUg
UHVzaE1ldGFkYXRhICgiIFwKKyAgICAib3JpZ2luIFRFWFQgUFJJTUFSWSBLRVkiIFwKKyAgICAi
LCBzaWxlbnRQdXNoQ291bnQgSU5UIE5PVCBOVUxMIiBcCisgICAgIikiX3M7CisKIHN0YXRpYyBB
U0NJSUxpdGVyYWwgcmVjb3Jkc1RhYmxlU2NoZW1hKCkKIHsKICAgICByZXR1cm4gUkVDT1JEU19U
QUJMRV9TQ0hFTUFfUFJFRklYICJSZWNvcmRzIiBSRUNPUkRTX1RBQkxFX1NDSEVNQV9TVUZGSVg7
CkBAIC04MCw2ICs4NSwxMSBAQCBzdGF0aWMgQVNDSUlMaXRlcmFsIHJlY29yZHNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpCiAgICAgcmV0dXJuIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1BSRUZJWCAiXCJS
ZWNvcmRzXCIiIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1NVRkZJWDsKIH0KIAorc3RhdGljIEFTQ0lJ
TGl0ZXJhbCBwdXNoTWV0YWRhdGFUYWJsZVNjaGVtYSgpCit7CisgICAgcmV0dXJuIFBVU0hfTUVU
QURBVEFfVEFCTEVfU0NIRU1BOworfQorCiBzdGF0aWMgaW5saW5lIFN0cmluZyBkYXRhYmFzZUZp
bGVuYW1lRnJvbVZlcnNpb24odWludDY0X3QgdmVyc2lvbikKIHsKICAgICByZXR1cm4gbWFrZVN0
cmluZygiU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMtIiwgdmVyc2lvbiwgIi5zcWxpdGUzIik7
CkBAIC0xNzIsNyArMTgyLDcgQEAgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OlJlZ2lzdHJhdGlvbkRh
dGFiYXNlKFJlZ2lzdHJhdGlvblN0b3JlJiBzdG9yZSwgU3RyaW5nJiYgZGEKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgcG9zdFRhc2tUb1dvcmtRdWV1ZShbdGhpc10gewotICAg
ICAgICBpbXBvcnRSZWNvcmRzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW1wb3J0Um93c0lmTmVj
ZXNzYXJ5KCk7CiAgICAgfSk7CiB9CiAKQEAgLTIzMSwxMCArMjQxLDE3IEBAIGJvb2wgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6Om9wZW5TUUxpdGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIGZ1bGxGaWxl
bmFtZSkKICAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KKworICAgIGVycm9yTWVzc2FnZSA9IGVuc3VyZVZhbGlkUHVzaE1ldGFkYXRhVGFi
bGUoKTsKKyAgICBpZiAoIWVycm9yTWVzc2FnZS5pc051bGwoKSkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiZW5zdXJlVmFsaWRQdXNoTWV0YWRhdGFUYWJsZSBm
YWlsZWQsIHJlYXNvbjogJSIgUFVCTElDX0xPR19TVFJJTkcsIGVycm9yTWVzc2FnZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KICAgICAKLSAgICBlcnJvck1lc3NhZ2UgPSBpbXBvcnRSZWNvcmRzKCk7Cisg
ICAgZXJyb3JNZXNzYWdlID0gaW1wb3J0Um93cygpOwogICAgIGlmICghZXJyb3JNZXNzYWdlLmlz
TnVsbCgpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJpbXBv
cnRSZWNvcmRzIGZhaWxlZCwgcmVhc29uOiAlIiBQVUJMSUNfTE9HX1NUUklORywgZXJyb3JNZXNz
YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29y
a2VyLCAiaW1wb3J0Um93cyBmYWlsZWQsIHJlYXNvbjogJSIgUFVCTElDX0xPR19TVFJJTkcsIGVy
cm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZG9SZWNvdmVyeUF0dGVtcHQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI1NCw3ICsyNzEsNyBAQCBTV1Njcmlw
dFN0b3JhZ2UmIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpzY3JpcHRTdG9yYWdlKCkKICAgICByZXR1
cm4gKm1fc2NyaXB0U3RvcmFnZTsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1w
b3J0UmVjb3Jkc0lmTmVjZXNzYXJ5KCkKK3ZvaWQgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9y
dFJvd3NJZk5lY2Vzc2FyeSgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAg
LTMwOCw2ICszMjUsNDIgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjplbnN1cmVWYWxp
ZFJlY29yZHNUYWJsZSgpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgc2NoZW1h
OiAiLCBjdXJyZW50U2NoZW1hKTsKIH0KIAorU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpl
bnN1cmVWYWxpZFB1c2hNZXRhZGF0YVRhYmxlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPmlz
T3BlbigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8g
RmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgcHVzaCBtZXRhZGF0YSB0YWJsZS4KKyAg
ICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUHVzaE1ldGFk
YXRhJyJfcyk7CisgICAgICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICAgICAgcmV0dXJuICJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUHVzaE1l
dGFkYXRhIHRhYmxlLiJfczsKKworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50
LT5zdGVwKCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gUHVzaE1ldGFkYXRhIHRhYmxl
IGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChzcWxpdGVSZXN1
bHQgPT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0
ZUNvbW1hbmQocHVzaE1ldGFkYXRhVGFibGVTY2hlbWEoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBjcmVhdGUgUHVzaE1ldGFkYXRhIHRhYmxlIGluIGRh
dGFiYXNlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikgLSAiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcmV0dXJu
ICJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIFB1c2hN
ZXRhZGF0YSB0YWJsZS4iX3M7CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+
Y29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0
eSgpKTsKKworICAgIGlmIChjdXJyZW50U2NoZW1hID09IHB1c2hNZXRhZGF0YVRhYmxlU2NoZW1h
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVW5leHBl
Y3RlZCBzY2hlbWE6ICIsIGN1cnJlbnRTY2hlbWEpOworfQorCiBzdGF0aWMgU3RyaW5nIHVwZGF0
ZVZpYUNhY2hlVG9TdHJpbmcoU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlIHVwZGF0ZSkKIHsK
ICAgICBzd2l0Y2ggKHVwZGF0ZSkgewpAQCAtMzU2LDcgKzQwOSw3IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFdvcmtlclR5cGU+IHN0cmluZ1RvV29ya2VyVHlwZShjb25zdCBTdHJpbmcmIHR5cGUp
CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5
LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4+JiBjaGFuZ2VkUmVnaXN0
cmF0aW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
dm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YT4+JiBjaGFuZ2VkUmVnaXN0cmF0aW9ucywgY29uc3QgSGFzaE1hcDxTZWN1cml0eU9y
aWdpbkRhdGEsIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRhRGF0YT4+JiBjaGFuZ2VkUHVzaE1l
dGFkYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4gdXBkYXRlZFJlZ2lzdHJhdGlv
bnM7CiAgICAgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+IHJlbW92ZWRSZWdp
c3RyYXRpb25zOwpAQCAtMzY2LDIyICs0MTksMzQgQEAgdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFz
ZTo6cHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2UK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMuYXBwZW5kKGtl
eVZhbHVlLmtleS5pc29sYXRlZENvcHkoKSk7CiAgICAgfQotICAgIHNjaGVkdWxlUHVzaENoYW5n
ZXMoV1RGTW92ZSh1cGRhdGVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJh
dGlvbnMpLCBTaG91bGRSZXRyeTo6WWVzLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisK
KyAgICBWZWN0b3I8UHVzaE1ldGFkYXRhRGF0YT4gdXBkYXRlZFB1c2hNZXRhZGF0YTsKKyAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiByZW1vdmVkUHVzaE1ldGFkYXRhOworICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBjaGFuZ2VkUHVzaE1ldGFkYXRhKSB7CisgICAgICAgIGlmIChrZXlW
YWx1ZS52YWx1ZSkKKyAgICAgICAgICAgIHVwZGF0ZWRQdXNoTWV0YWRhdGEuYXBwZW5kKGtleVZh
bHVlLnZhbHVlLT5pc29sYXRlZENvcHkoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
bW92ZWRQdXNoTWV0YWRhdGEuYXBwZW5kKGtleVZhbHVlLmtleS5pc29sYXRlZENvcHkoKSk7Cisg
ICAgfQorCisgICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRp
b25zKSwgV1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUodXBkYXRlZFB1c2hN
ZXRhZGF0YSksIFdURk1vdmUocmVtb3ZlZFB1c2hNZXRhZGF0YSksIFNob3VsZFJldHJ5OjpZZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6c2NoZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRh
PiYmIHVwZGF0ZWRSZWdpc3RyYXRpb25zLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4mJiByZW1vdmVkUmVnaXN0cmF0aW9ucywgU2hvdWxkUmV0cnkgc2hvdWxkUmV0cnksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OnNjaGVkdWxlUHVzaENoYW5nZXMoVmVjdG9yPFNlcnZpY2VXb3JrZXJD
b250ZXh0RGF0YT4mJiB1cGRhdGVkUmVnaXN0cmF0aW9ucywgVmVjdG9yPFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25LZXk+JiYgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMsIFZlY3RvcjxQdXNoTWV0YWRh
dGFEYXRhPiYmIHVwZGF0ZWRQdXNoTWV0YWRhdGEsIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
JiYgcmVtb3ZlZFB1c2hNZXRhZGF0YSwgU2hvdWxkUmV0cnkgc2hvdWxkUmV0cnksIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIHB1c2hD
b3VudGVyID0gc2hvdWxkUmV0cnkgPT0gU2hvdWxkUmV0cnk6OlllcyA/IG1fcHVzaENvdW50ZXIg
OiAwOwotICAgIHBvc3RUYXNrVG9Xb3JrUXVldWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9LCBwdXNoQ291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHVw
ZGF0ZWRSZWdpc3RyYXRpb25zKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHJlbW92
ZWRSZWdpc3RyYXRpb25zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZG9QdXNoQ2hhbmdl
cyh1cGRhdGVkUmVnaXN0cmF0aW9ucywgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpOworICAgIHBvc3RU
YXNrVG9Xb3JrUXVldWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwdXNo
Q291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRp
b25zKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHJlbW92ZWRSZWdpc3RyYXRpb25z
KSwgdXBkYXRlZFB1c2hNZXRhZGF0YSA9IFdURk1vdmUodXBkYXRlZFB1c2hNZXRhZGF0YSksIHJl
bW92ZWRQdXNoTWV0YWRhdGEgPSBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0YWRhdGEpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBkb1B1c2hDaGFuZ2VzKHVwZGF0ZWRSZWdpc3RyYXRpb25zLCBy
ZW1vdmVkUmVnaXN0cmF0aW9ucywgdXBkYXRlZFB1c2hNZXRhZGF0YSwgcmVtb3ZlZFB1c2hNZXRh
ZGF0YSk7CiAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICB1cGRhdGVkUmVnaXN0
cmF0aW9ucy5jbGVhcigpOwogICAgICAgICAgICAgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMuY2xlYXIo
KTsKKyAgICAgICAgICAgIHVwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAg
IHJlbW92ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
c3VjY2VzcywgcHVzaENvdW50ZXIsIHVwZGF0ZWRSZWdpc3RyYXRpb25zID0gV1RGTW92ZSh1cGRh
dGVkUmVnaXN0cmF0aW9ucykuaXNvbGF0ZWRDb3B5KCksIHJlbW92ZWRSZWdpc3RyYXRpb25zID0g
V1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucykuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpLCBzdWNjZXNzLCBwdXNoQ291bnRlciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZN
b3ZlKHVwZGF0ZWRSZWdpc3RyYXRpb25zKS5pc29sYXRlZENvcHkoKSwgcmVtb3ZlZFJlZ2lzdHJh
dGlvbnMgPSBXVEZNb3ZlKHJlbW92ZWRSZWdpc3RyYXRpb25zKS5pc29sYXRlZENvcHkoKSwgdXBk
YXRlZFB1c2hNZXRhZGF0YSA9IFdURk1vdmUodXBkYXRlZFB1c2hNZXRhZGF0YSkuaXNvbGF0ZWRD
b3B5KCksIHJlbW92ZWRQdXNoTWV0YWRhdGEgPSBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0YWRhdGEp
Lmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIChwdXNoQ291
bnRlciArIDEpID09IG1fcHVzaENvdW50ZXIpIHsKICAgICAgICAgICAgICAgICAvLyBXZSByZXRy
eSB3cml0aW5nIG9uY2UgaWYgbm8gb3RoZXIgY2hhbmdlIHdhcyBwdXNoZWQuCi0gICAgICAgICAg
ICAgICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRpb25zKSwg
V1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFNob3VsZFJldHJ5OjpObywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlUHVzaENoYW5nZXMo
V1RGTW92ZSh1cGRhdGVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJhdGlv
bnMpLCBXVEZNb3ZlKHVwZGF0ZWRQdXNoTWV0YWRhdGEpLCBXVEZNb3ZlKHJlbW92ZWRQdXNoTWV0
YWRhdGEpLCBTaG91bGRSZXRyeTo6Tm8sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29t
cGxldGlvbkhhbmRsZXIpCkBAIC00MTIsNyArNDc3LDcgQEAgdm9pZCBSZWdpc3RyYXRpb25EYXRh
YmFzZTo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGUKICAgICB9KTsKIH0KIAotYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdl
cyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYgdXBkYXRlZFJlZ2lzdHJh
dGlvbnMsIGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5PiYgcmVtb3Zl
ZFJlZ2lzdHJhdGlvbnMpCitib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2Vz
KGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JiB1cGRhdGVkUmVnaXN0cmF0
aW9ucywgY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiByZW1vdmVk
UmVnaXN0cmF0aW9ucywgY29uc3QgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiB1cGRhdGVkUHVz
aE1ldGFkYXRhLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgcmVtb3ZlZFB1c2hN
ZXRhZGF0YSkKIHsKICAgICBpZiAoIW1fZGF0YWJhc2UpIHsKICAgICAgICAgb3BlblNRTGl0ZURh
dGFiYXNlKG1fZGF0YWJhc2VGaWxlUGF0aCk7CkBAIC00MjMsNiArNDg4LDIwIEBAIGJvb2wgUmVn
aXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3Jr
ZXJDb250ZXh0RGF0YT4mCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oKm1fZGF0
YWJhc2UpOwogICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKKyAgICBpZiAoIWRvUmVnaXN0cmF0
aW9uQ2hhbmdlcyh1cGRhdGVkUmVnaXN0cmF0aW9ucywgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRvUHVzaE1ldGFkYXRhQ2hhbmdlcyh1
cGRhdGVkUHVzaE1ldGFkYXRhLCByZW1vdmVkUHVzaE1ldGFkYXRhKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICBSRUxFQVNFX0xPRyhT
ZXJ2aWNlV29ya2VyLCAiVXBkYXRlZCBTZXJ2aWNlV29ya2VyIHJlZ2lzdHJhdGlvbiBkYXRhYmFz
ZSAoJXp1IGFkZGVkL3VwZGF0ZWQgcmVnaXN0cmF0aW9ucyBhbmQgJXp1IHJlbW92ZWQgcmVnaXN0
cmF0aW9uczsgJXp1IGFkZGVkL3VwZGF0ZWQgcHVzaCBtZXRhZGF0YSBhbmQgJXp1IHJlbW92ZWQg
cHVzaCBtZXRhZGF0YSkiLCB1cGRhdGVkUmVnaXN0cmF0aW9ucy5zaXplKCksIHJlbW92ZWRSZWdp
c3RyYXRpb25zLnNpemUoKSwgdXBkYXRlZFB1c2hNZXRhZGF0YS5zaXplKCksIHJlbW92ZWRQdXNo
TWV0YWRhdGEuc2l6ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWdpc3RyYXRp
b25EYXRhYmFzZTo6ZG9SZWdpc3RyYXRpb25DaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGE+JiB1cGRhdGVkUmVnaXN0cmF0aW9ucywgY29uc3QgVmVjdG9yPFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiByZW1vdmVkUmVnaXN0cmF0aW9ucykKK3sKICAgICBh
dXRvIGluc2VydFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VS
VCBJTlRPIFJlY29yZHMgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/KSJfcyk7CiAgICAgaWYgKCFpbnNlcnRTdGF0ZW1lbnQpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byBzdG9yZSByZWdpc3RyYXRpb24gZGF0YSBpbnRvIHJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKQEAg
LTQ5NiwxNiArNTc1LDU4IEBAIGJvb2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5n
ZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mCiAgICAgICAgIH0pOwog
ICAgIH0KIAotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIFJFTEVBU0VfTE9HKFNlcnZp
Y2VXb3JrZXIsICJVcGRhdGVkIFNlcnZpY2VXb3JrZXIgcmVnaXN0cmF0aW9uIGRhdGFiYXNlICgl
enUgYWRkZWQvdXBkYXRlZCByZWdpc3RyYXRpb25zIGFuZCAlenUgcmVtb3ZlZCByZWdpc3RyYXRp
b25zIiwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMuc2l6ZSgpLCByZW1vdmVkUmVnaXN0cmF0aW9ucy5z
aXplKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJh
c2U6OmltcG9ydFJlY29yZHMoKQorYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoTWV0
YWRhdGFDaGFuZ2VzKGNvbnN0IFZlY3RvcjxQdXNoTWV0YWRhdGFEYXRhPiYgdXBkYXRlZFB1c2hN
ZXRhZGF0YSwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIHJlbW92ZWRQdXNoTWV0
YWRhdGEpCit7CisgICAgYXV0byB1cGRhdGVTUUwgPSBtX2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFB1c2hNZXRhZGF0YSBWQUxVRVMgKD8sID8pIl9z
KTsKKyAgICBpZiAoIXVwZGF0ZVNRTCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2
aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHVwZGF0ZSBwdXNoIG1l
dGFkYXRhICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBhdXRv
IGRlbGV0ZVNRTCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIFB1
c2hNZXRhZGF0YSBXSEVSRSBvcmlnaW4gPSA/Il9zKTsKKyAgICBpZiAoIWRlbGV0ZVNRTCkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGRlbGV0ZSBwdXNoIG1ldGFkYXRhICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGRhdGEgOiB1cGRhdGVkUHVzaE1l
dGFkYXRhKSB7CisgICAgICAgIGlmICh1cGRhdGVTUUwtPmJpbmRUZXh0KDEsIGRhdGEub3JpZ2lu
LnRvU3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgdXBkYXRlU1FMLT5iaW5k
SW50KDIsIGRhdGEuc2lsZW50UHVzaENvdW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IHVwZGF0ZVNRTC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiRmFpbGVkIHRvIHVwZGF0ZSBwdXNoIG1ldGFkYXRh
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHJlbW92ZWRQdXNoTWV0YWRhdGEpIHsKKyAgICAgICAg
aWYgKGRlbGV0ZVNRTC0+YmluZFRleHQoMSwgb3JpZ2luLnRvU3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICAgICAgfHwgZGVsZXRlU1FMLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcmVt
b3ZlIHB1c2ggbWV0YWRhdGEgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmltcG9ydFJvd3MoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNl
OjppbXBvcnRSZWNvcmRzOiIpOworICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93czoiKTsKKworICAgIGF1dG8gZXJyb3JNZXNzYWdl
ID0gaW1wb3J0UmVjb3JkcygpOworICAgIGlmICghZXJyb3JNZXNzYWdlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOworCisgICAgcmV0dXJuIGltcG9ydFB1c2hNZXRhZGF0
YSgpOworfQorCitTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHMoKQor
ewogICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICog
RlJPTSBSZWNvcmRzOyJfcyk7CiAgICAgaWYgKCFzcWwpCiAgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gcmV0cmlldmUgcmVnaXN0cmF0aW9u
cyBmcm9tIHJlY29yZHMgdGFibGUgKCIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCAiKSAtICIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKQEAgLTYxNiwxMiArNzM3LDUwIEBAIFN0cmlu
ZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAorU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRQdXNoTWV0YWRhdGEoKQor
eworICAgIGF1dG8gc3FsID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUICog
RlJPTSBQdXNoTWV0YWRhdGE7Il9zKTsKKyAgICBpZiAoIXNxbCkKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWNvcmRz
IGZyb20gUHVzaE1ldGFkYXRhIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgIikg
LSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisKKyAgICBpbnQgcmVzdWx0ID0gc3Fs
LT5zdGVwKCk7CisKKyAgICBmb3IgKDsgcmVzdWx0ID09IFNRTElURV9ST1c7IHJlc3VsdCA9IHNx
bC0+c3RlcCgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJSZWdpc3Ry
YXRpb25EYXRhYmFzZTo6aW1wb3J0UHVzaE1ldGFkYXRhOiBJbXBvcnRpbmcgYSBwdXNoIG1ldGFk
YXRhIHJvdyBmcm9tIHRoZSBkYXRhYmFzZSIpOworCisgICAgICAgIGF1dG8gb3JpZ2luVVJMID0g
VVJMIHsgVVJMKCksIHNxbC0+Y29sdW1uVGV4dCgwKSB9OworICAgICAgICBhdXRvIHNpbGVudFB1
c2hDb3VudCA9IHNxbC0+Y29sdW1uSW50KDEpOworICAgICAgICBpZiAob3JpZ2luVVJMLnByb3Rv
Y29sKCkuaXNFbXB0eSgpIHx8IG9yaWdpblVSTC5ob3N0KCkuaXNFbXB0eSgpIHx8IHNpbGVudFB1
c2hDb3VudCA8IDApCisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBpbXBvcnQgcHVzaCBt
ZXRhZGF0YSByb3cgd2l0aCBtYWxmb3JtZWQgZGF0YSJfczsKKworICAgICAgICBhdXRvIGRhdGEg
PSBQdXNoTWV0YWRhdGFEYXRhIHsKKyAgICAgICAgICAgIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bVVSTChvcmlnaW5VUkwpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpbGVu
dFB1c2hDb3VudCkKKyAgICAgICAgfTsKKworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgZGF0YSA9IGRhdGEuaXNvbGF0ZWRDb3B5KCldKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRQdXNoTWV0YWRhdGFUb1N0
b3JlKFdURk1vdmUoZGF0YSkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ET05FKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvIGlt
cG9ydCBhdCBsZWFzdCBvbmUgcm93IGZyb20gcHVzaCBtZXRhZGF0YSB0YWJsZSAoIiwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6YWRkUmVn
aXN0cmF0aW9uVG9TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEmJiBjb250ZXh0KQogewog
ICAgIGlmIChtX3N0b3JlKQogICAgICAgICBtX3N0b3JlLT5hZGRSZWdpc3RyYXRpb25Gcm9tRGF0
YWJhc2UoV1RGTW92ZShjb250ZXh0KSk7CiB9CiAKK3ZvaWQgUmVnaXN0cmF0aW9uRGF0YWJhc2U6
OmFkZFB1c2hNZXRhZGF0YVRvU3RvcmUoUHVzaE1ldGFkYXRhRGF0YSYmIGRhdGEpCit7CisgICAg
aWYgKG1fc3RvcmUpCisgICAgICAgIG1fc3RvcmUtPmFkZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFz
ZShXVEZNb3ZlKGRhdGEpKTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZGF0YWJh
c2VGYWlsZWRUb09wZW4oKQogewogICAgIGlmIChtX3N0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFz
ZS5oCmluZGV4IDZiMWNmMGIyYzA4NDUzYWY2MmU1OTJlNGU3MGE1N2FjNjQ4MGE1ZTQuLjJiZDFk
ZjNkMGM0NzI2MjVjY2Y2ZGJmMjQzZmE2ZDUzMTYzNDEyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFi
YXNlLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVnaXN0
cmF0aW9uU3RvcmU7CiBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKIGNsYXNzIFNXU2NyaXB0U3RvcmFn
ZTsKK3N0cnVjdCBQdXNoTWV0YWRhdGFEYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJDb250ZXh0
RGF0YTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
YXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtNTMs
NyArNTQsNyBAQCBwdWJsaWM6CiAKICAgICB+UmVnaXN0cmF0aW9uRGF0YWJhc2UoKTsKIAotICAg
IHZvaWQgcHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4+JiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHB1c2hDaGFuZ2VzKGNvbnN0IEhhc2hNYXA8
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSwgc3RkOjpvcHRpb25hbDxTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGE+PiYsIGNvbnN0IEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBzdGQ6Om9w
dGlvbmFsPFB1c2hNZXRhZGF0YURhdGE+PiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAgICAgdm9pZCBjbGVhckFsbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgY2xvc2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIApAQCAtNjMsMjEgKzY0LDI3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5SXNvbGF0ZWRDb3B5KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZURpcmVjdG9yeS5pc29sYXRlZENvcHkoKTsgfQogCiAg
ICAgZW51bSBjbGFzcyBTaG91bGRSZXRyeSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHNjaGVkdWxl
UHVzaENoYW5nZXMoVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mJiwgVmVjdG9yPFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiYsIFNob3VsZFJldHJ5LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2NoZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8U2Vy
dmljZVdvcmtlckNvbnRleHREYXRhPiYmLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4mJiwgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiYsIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+JiYsIFNob3VsZFJldHJ5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgcG9zdFRhc2tUb1dvcmtRdWV1ZShGdW5jdGlvbjx2b2lkKCk+JiYpOwogCiAgICAgLy8g
TWV0aG9kcyB0byBiZSBydW4gb24gdGhlIHdvcmsgcXVldWUuCiAgICAgYm9vbCBvcGVuU1FMaXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmdWxsRmlsZW5hbWUpOwogICAgIFN0cmluZyBlbnN1cmVW
YWxpZFJlY29yZHNUYWJsZSgpOworICAgIFN0cmluZyBlbnN1cmVWYWxpZFB1c2hNZXRhZGF0YVRh
YmxlKCk7CisgICAgU3RyaW5nIGltcG9ydFJvd3MoKTsKICAgICBTdHJpbmcgaW1wb3J0UmVjb3Jk
cygpOwotICAgIHZvaWQgaW1wb3J0UmVjb3Jkc0lmTmVjZXNzYXJ5KCk7Ci0gICAgYm9vbCBkb1B1
c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JiwgY29uc3Qg
VmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+Jik7CisgICAgU3RyaW5nIGltcG9y
dFB1c2hNZXRhZGF0YSgpOworICAgIHZvaWQgaW1wb3J0Um93c0lmTmVjZXNzYXJ5KCk7CisgICAg
Ym9vbCBkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+
JiwgY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiwgY29uc3QgVmVj
dG9yPFB1c2hNZXRhZGF0YURhdGE+JiwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4m
KTsKKyAgICBib29sIGRvUmVnaXN0cmF0aW9uQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdv
cmtlckNvbnRleHREYXRhPiYsIGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
S2V5PiYpOworICAgIGJvb2wgZG9QdXNoTWV0YWRhdGFDaGFuZ2VzKGNvbnN0IFZlY3RvcjxQdXNo
TWV0YWRhdGFEYXRhPiYsIGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAg
dm9pZCBkb0NsZWFyT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7CiAgICAgU1dTY3JpcHRT
dG9yYWdlJiBzY3JpcHRTdG9yYWdlKCk7CiAgICAgU3RyaW5nIHNjcmlwdFN0b3JhZ2VEaXJlY3Rv
cnkoKSBjb25zdDsKIAogICAgIC8vIFJlcGxpZXMgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIHZv
aWQgYWRkUmVnaXN0cmF0aW9uVG9TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEmJik7Cisg
ICAgdm9pZCBhZGRQdXNoTWV0YWRhdGFUb1N0b3JlKFB1c2hNZXRhZGF0YURhdGEmJik7CiAgICAg
dm9pZCBkYXRhYmFzZUZhaWxlZFRvT3BlbigpOwogICAgIHZvaWQgZGF0YWJhc2VPcGVuZWRBbmRS
ZWNvcmRzSW1wb3J0ZWQoKTsgCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKaW5kZXggMjE5MDU3NjE2
Mzg5NzkyZWMzYWM2MDE2NTE4MTJjMzc1NTkyMjhjZC4uYjAxN2JmMjVmMTNmMGJkODdkNDM0ZTMw
NzM2N2U4NDA3NDY0YmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5jcHAKQEAgLTU3LDE0ICs1Nywx
NiBAQCB2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjpwdXNoQ2hhbmdlc1RvRGF0YWJhc2UoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9kYXRhYmFzZS0+cHVzaENoYW5nZXMobV91cGRhdGVkUmVnaXN0cmF0aW9ucywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIG1fZGF0YWJhc2UtPnB1c2hDaGFuZ2VzKG1fdXBk
YXRlZFJlZ2lzdHJhdGlvbnMsIG1fdXBkYXRlZFB1c2hNZXRhZGF0YSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIG1fdXBkYXRlZFJlZ2lzdHJhdGlvbnMuY2xlYXIoKTsKKyAgICBt
X3VwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsKIH0KIAogdm9pZCBSZWdpc3RyYXRpb25TdG9y
ZTo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIG1fbmVlZHNQdXNoaW5nQ2hhbmdlcyA9IGZhbHNlOwogICAgIG1fdXBkYXRlZFJl
Z2lzdHJhdGlvbnMuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZWRQdXNoTWV0YWRhdGEuY2xlYXIoKTsK
ICAgICBtX2RhdGFiYXNlUHVzaFRpbWVyLnN0b3AoKTsKICAgICBtX2RhdGFiYXNlLT5jbGVhckFs
bChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CkBAIC0xMTksNiArMTIxLDI4IEBAIHZv
aWQgUmVnaXN0cmF0aW9uU3RvcmU6OnJlbW92ZVJlZ2lzdHJhdGlvbihjb25zdCBTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uS2V5JiBrCiAgICAgc2NoZWR1bGVEYXRhYmFzZVB1c2hJZk5lY2Vzc2Fy
eSgpOwogfQogCit2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjp1cGRhdGVQdXNoTWV0YWRhdGEoY29u
c3QgUHVzaE1ldGFkYXRhRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghZGF0YS5vcmlnaW4ucHJvdG9jb2wuaXNFbXB0eSgpICYmICFkYXRhLm9y
aWdpbi5ob3N0LmlzRW1wdHkoKSk7CisgICAgaWYgKGRhdGEub3JpZ2luLnByb3RvY29sLmlzRW1w
dHkoKSB8fCBkYXRhLm9yaWdpbi5ob3N0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV91cGRhdGVkUHVzaE1ldGFkYXRhLnNldChkYXRhLm9yaWdpbiwgZGF0YSk7CisgICAgc2No
ZWR1bGVEYXRhYmFzZVB1c2hJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlZ2lzdHJhdGlvblN0
b3JlOjpyZW1vdmVQdXNoTWV0YWRhdGEoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4p
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW9yaWdpbi5wcm90
b2NvbC5pc0VtcHR5KCkgJiYgIW9yaWdpbi5ob3N0LmlzRW1wdHkoKSk7CisgICAgaWYgKG9yaWdp
bi5wcm90b2NvbC5pc0VtcHR5KCkgfHwgb3JpZ2luLmhvc3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3VwZGF0ZWRQdXNoTWV0YWRhdGEuc2V0KG9yaWdpbiwgc3RkOjpudWxs
b3B0KTsKKyAgICBzY2hlZHVsZURhdGFiYXNlUHVzaElmTmVjZXNzYXJ5KCk7Cit9CisKIHZvaWQg
UmVnaXN0cmF0aW9uU3RvcmU6OmFkZFJlZ2lzdHJhdGlvbkZyb21EYXRhYmFzZShTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGEmJiBkYXRhKQogewogICAgIEFTU0VSVCghZGF0YS5yZWdpc3RyYXRpb24u
a2V5LmlzRW1wdHkoKSk7CkBAIC0xMjgsNiArMTUyLDE1IEBAIHZvaWQgUmVnaXN0cmF0aW9uU3Rv
cmU6OmFkZFJlZ2lzdHJhdGlvbkZyb21EYXRhYmFzZShTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEm
JiBkCiAgICAgbV9zZXJ2ZXIuYWRkUmVnaXN0cmF0aW9uRnJvbVN0b3JlKFdURk1vdmUoZGF0YSkp
OwogfQogCit2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjphZGRQdXNoTWV0YWRhdGFGcm9tRGF0YWJh
c2UoUHVzaE1ldGFkYXRhRGF0YSYmIGRhdGEpCit7CisgICAgQVNTRVJUKCFkYXRhLm9yaWdpbi5w
cm90b2NvbC5pc0VtcHR5KCkgJiYgIWRhdGEub3JpZ2luLmhvc3QuaXNFbXB0eSgpKTsKKyAgICBp
ZiAoZGF0YS5vcmlnaW4ucHJvdG9jb2wuaXNFbXB0eSgpIHx8IGRhdGEub3JpZ2luLmhvc3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NlcnZlci5hZGRQdXNoTWV0YWRhdGFG
cm9tU3RvcmUoV1RGTW92ZShkYXRhKSk7Cit9CisKIHZvaWQgUmVnaXN0cmF0aW9uU3RvcmU6OmRp
ZFNhdmVXb3JrZXJTY3JpcHRzVG9EaXNrKFNlcnZpY2VXb3JrZXJJZGVudGlmaWVyIHNlcnZpY2VX
b3JrZXJJZGVudGlmaWVyLCBTY3JpcHRCdWZmZXImJiBtYWluU2NyaXB0LCBIYXNoTWFwPFVSTCwg
U2NyaXB0QnVmZmVyPiYmIGltcG9ydGVkU2NyaXB0cykKIHsKICAgICBtX3NlcnZlci5kaWRTYXZl
V29ya2VyU2NyaXB0c1RvRGlzayhzZXJ2aWNlV29ya2VySWRlbnRpZmllciwgV1RGTW92ZShtYWlu
U2NyaXB0KSwgV1RGTW92ZShpbXBvcnRlZFNjcmlwdHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaAppbmRl
eCAzYjNjZDk4N2I3MWU0MjQ3MWYxZTIyNjY3NTA3MDU5NDkxZTJjYjNkLi42MTBlMDRkOWNmYzg3
MmRlZTVjMjEwOTQ0MmQzOGMzYzk1YzE4ZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCkBAIC01OSw5
ICs1OSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIFNXU2VydmVyCiAg
ICAgdm9pZCB1cGRhdGVSZWdpc3RyYXRpb24oY29uc3QgU2VydmljZVdvcmtlckNvbnRleHREYXRh
Jik7CiAgICAgdm9pZCByZW1vdmVSZWdpc3RyYXRpb24oY29uc3QgU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbktleSYpOworICAgIHZvaWQgdXBkYXRlUHVzaE1ldGFkYXRhKGNvbnN0IFB1c2hNZXRh
ZGF0YURhdGEmKTsKKyAgICB2b2lkIHJlbW92ZVB1c2hNZXRhZGF0YShjb25zdCBTZWN1cml0eU9y
aWdpbkRhdGEmKTsKIAogICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgIHZv
aWQgYWRkUmVnaXN0cmF0aW9uRnJvbURhdGFiYXNlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYm
KTsKKyAgICB2b2lkIGFkZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFzZShQdXNoTWV0YWRhdGFEYXRh
JiYpOwogICAgIHZvaWQgZGF0YWJhc2VGYWlsZWRUb09wZW4oKTsKICAgICB2b2lkIGRhdGFiYXNl
T3BlbmVkQW5kUmVjb3Jkc0ltcG9ydGVkKCk7CiAgICAgdm9pZCBkaWRTYXZlV29ya2VyU2NyaXB0
c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFpblNjcmlw
dCwgSGFzaE1hcDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpOwpAQCAtNzcs
NiArODAsNyBAQCBwcml2YXRlOgogICAgIFJlZjxSZWdpc3RyYXRpb25EYXRhYmFzZT4gbV9kYXRh
YmFzZTsKIAogICAgIEhhc2hNYXA8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSwgc3RkOjpv
cHRpb25hbDxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+PiBtX3VwZGF0ZWRSZWdpc3RyYXRpb25z
OworICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBzdGQ6Om9wdGlvbmFsPFB1c2hNZXRh
ZGF0YURhdGE+PiBtX3VwZGF0ZWRQdXNoTWV0YWRhdGE7CiAgICAgVGltZXIgbV9kYXRhYmFzZVB1
c2hUaW1lcjsKIAogICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCmluZGV4IDM5
ZmUxYjc4N2RhNzVmNDQxYmFlNWNhNDc1YTkyMWJmNTljYzM1NjYuLmQ4YTY1ZmY3OTI5OTM2MmQ3
ZDIxZmE1YjQ3NzFmZDdhZGFiNzkzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCkBAIC0xOTAsNiArMTkwLDExIEBAIHZvaWQg
U1dTZXJ2ZXI6OmFkZFJlZ2lzdHJhdGlvbkZyb21TdG9yZShTZXJ2aWNlV29ya2VyQ29udGV4dERh
dGEmJiBkYXRhKQogICAgIH0pOwogfQogCit2b2lkIFNXU2VydmVyOjphZGRQdXNoTWV0YWRhdGFG
cm9tU3RvcmUoUHVzaE1ldGFkYXRhRGF0YSAmJmRhdGEpCit7CisgICAgbV9vcmlnaW5Ub1B1c2hN
ZXRhZGF0YS5zZXQoZGF0YS5vcmlnaW4sIFdURk1vdmUoZGF0YSkpOworfQorCiB2b2lkIFNXU2Vy
dmVyOjpkaWRTYXZlV29ya2VyU2NyaXB0c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciBz
ZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFpblNjcmlwdCwgSGFzaE1h
cDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpCiB7CiAgICAgaWYgKGF1dG8g
d29ya2VyID0gd29ya2VyQnlJRChzZXJ2aWNlV29ya2VySWRlbnRpZmllcikpCkBAIC0yNjksNiAr
Mjc0LDcgQEAgdm9pZCBTV1NlcnZlcjo6Y2xlYXJBbGwoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3JlZ2lzdHJhdGlvbnMuYmVnaW4oKS0+
dmFsdWUtPmNsZWFyKCk7CiAgICAgbV9wZW5kaW5nQ29udGV4dERhdGFzLmNsZWFyKCk7CiAgICAg
bV9vcmlnaW5TdG9yZS0+Y2xlYXJBbGwoKTsKKyAgICBtX29yaWdpblRvUHVzaE1ldGFkYXRhLmNs
ZWFyKCk7CiAgICAgaWYgKG1fcmVnaXN0cmF0aW9uU3RvcmUpCiAgICAgICAgIG1fcmVnaXN0cmF0
aW9uU3RvcmUtPmNsZWFyQWxsKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KQEAgLTMw
OCw2ICszMTQsOCBAQCB2b2lkIFNXU2VydmVyOjpjbGVhcihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmIHNlY3VyaXR5T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgcmVnaXN0
cmF0aW9uc1RvUmVtb3ZlLmFwcGVuZChyZWdpc3RyYXRpb24uZ2V0KCkpOwogICAgIH0KIAorICAg
IHJlc2V0U2lsZW50UHVzaENvdW50KHNlY3VyaXR5T3JpZ2luKTsKKwogICAgIGZvciAoYXV0byYg
Y29udGV4dERhdGFzIDogbV9wZW5kaW5nQ29udGV4dERhdGFzLnZhbHVlcygpKSB7CiAgICAgICAg
IGNvbnRleHREYXRhcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgY29udGV4dERhdGEpIHsK
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0RGF0YS5yZWdpc3RyYXRpb24ua2V5LnJlbGF0ZXNU
b09yaWdpbihzZWN1cml0eU9yaWdpbik7CkBAIC01ODcsNiArNTk1LDE5IEBAIHZvaWQgU1dTZXJ2
ZXI6OmRpZEZpbmlzaEFjdGl2YXRpb24oU1dTZXJ2ZXJXb3JrZXImIHdvcmtlcikKICAgICByZWdp
c3RyYXRpb24tPmRpZEZpbmlzaEFjdGl2YXRpb24od29ya2VyLmlkZW50aWZpZXIoKSk7CiB9CiAK
K3ZvaWQgU1dTZXJ2ZXI6OmZsdXNoUGVuZGluZ1JlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBoYW5kbGVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fcmVnaXN0cmF0aW9uU3RvcmUpOworCisgICAgaWYgKCFtX3Jl
Z2lzdHJhdGlvblN0b3JlKSB7CisgICAgICAgIGhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUtPmZsdXNoQ2hhbmdlcyhXVEZNb3ZlKGhh
bmRsZXIpKTsKK30KKwogdm9pZCBTV1NlcnZlcjo6c3RvcmVSZWdpc3RyYXRpb25Gb3JXb3JrZXIo
U1dTZXJ2ZXJXb3JrZXImIHdvcmtlcikKIHsKICAgICBpZiAobV9yZWdpc3RyYXRpb25TdG9yZSkK
QEAgLTEyMjEsNiArMTI0Miw1OSBAQCB2b2lkIFNXU2VydmVyOjpzb2Z0VXBkYXRlKFNXU2VydmVy
UmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24pCiAgICAgc2NoZWR1bGVKb2IoV1RGTW92ZShqb2JE
YXRhKSk7CiB9CiAKK3ZvaWQgU1dTZXJ2ZXI6OmluY3JlbWVudFNpbGVudFB1c2hDb3VudChjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKK3sKKyAgICBBU1NFUlQobV9pbXBvcnRDb21w
bGV0ZWQpOworICAgIEFTU0VSVChtX3JlZ2lzdHJhdGlvblN0b3JlKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3JlZ2lzdHJhdGlvblN0b3JlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogbWVzc2FnZSB3ZWJwdXNoZCBpZiBuZWNlc3NhcnkgdG8g
Y2hhbmdlIHRoZSB3YWtlIHN0YXRlIG9mIHRoZSB0b3BpYy4KKworICAgIGlmIChhdXRvIGl0ID0g
bV9vcmlnaW5Ub1B1c2hNZXRhZGF0YS5maW5kKG9yaWdpbik7IGl0ICE9IG1fb3JpZ2luVG9QdXNo
TWV0YWRhdGEuZW5kKCkpIHsKKyAgICAgICAgaXQtPnZhbHVlLnNpbGVudFB1c2hDb3VudCsrOwor
ICAgICAgICBtX3JlZ2lzdHJhdGlvblN0b3JlLT51cGRhdGVQdXNoTWV0YWRhdGEoaXQtPnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFB1c2hNZXRhZGF0YURhdGEgZGF0YSB7
IG9yaWdpbiwgMSB9OworICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUtPnVwZGF0ZVB1c2hNZXRhZGF0
YShkYXRhKTsKKyAgICBtX29yaWdpblRvUHVzaE1ldGFkYXRhLnNldChvcmlnaW4sIFdURk1vdmUo
ZGF0YSkpOworfQorCit2b2lkIFNXU2VydmVyOjpyZXNldFNpbGVudFB1c2hDb3VudChjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGVk
KTsKKyAgICBBU1NFUlQobV9yZWdpc3RyYXRpb25TdG9yZSk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBtZXNzYWdlIHdlYnB1c2hkIGlmIG5lY2Vzc2FyeSB0
byByZXNldCB0aGUgd2FrZSBzdGF0ZSBvZiB0aGUgdG9waWMuCisKKyAgICBpZiAobV9vcmlnaW5U
b1B1c2hNZXRhZGF0YS5yZW1vdmUoZGF0YSkpCisgICAgICAgIG1fcmVnaXN0cmF0aW9uU3RvcmUt
PnJlbW92ZVB1c2hNZXRhZGF0YShkYXRhKTsKK30KKwordm9pZCBTV1NlcnZlcjo6Z2V0U2lsZW50
UHVzaENvdW50Rm9yVGVzdGluZyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHdoZW5JbXBv
cnRJc0NvbXBsZXRlZElmTmVlZGVkKFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9
LCBvcmlnaW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoYXV0byBpdCA9IG1fb3JpZ2luVG9QdXNoTWV0YWRhdGEuZmluZChv
cmlnaW4pOyBpdCAhPSBtX29yaWdpblRvUHVzaE1ldGFkYXRhLmVuZCgpKSB7CisgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihpdC0+dmFsdWUuc2lsZW50UHVzaENvdW50KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6
bnVsbG9wdCk7CisgICAgfSk7Cit9CisKIHZvaWQgU1dTZXJ2ZXI6OnByb2Nlc3NQdXNoTWVzc2Fn
ZShzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBkYXRhLCBVUkwmJiByZWdpc3RyYXRp
b25VUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCiB7CiAgICAg
d2hlbkltcG9ydElzQ29tcGxldGVkSWZOZWVkZWQoW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7
ICp0aGlzIH0sIGRhdGEgPSBXVEZNb3ZlKGRhdGEpLCByZWdpc3RyYXRpb25VUkwgPSBXVEZNb3Zl
KHJlZ2lzdHJhdGlvblVSTCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJs
ZSB7CkBAIC0xMjQ5LDE1ICsxMzIzLDE5IEBAIHZvaWQgU1dTZXJ2ZXI6OnByb2Nlc3NQdXNoTWVz
c2FnZShzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4mJiBkYXRhLCBVUkwmJiByCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gc2VydmljZVdvcmtlcklkZW50aWZpZXIgPSB3
b3JrZXItPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIGF1dG8gdGVybWluYXRlV29ya2VyVGlt
ZXIgPSBtYWtlVW5pcXVlPFRpbWVyPihbd29ya2VyID0gV1RGTW92ZSh3b3JrZXIpXSB7CisgICAg
ICAgICAgICBhdXRvIG9yaWdpbiA9IHdvcmtlci0+cmVnaXN0cmF0aW9uS2V5KCkudG9wT3JpZ2lu
KCk7CisgICAgICAgICAgICBhdXRvIHRlcm1pbmF0ZVdvcmtlclRpbWVyID0gbWFrZVVuaXF1ZTxU
aW1lcj4oW3dvcmtlciA9IFdURk1vdmUod29ya2VyKSwgd2Vha1RoaXNdIHsKICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNlV29ya2VyLCAiVGVybWluYXRpbmcgc2Vydmlj
ZSB3b3JrZXIgYXMgcHJvY2Vzc2luZyBwdXNoIGV2ZW50IHRvb2sgdG9vIG11Y2ggdGltZSIpOwor
ICAgICAgICAgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPmluY3JlbWVudFNpbGVudFB1c2hDb3VudCh3b3JrZXItPnJlZ2lzdHJhdGlvbktleSgpLnRv
cE9yaWdpbigpKTsKICAgICAgICAgICAgICAgICB3b3JrZXItPnRlcm1pbmF0ZSgpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB0ZXJtaW5hdGVXb3JrZXJUaW1lci0+c3RhcnRPbmVTaG90
KHdlYWtUaGlzICYmIHdlYWtUaGlzLT5tX2lzUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
ID8gZGVmYXVsdFRlcm1pbmF0aW9uRGVsYXkgOiAyX3MpOwotICAgICAgICAgICAgY29ubmVjdGlv
bk9yU3RhdHVzLnZhbHVlKCktPmZpcmVQdXNoRXZlbnQoc2VydmljZVdvcmtlcklkZW50aWZpZXIs
IGRhdGEsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB0ZXJtaW5hdGVXb3JrZXJUaW1l
ciA9IFdURk1vdmUodGVybWluYXRlV29ya2VyVGltZXIpXShib29sIHN1Y2NlZWRlZCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBjb25uZWN0aW9uT3JTdGF0dXMudmFsdWUoKS0+ZmlyZVB1c2hFdmVu
dChzZXJ2aWNlV29ya2VySWRlbnRpZmllciwgZGF0YSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHRlcm1pbmF0ZVdvcmtlclRpbWVyID0gV1RGTW92ZSh0ZXJtaW5hdGVXb3JrZXJUaW1l
ciksIG9yaWdpbiA9IFdURk1vdmUob3JpZ2luKSwgd2Vha1RoaXNdKGJvb2wgc3VjY2VlZGVkKSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAodGVybWluYXRlV29ya2VyVGltZXItPmlzQWN0
aXZlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVdvcmtlclRpbWVyLT5zdG9wKCk7
Ci0KKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2NlZWRlZCAmJiB3ZWFrVGhpcykKKyAgICAgICAg
ICAgICAgICAgICAgd2Vha1RoaXMtPmluY3JlbWVudFNpbGVudFB1c2hDb3VudChvcmlnaW4pOwog
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN1Y2NlZWRlZCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2Vy
dmVyL1NXU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NX
U2VydmVyLmgKaW5kZXggMzIzNzU0NTNiNGZkMGNjZjNmMWFkYWIyNzMzOWMwZGVmN2E1NzVmNi4u
NjBlOTk4NTdlMTlmOGY1YWQ2ZWYyYTk0ZGYxYzIwM2FhY2U4NjJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckNsaWVu
dERhdGEuaCIKKyNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaCIKICNpbmNsdWRl
ICJTZXJ2aWNlV29ya2VySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJKb2Iu
aCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGF0YS5oIgpAQCAtNjIsOCAr
NjMsOCBAQCBlbnVtIGNsYXNzIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25TdGF0ZSA6IHVpbnQ4
X3Q7CiBlbnVtIGNsYXNzIFNlcnZpY2VXb3JrZXJTdGF0ZSA6IHVpbnQ4X3Q7CiBzdHJ1Y3QgRXhj
ZXB0aW9uRGF0YTsKIHN0cnVjdCBNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0czsKK3N0cnVjdCBQdXNo
TWV0YWRhdGFEYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJDbGllbnRRdWVyeU9wdGlvbnM7Ci1z
dHJ1Y3QgU2VydmljZVdvcmtlckNvbnRleHREYXRhOwogc3RydWN0IFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EYXRhOwogc3RydWN0IFdvcmtlckZldGNoUmVzdWx0OwogCkBAIC0xOTEsMTEgKzE5
MiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNvbHZlUmVnaXN0cmF0aW9uUmVhZHlSZXF1ZXN0
cyhTV1NlcnZlclJlZ2lzdHJhdGlvbiYpOwogCiAgICAgdm9pZCBhZGRSZWdpc3RyYXRpb25Gcm9t
U3RvcmUoU2VydmljZVdvcmtlckNvbnRleHREYXRhJiYpOworICAgIHZvaWQgYWRkUHVzaE1ldGFk
YXRhRnJvbVN0b3JlKFB1c2hNZXRhZGF0YURhdGEmJik7CiAgICAgdm9pZCBkaWRTYXZlV29ya2Vy
U2NyaXB0c1RvRGlzayhTZXJ2aWNlV29ya2VySWRlbnRpZmllciwgU2NyaXB0QnVmZmVyJiYgbWFp
blNjcmlwdCwgSGFzaE1hcDxVUkwsIFNjcmlwdEJ1ZmZlcj4mJiBpbXBvcnRlZFNjcmlwdHMpOwog
ICAgIHZvaWQgcmVnaXN0cmF0aW9uU3RvcmVJbXBvcnRDb21wbGV0ZSgpOwogICAgIHZvaWQgcmVn
aXN0cmF0aW9uU3RvcmVEYXRhYmFzZUZhaWxlZFRvT3BlbigpOwogICAgIHZvaWQgc3RvcmVSZWdp
c3RyYXRpb25Gb3JXb3JrZXIoU1dTZXJ2ZXJXb3JrZXImKTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmx1c2hQZW5kaW5nUmVnaXN0cmF0aW9uc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0T3JpZ2luc1dpdGhS
ZWdpc3RyYXRpb25zKEZ1bmN0aW9uPHZvaWQoY29uc3QgSGFzaFNldDxTZWN1cml0eU9yaWdpbkRh
dGE+Jik+JiYpOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1
cm4gbV9zZXNzaW9uSUQ7IH0KQEAgLTIyMiw2ICsyMjYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
aG91bGRSdW5TZXJ2aWNlV29ya2Vyc09uTWFpblRocmVhZEZvclRlc3RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZzsgfQog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzUHVzaE1lc3NhZ2Uoc3RkOjpvcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+JiYsIFVSTCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0U2lsZW50UHVzaENvdW50KGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0U2lsZW50
UHVzaENvdW50Rm9yVGVzdGluZyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KT4mJik7CiAKICAgICBlbnVtIGNs
YXNzIFNob3VsZFNraXBFdmVudCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgdm9pZCBmaXJlRnVu
Y3Rpb25hbEV2ZW50KFNXU2VydmVyUmVnaXN0cmF0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChFeHBlY3RlZDxTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24qLCBTaG91bGRTa2lwRXZlbnQ+
KT4mJik7CkBAIC0yNTYsNiArMjYyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUFwcElu
aXRpYXRlZFZhbHVlRm9yV29ya2Vycyhjb25zdCBDbGllbnRPcmlnaW4mLCBMYXN0TmF2aWdhdGlv
bldhc0FwcEluaXRpYXRlZCk7CiAgICAgdm9pZCB3aGVuSW1wb3J0SXNDb21wbGV0ZWRJZk5lZWRl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgdm9pZCBpbmNyZW1lbnRTaWxl
bnRQdXNoQ291bnQoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJik7CisKICAgICBIYXNoTWFwPFNX
U2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0aW9uPj4g
bV9jb25uZWN0aW9uczsKICAgICBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXks
IFdlYWtQdHI8U1dTZXJ2ZXJSZWdpc3RyYXRpb24+PiBtX3Njb3BlVG9SZWdpc3RyYXRpb25NYXA7
CiAgICAgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllciwgc3RkOjp1
bmlxdWVfcHRyPFNXU2VydmVyUmVnaXN0cmF0aW9uPj4gbV9yZWdpc3RyYXRpb25zOwpAQCAtMjk3
LDYgKzMwNSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1NlcnZpY2VXb3JrZXJFbnRpdGxl
bWVudCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1JlY2VpdmVkQXBwQm91bmREb21haW5zIHsg
ZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX3VuaXF1ZVJlZ2lzdHJhdGlvbkNvdW50IHsgMCB9Owor
CisgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIFB1c2hNZXRhZGF0YURhdGE+IG1fb3Jp
Z2luVG9QdXNoTWV0YWRhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDE3NWJk
MzgxNjQ3NDkxNmNjMDExNWM5ZDhmZjJjNTg2YmQwZTMxZTguLjRlMmFmOGVlNzkxN2IyNzRiNGVl
MDc3Mzc3ZjgyY2IwYmI1MzA0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMjY2LDYgKzIyNjYsMTggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vi
UHVzaE1lc3NhZ2UKICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Np
b25JRCkpCiAgICAgICAgIHNlc3Npb24tPmVuc3VyZVNXU2VydmVyKCkucHJvY2Vzc1B1c2hNZXNz
YWdlKFdURk1vdmUocHVzaE1lc3NhZ2UucHVzaERhdGEpLCBXVEZNb3ZlKHB1c2hNZXNzYWdlLnJl
Z2lzdHJhdGlvblVSTCksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoYXV0
byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24t
PmVuc3VyZVNXU2VydmVyKCkuZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhvcmlnaW4sIFdU
Rk1vdmUoY2FsbGJhY2spKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6Zmx1c2hQZW5kaW5n
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lv
bi0+ZW5zdXJlU1dTZXJ2ZXIoKS5mbHVzaFBlbmRpbmdSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhX
VEZNb3ZlKGNhbGxiYWNrKSk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBv
cmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXgg
MGY4NTMzZWQxM2RkMjYyNzdhNmRkNTJhYjZkYWJlMjBjM2UwODgwNS4uMmJkMGNlOWRlYmZjNGYw
ZTBjNzQwYjcyMzBmNmIwY2EyNDE5YjZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMzc1LDYgKzM3NSw4IEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgdm9pZCBnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJQdXNo
TWVzc2FnZT4mKT4mJik7CiAgICAgdm9pZCBwcm9jZXNzUHVzaE1lc3NhZ2UoUEFMOjpTZXNzaW9u
SUQsIFdlYlB1c2hNZXNzYWdlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwor
ICAgIHZvaWQgZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiwgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pPiYmKTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ1NlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBkZWxldGVQdXNoQW5kTm90
aWZpY2F0aW9uUmVnaXN0cmF0aW9uKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluCmluZGV4IDYzMWUyYjYwNzNjMDE5MjEzMDY4YzIwOTZiODI3YjI3OWRi
YzdkZTAuLjA4ZmU1YTYyMDc5YjFlM2ZlZGNmMGEyZjBmNjYwNmJhNGZiZDViOTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMjA5LDYgKzIwOSw4IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExl
Z2FjeVJlY2VpdmVyIHsKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgR2V0UGVuZGlu
Z1B1c2hNZXNzYWdlcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChWZWN0b3I8V2ViS2l0
OjpXZWJQdXNoTWVzc2FnZT4gbWVzc2FnZXMpIEFzeW5jCiAgICAgUHJvY2Vzc1B1c2hNZXNzYWdl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2Ug
cHVzaE1lc3NhZ2UpIC0+IChib29sIGRpZFN1Y2NlZWQpIEFzeW5jCisgICAgR2V0U2lsZW50UHVz
aENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEgb3JpZ2luKSAtPiAoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
Y291bnQpIEFzeW5jCisgICAgRmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnNG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkgQXN5bmMKICNlbmRpZgog
ICAgIERlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG9yaWdpbikgLT4g
KFN0cmluZyBlcnJvck1lc3NhZ2UpIEFzeW5jCiAgICAgR2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9y
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2lucykgQXN5bmMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvU2VydmljZVdvcmtlci9XZWJTV1NlcnZlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2Vy
L1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKaW5kZXggYjM5MGNhZmE2MDQxZjNlODAxZmQyZDNh
OGMyNDNiNTU0NzUxMjI5NC4uMmVhMWJjZDg4YzY1NzBkYThiZTcwMDYxN2JkOWRiZjE2ODk5ZDcz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2Vy
L1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9TZXJ2aWNlV29ya2VyL1dlYlNXU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTE5NCw2ICsx
OTQsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtlckZldGNoVGFzaz4gV2ViU1dTZXJ2
ZXJDb25uZWN0aW9uOjpjcmVhdGVGZXRjaFRhc2soTgogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKKyAgICBpZiAod29ya2VyICYmIHJlcXVlc3QuaXNUb3BTaXRlKCkgJiYgcmVnaXN0
cmF0aW9uKQorICAgICAgICBzZXJ2ZXIoKS5yZXNldFNpbGVudFB1c2hDb3VudChyZWdpc3RyYXRp
b24tPmtleSgpLnRvcE9yaWdpbigpKTsKKwogICAgIGlmICh3b3JrZXItPnNob3VsZFNraXBGZXRj
aEV2ZW50KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi0+c2hvdWxkU29mdFVwZGF0ZShs
b2FkZXIucGFyYW1ldGVycygpLm9wdGlvbnMpKQogICAgICAgICAgICAgcmVnaXN0cmF0aW9uLT5z
Y2hlZHVsZVNvZnRVcGRhdGUobG9hZGVyLmlzQXBwSW5pdGlhdGVkKCkgPyBXZWJDb3JlOjpJc0Fw
cEluaXRpYXRlZDo6WWVzIDogV2ViQ29yZTo6SXNBcHBJbml0aWF0ZWQ6Ok5vKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tCmluZGV4IGY5MTM0ODNkZWRhMDQxMjc2MzhhZmJhZGYxZGQ3MmViODRiMzgyMTguLjdhMzc4
ZDc0ZTA1N2ZkOTQ5MTI5NjQzZDU5YjY0ZDJiNTlhNzgxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAt
NzY5LDYgKzc2OSwxNyBAQCAtKGJvb2wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZp
dHlGb3JUZXN0aW5nCiAgICAgcmV0dXJuIF93ZWJzaXRlRGF0YVN0b3JlLT5oYXNTZXJ2aWNlV29y
a2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZygpOwogfQogCistKHZvaWQpX2ZsdXNoUGVu
ZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZzoodm9pZCheKSh2b2lkKSlj
b21wbGV0aW9uSGFuZGxlcgoreworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBhdXRv
IGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7
CisgICAgX3dlYnNpdGVEYXRhU3RvcmUtPm5ldHdvcmtQcm9jZXNzKCkKKyAgICAgICAgLmZsdXNo
UGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9yVGVzdGluZyhfd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIFtjb21wbGV0aW9uSGFuZGxlckNvcHldKCkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KCk7CisgICAgICAgIH0pOworI2VuZGlmCit9CisKIC0o
dm9pZClfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczoodm9pZCheKShOU0FycmF5PE5TRGljdGlvbmFy
eSAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgogewogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
QEAgLTc5Nyw2ICs4MDgsMTggQEAgLSh2b2lkKV9wcm9jZXNzUHVzaE1lc3NhZ2U6KE5TRGljdGlv
bmFyeSAqKXB1c2hNZXNzYWdlRGljdGlvbmFyeSBjb21wbGV0aW9uSGFuZGwKICNlbmRpZgogfQog
CistKHZvaWQpX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6KE5TVVJMICopdXJsIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TSW50ZWdlcikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNvcHkg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworICAgIF93ZWJzaXRlRGF0YVN0b3Jl
LT5uZXR3b3JrUHJvY2VzcygpCisgICAgICAgIC5nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5n
KF93ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKSwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tVVJMKHVybCksIFtjb21wbGV0aW9uSGFuZGxlckNvcHldKHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGNvdW50KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoY291
bnQgPyBzdGF0aWNfY2FzdDxOU0ludGVnZXI+KCpjb3VudCkgOiBOU05vdEZvdW5kKTsKKyAgICAg
ICAgfSk7CisKKyNlbmRpZgorfQorCiAtKHZvaWQpX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25S
ZWdpc3RyYXRpb246KFdLU2VjdXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlckNvcHkgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggMzFhODU0MDc0MTRkNGE3M2U5OGJjNDEx
ZTYxN2ZmOGM0OGNkMTg2OS4uNGVlNmViZmY4M2EwMzRjOTA0MTY2NGNhNjhmMTM2ODdhNjExMzhm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC0xMDksOCArMTA5LDEwIEBAIHR5cGVk
ZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25z
KSB7CiAtICh2b2lkKV9jb3VudE5vbkRlZmF1bHRTZXNzaW9uU2V0czoodm9pZCheKShzaXplX3Qp
KWNvbXBsZXRpb25IYW5kbGVyOwogCiAtKGJvb2wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5k
QWN0aXZpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlv
cyhXS19JT1NfVEJBKSk7CistKHZvaWQpX2ZsdXNoUGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25zRm9yVGVzdGluZzoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIC0odm9p
ZClfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczoodm9pZCheKShOU0FycmF5PE5TRGljdGlvbmFyeSAq
PiAqKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogLSh2b2lkKV9wcm9jZXNzUHVzaE1lc3NhZ2U6KE5TRGljdGlv
bmFyeSAqKXB1c2hNZXNzYWdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKGJvb2wpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CistKHZvaWQpX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6KE5TVVJMICop
dXJsIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TSW50ZWdlcikpY29tcGxldGlvbkhhbmRs
ZXI7CiAtKHZvaWQpX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb246KFdLU2Vj
dXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShO
U0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtKHZvaWQpX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5v
dGlmaWNhdGlvblBlcm1pc3Npb25zOih2b2lkKF4pKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4g
KikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGFlNzc4MThkZjJlMTNh
YTg4ZTNkOGY4YzEyOTg0MTJkY2Y3YzMxNDIuLmMzMDgxOTNhNjQ3YTA5NzNiZjEyYTQ4OGY2YjJm
OWViNDgyMjlmOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTcxNCw2ICsxNzE0LDE2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgV2ViCiB7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1B1c2hNZXNzYWdlIHsgc2Vzc2lvbklELCBwdXNoTWVzc2Fn
ZSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCAgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik+JiYgY2FsbGJhY2spCit7CisgICAgc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0U2lsZW50UHVzaENv
dW50Rm9yVGVzdGluZyB7IHNlc3Npb25JRCwgb3JpZ2luIH0sIFdURk1vdmUoY2FsbGJhY2spKTsK
K30KKwordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpmbHVzaFBlbmRpbmdTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Rmx1c2hQZW5kaW5nU2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbnNGb3JUZXN0aW5nIHsgc2Vzc2lvbklEIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKK30K
ICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBj
NDMxOTg0OTM4OWQxMjI5MTVlMDc3ZjgzMGQzNWM5MDZlZjRkYjQxLi43NzI1NGYyZWZhZTdkNzVl
Yjk2YTcwNWI3NGE3MzAwZjMzOTFjNGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMjc5LDYgKzI3OSw4IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgdm9pZCBnZXRQZW5kaW5n
UHVzaE1lc3NhZ2VzKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFZlY3RvcjxXZWJQdXNoTWVzc2FnZT4mKT4mJik7CiAgICAgdm9pZCBwcm9jZXNzUHVzaE1lc3Nh
Z2UoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYlB1c2hNZXNzYWdlJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIHdhc1Byb2Nlc3NlZCk+JiYpOworICAgIHZvaWQgZ2V0U2lsZW50UHVzaENv
dW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiwgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4p
PiYmKTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ1NlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zRm9y
VGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNl
bmRpZgogCiAgICAgdm9pZCBkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZjk3NDk2MTRhOTE2ZWY1ODBlZDcyNzAz
NWM2M2NlMzcyNDM3YzgwLi5hM2EzNDRkY2NiOTgxZGZmYzdmODg3NmZhNmIwNTA2MjBhMDFkOGU0
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMjItMDItMTIgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgVHJhY2sgc2lsZW50IHB1c2ggY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEZXNjcmlwdGlvbiB0byBjb21lLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QdXNoQVBJLm1tOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tOgorCiAy
MDIyLTAyLTA5ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2Vi
QXV0aG5dIFNwZWNpZnkgTG9jYWxBdXRoZW50aWNhdG9yQWNjZXNzR3JvdXAgd2hlbiBpbXBvcnRp
bmcgY3JlZGVudGlhbHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHVzaEFQSS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHVzaEFQSS5tbQppbmRleCBiNjcyOTY3OGFmOTk4NTdkMmFmZjkwYzNjYWU0M2U2ZmIyNDdj
YWI0Li4xNGU1ZmQ2ZGRlMmM3MjUwZTQwNmY2NmVmNzBlN2RlM2Y4ODY1MWRiIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1B1c2hBUEkubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QdXNoQVBJLm1tCkBAIC04OSw2
ICs4OSwxMSBAQCBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZlbnQpID0+IHsK
ICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwogfSk7CiBzZWxmLmFkZEV2ZW50TGlzdGVu
ZXIoInB1c2giLCAoZXZlbnQpID0+IHsKKyAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRh
LnRleHQoKSA9PSAncmVqZWN0JykgeworICAgICAgICBldmVudC53YWl0VW50aWwoUHJvbWlzZS5y
ZWplY3QoJ2luc3RhLXJlamVjdCcpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHRy
eSB7CiAgICAgICAgIGlmICghZXZlbnQuZGF0YSkgewogICAgICAgICAgICAgcG9ydC5wb3N0TWVz
c2FnZSgiUmVjZWl2ZWQ6IG51bGwgZGF0YSIpOwpAQCAtMTI3LDE0ICsxMzIsMjggQEAgc3RhdGlj
IGJvb2wgd2FpdFVudGlsRXZhbHVhdGVzVG9UcnVlKGNvbnN0IEZ1bmN0aW9uPGJvb2woKT4mIGYp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgTlNJbnRlZ2VyIGdldFNpbGVudFB1c2hD
b3VudChXS1dlYnNpdGVEYXRhU3RvcmUqIHN0b3JlLCBOU1VSTCAqdXJsKQoreworICAgIF9fYmxv
Y2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgX19ibG9jayBOU0ludGVnZXIgY291bnQgPSBOU05v
dEZvdW5kOworICAgIFtzdG9yZSBfZ2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZzp1cmwgY29t
cGxldGlvbkhhbmRsZXI6XihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGNvdW50ID0gcmVz
dWx0OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworICAgIHJldHVybiBjb3VudDsKK30KKwogVEVTVChQdXNoQVBJLCBm
aXJlUHVzaEV2ZW50KQogewogICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2VydmVyKHsK
ICAgICAgICAgeyAiLyIsIHsgbWFpbkJ5dGVzIH0gfSwKICAgICAgICAgeyAiL3N3LmpzIiwgeyB7
eyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH19LCBzY3JpcHRCeXRl
cyB9IH0KICAgICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cCk7
CisgICAgTlNVUkwgKnVybCA9IFtzZXJ2ZXIucmVxdWVzdCgpIFVSTF07CiAKICAgICBbV0tXZWJz
aXRlRGF0YVN0b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOworICAg
IFtXS1dlYnNpdGVEYXRhU3RvcmUgX3NldE5ldHdvcmtQcm9jZXNzU3VzcGVuc2lvbkFsbG93ZWRG
b3JUZXN0aW5nOllFU107CiAKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogCkBAIC0xNjMsNiArMTgyLDcgQEAg
VEVTVChQdXNoQVBJLCBmaXJlUHVzaEV2ZW50KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZwdXNoTWVzc2FnZVByb2Nlc3NlZCk7CiAgICAgRVhQRUNUX1RSVUUocHVzaE1lc3NhZ2VT
dWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtjb25maWd1cmF0
aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCBOU05vdEZvdW5kKTsKIAogICAgIGRvbmUgPSBm
YWxzZTsKICAgICBwdXNoTWVzc2FnZVByb2Nlc3NlZCA9IGZhbHNlOwpAQCAtMTc3LDYgKzE5Nywz
OSBAQCBURVNUKFB1c2hBUEksIGZpcmVQdXNoRXZlbnQpCiAKICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsKICAgICBFWFBFQ1RfRkFMU0UocHVzaE1l
c3NhZ2VTdWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtjb25m
aWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwpLCAxKTsKKworICAgIC8vIFRyeSBzZW5k
aW5nIGFub3RoZXIgc2lsZW50IHB1c2ggYWZ0ZXIgdGhlIG5ldHdvcmsgcHJvY2VzcyBmbHVzaGVz
IHN0YXRlIGFuZCBkaWVzIHRvIG1ha2Ugc3VyZSB0aGUgY291bnQgaXMgcGVyc2lzdGVkLgorICAg
IF9fYmxvY2sgYm9vbCBkaWRTdXNwZW5kID0gZmFsc2U7CisgICAgW1tjb25maWd1cmF0aW9uIHdl
YnNpdGVEYXRhU3RvcmVdIF9zZW5kTmV0d29ya1Byb2Nlc3NQcmVwYXJlVG9TdXNwZW5kOl4oKSB7
CisgICAgICAgIGRpZFN1c3BlbmQgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZGlkU3VzcGVuZCk7CisgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRh
U3RvcmVdIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisKKyAgICBwdXNoTWVzc2FnZVByb2Nl
c3NlZCA9IGZhbHNlOworICAgIHB1c2hNZXNzYWdlU3VjY2Vzc2Z1bCA9IGZhbHNlOworICAgIG1l
c3NhZ2UgPSBAInJlamVjdCI7CisgICAgW1tjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVd
IF9wcm9jZXNzUHVzaE1lc3NhZ2U6bWVzc2FnZURpY3Rpb25hcnkoW21lc3NhZ2UgZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddLCBbc2VydmVyLnJlcXVlc3QoKSBVUkxdKSBj
b21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CisgICAgICAgIHB1c2hNZXNzYWdlU3Vj
Y2Vzc2Z1bCA9IHJlc3VsdDsKKyAgICAgICAgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcHVzaE1lc3NhZ2VQcm9jZXNz
ZWQpOworICAgIEVYUEVDVF9GQUxTRShwdXNoTWVzc2FnZVN1Y2Nlc3NmdWwpOworICAgIEVYUEVD
VF9FUShnZXRTaWxlbnRQdXNoQ291bnQoW2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0s
IHVybCksIDIpOworCisgICAgLy8gVmlzaXRpbmcgdGhlIHBhZ2UgYWdhaW4gc2hvdWxkIGNsZWFy
IHRoZSBzaWxlbnQgcHVzaCBjb3VudC4KKyAgICBkb25lID0gZmFsc2U7CisgICAgZXhwZWN0ZWRN
ZXNzYWdlID0gIlJlYWR5IjsKKyAgICBhdXRvIHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldzIgbG9hZFJlcXVlc3Q6
c2VydmVyLnJlcXVlc3QoKV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworICAgIEVYUEVDVF9FUShnZXRTaWxlbnRQdXNoQ291bnQoW2NvbmZpZ3VyYXRpb24gd2Vic2l0
ZURhdGFTdG9yZV0sIHVybCksIE5TTm90Rm91bmQpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIGNsZWFyZWQgc2lsZW50IHB1c2ggY291bnQgd2FzIHBlcnNpc3RlZC4KKyAgICBbW2NvbmZp
Z3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0gX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKyAg
ICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRh
U3RvcmVdLCB1cmwpLCBOU05vdEZvdW5kKTsKIAogICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShb
Y29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CmluZGV4IDUzZGNiMzk1ZTE1ZmIxMTRiYzFlMzZlM2UwY2QzMzMyYWJmYmQzNmMuLmQ2NWRmNjg4
NDc1N2MxZDM1NjljYTI4MzI0Yzg1OTQyMmI5ZmUwODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2VydmljZVdvcmtlckJhc2ljLm1t
CkBAIC01OCw3ICs1OCw3IEBACiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotc3RhdGljIE5TU3RyaW5nICpzZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRmlsZW5hbWUgPSBAIlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLTgu
c3FsaXRlMyI7CitzdGF0aWMgTlNTdHJpbmcgKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25GaWxl
bmFtZSA9IEAiU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMtOS5zcWxpdGUzIjsKIHN0YXRpYyBi
b29sIHNlcnZpY2VXb3JrZXJHbG9iYWxPYmplY3RJc0F2YWlsYWJsZTsKIAogc3RhdGljIFN0cmlu
ZyBleHBlY3RlZE1lc3NhZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451857</attachid>
            <date>2022-02-13 20:58:03 -0800</date>
            <delta_ts>2022-03-01 02:23:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236543-20220213205802.patch</filename>
            <type>text/plain</type>
            <size>53822</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyMjFhMWE5MTc1OTA5
YmVhMzFlMTM0YzZlY2UwMzQzOWQ4MmMzZC4uZGU5ZDYyNzcyZmU1MjhlOGQ1ZmIzYWU0YjM1NWEy
YjBkMDliNDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDIyLTAyLTEyICBCZW4g
TmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIFRyYWNrIHNpbGVudCBwdXNoIGNvdW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBh
ZGRzIGNvZGUgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzaWxlbnQgcHVzaCBldmVudHMgcHJvY2Vz
c2VkIGJ5IGEgc2VydmljZQorICAgICAgICB3b3JrZXIuIEV2ZXJ5IHRpbWUgYSBwdXNoIGV2ZW50
IGlzIHByb2Nlc3NlZCBidXQgZG9lcyBub3Qgc3VjY2VlZCBpbiBzaG93aW5nIGEgbm90aWZpY2F0
aW9uLAorICAgICAgICBhIHNpbGVudCBwdXNoIGNvdW50ZXIgZm9yIHRoYXQgb3JpZ2luIGlzIGlu
Y3JlbWVudGVkLiAgV2UgcmVzZXQgdGhlIHNpbGVudCBwdXNoIGNvdW50IHdoZW4KKyAgICAgICAg
dGhlIHVzZXIgdmlzaXRzIGEgdG9wLWxldmVsIG1haW4gcmVzb3VyY2UgY29udHJvbGxlZCBieSB0
aGUgc2VydmljZSB3b3JrZXIuCisKKyAgICAgICAgSSBzdG9yZWQgdGhlIGNvdW50IGluIGEgc2Vw
YXJhdGUgUHVzaE1ldGFkYXRhIHRhYmxlIGluIFJlZ2lzdHJhdGlvbkRhdGFiYXNlLiAgUmlnaHQg
bm93IHRoaXMKKyAgICAgICAgb25seSBrZWVwcyB0cmFjayBvZiB0aGUgc2lsZW50IHB1c2ggY291
bnQsIGJ1dCBpbiB0aGUgZnV0dXJlIGl0IG1pZ2h0IHRyYWNrIG90aGVyIHN0YXRlLAorICAgICAg
ICBlLmcuIHBlbmRpbmcgYHB1c2hzdWJzY3JpcHRpb25jaGFuZ2VgIGV2ZW50cy4KKworICAgICAg
ICBUaGlzIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IHRoZSBwb2xpY3kgZm9yIGhv
dyB0byB1c2UgdGhlIHNpbGVudCBwdXNoIGNvdW50LiBUaGUKKyAgICAgICAgaW50ZW50aW9uIGlz
IHRoYXQgd2hlbiB0aGlzIGNvdW50ZXIgY3Jvc3NlcyBhIHRocmVzaG9sZCwgd2Ugd2lsbCB0YWtl
IHNvbWUgYWN0aW9uLAorICAgICAgICBlLmcuIG1ha2luZyBwdXNoIHN1YnNjcmlwdGlvbnMgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgb2lyZ2luIG5vbi13YWtpbmcgb3IgcmVtb3ZpbmcgdGhlIHB1c2gK
KyAgICAgICAgc3Vic2NyaXB0aW9uLiBXZSdsbCBkbyB0aGF0IGluIGEgc2VwYXJhdGUgcGF0Y2gg
ZG93biB0aGUgcm9hZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZG9lc24ndCBjb21wbGV0
ZWx5IGltcGxlbWVudCB0aGUgbG9naWMgdG8gbWFrZSBgcHJvY2Vzc1B1c2hNZXNzYWdlYCBmYWls
CisgICAgICAgIHdoZW4gYSBub3RpZmljYXRpb24gaXNuJ3Qgc2hvd24sIGFzIHRoYXQgaXMgZGVw
ZW5kZW50IG9uIGltcGxlbWVudGluZyBzaG93Tm90aWZpY2F0aW9uIGluCisgICAgICAgIHNlcnZp
Y2Ugd29ya2VycyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzIy
KS4KKworICAgICAgICBUZXN0ZWQgYnkgbW9kaWZ5aW5nIEFQSSB0ZXN0cyB0byBjaGVjayB0aGF0
IHRoZSBzaWxlbnQgcHVzaCBjb3VudCBpcyB1cGRhdGVkIGFuZCBwZXJzaXN0ZWQKKyAgICAgICAg
Y29ycmVjdGx5LgorCisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250
ZXh0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQdXNoTWV0YWRhdGFEYXRhOjppc29sYXRl
ZENvcHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6aXNvbGF0
ZWRDb3B5KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHRE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpQdXNoTWV0YWRhdGFEYXRhOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UHVzaE1ldGFkYXRhRGF0YTo6ZGVjb2RlKToKKyAgICAgICAg
KiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnB1c2hNZXRhZGF0YVRhYmxlU2NoZW1hKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpSZWdpc3RyYXRpb25EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWdpc3RyYXRpb25EYXRhYmFzZTo6b3BlblNRTGl0ZURhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSb3dzSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUHVz
aE1ldGFkYXRhVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2U6
OnB1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpz
Y2hlZHVsZVB1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjpkb1B1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjpkb1JlZ2lzdHJhdGlvbkNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0
aW9uRGF0YWJhc2U6OmRvUHVzaE1ldGFkYXRhQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWdp
c3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UHVzaE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjphZGRQdXNoTWV0YWRhdGFUb1N0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzSWZOZWNlc3Nhcnkp
OiBEZWxldGVkLgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9u
RGF0YWJhc2UuaDoKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlv
blN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3JlOjpwdXNoQ2hh
bmdlc1RvRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uU3RvcmU6OmNs
ZWFyQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdHJhdGlvblN0b3JlOjp1cGRhdGVQdXNo
TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0cmF0aW9uU3RvcmU6OnJlbW92ZVB1
c2hNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RyYXRpb25TdG9yZTo6YWRkUHVz
aE1ldGFkYXRhRnJvbURhdGFiYXNlKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvblN0b3JlLmg6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6YWRkUHVzaE1ldGFkYXRh
RnJvbVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpjbGVhckFsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTV1NlcnZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2
ZXI6OmZsdXNoUGVuZGluZ1JlZ2lzdHJhdGlvbnNGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNXU2VydmVyOjppbmNyZW1lbnRTaWxlbnRQdXNoQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1dTZXJ2ZXI6OnJlc2V0U2lsZW50UHVzaENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNX
U2VydmVyOjpnZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNXU2VydmVyOjpwcm9jZXNzUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdvcmtlcnMvc2Vydmlj
ZS9zZXJ2ZXIvU1dTZXJ2ZXIuaDoKKwogMjAyMi0wMi0wOSAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxdIGltcHJvdmUgc2l6aW5nIG9uIG1hY09T
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IGIyMWQwMWY5NGNhOTc4MDlhOGEwZTM2MmY4MmZhODVlOGU0NWEzOWYuLjc4
NzJjZWVkNTJhYTNmNDMxMjdmNjA1NWU0MGM4MTk5ZGI4NzcxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMjItMDItMTIgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgVHJhY2sgc2lsZW50IHB1c2ggY291bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAgLSBSZXNldCBzaWxlbnQgcHVzaCBjb3VudCB3aGVuIHRoZSB1
c2VyIHZpc2l0cyBhIHRvcC1sZXZlbCBtYWluIHJlc291cmNlIGNvbnRyb2xsZWQgYnkgYSBzZXJ2
aWNlIHdvcmtlci4KKyAgICAgICAgIC0gQWRkZWQgYSBtZXRob2QgdG8gcmV0dXJuIHRoZSBjdXJy
ZW50IHNpbGVudCBwdXNoIGNvdW50IGZvciBhbiBvcmlnaW4gZm9yIHRlc3RpbmcgcHVycG9zZXMu
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpnZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU1dTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGVGZXRjaFRhc2spOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAg
ICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OmdldFNpbGVudFB1c2hDb3VudEZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKwogMjAyMi0wMi0wOSAgQW50b2luZSBRdWludCAg
PGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxdIGltcHJvdmUgc2l6aW5nIG9u
IG1hY09TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2Vydmlj
ZVdvcmtlckNvbnRleHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9T
ZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuY3BwCmluZGV4IDFhNDExMTM2NDAwMGYzYWNhZjM3MGYw
YzllMzExNDIyN2E4OWMwOWUuLjA4MWJmNWEyMzcwMjhmYmI4YjlmODY2NjhjZDM1ZmFiMjM3MDVj
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29y
a2VyQ29udGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9T
ZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuY3BwCkBAIC03Myw2ICs3MywyMiBAQCBTZXJ2aWNlV29y
a2VyQ29udGV4dERhdGEgU2VydmljZVdvcmtlckNvbnRleHREYXRhOjppc29sYXRlZENvcHkoKSAm
JgogICAgIH07CiB9CiAKK1B1c2hNZXRhZGF0YURhdGEgUHVzaE1ldGFkYXRhRGF0YTo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QgJgoreworICAgIHJldHVybiB7CisgICAgICAgIG9yaWdpbi5pc29sYXRl
ZENvcHkoKSwKKyAgICAgICAgc2lsZW50UHVzaENvdW50CisgICAgfTsKK30KKworUHVzaE1ldGFk
YXRhRGF0YSBQdXNoTWV0YWRhdGFEYXRhOjppc29sYXRlZENvcHkoKSAmJgoreworICAgIHJldHVy
biB7CisgICAgICAgIFdURk1vdmUob3JpZ2luKS5pc29sYXRlZENvcHkoKSwKKyAgICAgICAgc2ls
ZW50UHVzaENvdW50CisgICAgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oCmluZGV4IDQ2YTlm
YTcwMTI5ZTM3NWM1OTY4MWJiYTZlMzBlYTk4YWJjYjFkODcuLmEwMDY5OWMyODFkZGFhZDdjMDcz
MDk3NzU3OTk1MjQ4NzQzZTJkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGV4dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRleHREYXRhLmgKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJOYXZpZ2F0aW9uUHJlbG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkRhdGEuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2Vy
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJKb2JEYXRhSWRlbnRpZmllci5o
IgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EYXRhLmgiCkBAIC0yMDEsNiAr
MjAyLDQyIEBAIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiBTZXJ2aWNl
V29ya2VyQ29udGV4dERhdGE6OmRlY29kZShEZWNvZGVyCiAgICAgfX07CiB9CiAKK3N0cnVjdCBQ
dXNoTWV0YWRhdGFEYXRhIHsKKyAgICBTZWN1cml0eU9yaWdpbkRhdGEgb3JpZ2luOworICAgIHVu
c2lnbmVkIHNpbGVudFB1c2hDb3VudDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxQdXNoTWV0YWRhdGFEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwor
CisgICAgUHVzaE1ldGFkYXRhRGF0YSBpc29sYXRlZENvcHkoKSBjb25zdCAmOworICAgIFB1c2hN
ZXRhZGF0YURhdGEgaXNvbGF0ZWRDb3B5KCkgJiY7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBQdXNoTWV0YWRhdGFEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG9yaWdpbiA8PCBzaWxlbnRQdXNoQ291bnQ7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFB1c2hNZXRhZGF0YURhdGE+IFB1
c2hNZXRhZGF0YURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW47CisgICAgZGVjb2RlciA+PiBvcmlnaW47
CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzaWxlbnRQdXNoQ291bnQ7CisgICAgZGVjb2RlciA+PiBz
aWxlbnRQdXNoQ291bnQ7CisgICAgaWYgKCFzaWxlbnRQdXNoQ291bnQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7CisgICAgICAgIFdURk1vdmUoKm9yaWdp
biksCisgICAgICAgIFdURk1vdmUoKnNpbGVudFB1c2hDb3VudCkKKyAgICB9IH07Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0
cmF0aW9uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZl
ci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKaW5kZXggYjRlMWE0NTg0OGVlYzM3OTEzMmMwMzk5
NjhjNTUxZmNiOWMyYWQ3YS4uZTYwZTMyYWUzNjQxMGYwZWZkYTJiYmRlZmQwZDNlNTk4OGJjZjg2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgdWludDY0X3Qgc2NoZW1hVmVyc2lvbiA9
IDg7CitzdGF0aWMgY29uc3QgdWludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDk7CiAKICNkZWZpbmUg
UkVDT1JEU19UQUJMRV9TQ0hFTUFfUFJFRklYICJDUkVBVEUgVEFCTEUgIgogI2RlZmluZSBSRUNP
UkRTX1RBQkxFX1NDSEVNQV9TVUZGSVggIigiIFwKQEAgLTcwLDYgKzcwLDExIEBAIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBzY2hlbWFWZXJzaW9uID0gODsKICAgICAiLCBwcmVsb2FkU3RhdGUgQkxP
QiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIiBcCiAgICAgIikiX3M7CiAKKyNkZWZpbmUgUFVT
SF9NRVRBREFUQV9UQUJMRV9TQ0hFTUEgIkNSRUFURSBUQUJMRSBQdXNoTWV0YWRhdGEgKCIgXAor
ICAgICJvcmlnaW4gVEVYVCBQUklNQVJZIEtFWSIgXAorICAgICIsIHNpbGVudFB1c2hDb3VudCBJ
TlQgTk9UIE5VTEwiIFwKKyAgICAiKSJfczsKKwogc3RhdGljIEFTQ0lJTGl0ZXJhbCByZWNvcmRz
VGFibGVTY2hlbWEoKQogewogICAgIHJldHVybiBSRUNPUkRTX1RBQkxFX1NDSEVNQV9QUkVGSVgg
IlJlY29yZHMiIFJFQ09SRFNfVEFCTEVfU0NIRU1BX1NVRkZJWDsKQEAgLTgwLDYgKzg1LDExIEBA
IHN0YXRpYyBBU0NJSUxpdGVyYWwgcmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAgICBy
ZXR1cm4gUkVDT1JEU19UQUJMRV9TQ0hFTUFfUFJFRklYICJcIlJlY29yZHNcIiIgUkVDT1JEU19U
QUJMRV9TQ0hFTUFfU1VGRklYOwogfQogCitzdGF0aWMgQVNDSUlMaXRlcmFsIHB1c2hNZXRhZGF0
YVRhYmxlU2NoZW1hKCkKK3sKKyAgICByZXR1cm4gUFVTSF9NRVRBREFUQV9UQUJMRV9TQ0hFTUE7
Cit9CisKIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWVGcm9tVmVyc2lvbih1
aW50NjRfdCB2ZXJzaW9uKQogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9ucy0iLCB2ZXJzaW9uLCAiLnNxbGl0ZTMiKTsKQEAgLTE3Miw3ICsxODIsNyBA
QCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6UmVnaXN0cmF0aW9uRGF0YWJhc2UoUmVnaXN0cmF0aW9u
U3RvcmUmIHN0b3JlLCBTdHJpbmcmJiBkYQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
ICAgICBwb3N0VGFza1RvV29ya1F1ZXVlKFt0aGlzXSB7Ci0gICAgICAgIGltcG9ydFJlY29yZHNJ
Zk5lY2Vzc2FyeSgpOworICAgICAgICBpbXBvcnRSb3dzSWZOZWNlc3NhcnkoKTsKICAgICB9KTsK
IH0KIApAQCAtMjMxLDEwICsyNDEsMTcgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6b3Bl
blNRTGl0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgZnVsbEZpbGVuYW1lKQogICAgICAgICBkb1Jl
Y292ZXJ5QXR0ZW1wdCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCisgICAgZXJy
b3JNZXNzYWdlID0gZW5zdXJlVmFsaWRQdXNoTWV0YWRhdGFUYWJsZSgpOworICAgIGlmICghZXJy
b3JNZXNzYWdlLmlzTnVsbCgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VX
b3JrZXIsICJlbnN1cmVWYWxpZFB1c2hNZXRhZGF0YVRhYmxlIGZhaWxlZCwgcmVhc29uOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBk
b1JlY292ZXJ5QXR0ZW1wdCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAot
ICAgIGVycm9yTWVzc2FnZSA9IGltcG9ydFJlY29yZHMoKTsKKyAgICBlcnJvck1lc3NhZ2UgPSBp
bXBvcnRSb3dzKCk7CiAgICAgaWYgKCFlcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoU2VydmljZVdvcmtlciwgImltcG9ydFJlY29yZHMgZmFpbGVkLCBy
ZWFzb246ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBlcnJvck1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJpbXBvcnRSb3dzIGZh
aWxlZCwgcmVhc29uOiAlIiBQVUJMSUNfTE9HX1NUUklORywgZXJyb3JNZXNzYWdlLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICBkb1JlY292ZXJ5QXR0ZW1wdCgpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtMjU0LDcgKzI3MSw3IEBAIFNXU2NyaXB0U3RvcmFnZSYgUmVnaXN0cmF0
aW9uRGF0YWJhc2U6OnNjcmlwdFN0b3JhZ2UoKQogICAgIHJldHVybiAqbV9zY3JpcHRTdG9yYWdl
OwogfQogCi12b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBvcnRSZWNvcmRzSWZOZWNlc3Nh
cnkoKQordm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0Um93c0lmTmVjZXNzYXJ5KCkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMzA4LDYgKzMyNSw0MiBAQCBT
dHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCkKICAg
ICByZXR1cm4gbWFrZVN0cmluZygiVW5leHBlY3RlZCBzY2hlbWE6ICIsIGN1cnJlbnRTY2hlbWEp
OwogfQogCitTdHJpbmcgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmVuc3VyZVZhbGlkUHVzaE1ldGFk
YXRhVGFibGUoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X2RhdGFiYXNlKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+aXNPcGVuKCkpOworCisgICAgU3Ry
aW5nIGN1cnJlbnRTY2hlbWE7CisgICAgeworICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZv
ciBhbiBleGlzdGluZyBwdXNoIG1ldGFkYXRhIHRhYmxlLgorICAgICAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBz
cWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdQdXNoTWV0YWRhdGEnIl9zKTsKKyAgICAgICAg
aWYgKCFzdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBwcmVwYXJlIHN0
YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBQdXNoTWV0YWRhdGEgdGFibGUuIl9zOwor
CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsKKworICAgICAg
ICAvLyBJZiB0aGVyZSBpcyBubyBQdXNoTWV0YWRhdGEgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQg
YW5kIHRoZW4gYmFpbC4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkg
eworICAgICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZChwdXNoTWV0YWRh
dGFUYWJsZVNjaGVtYSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiQ291
bGQgbm90IGNyZWF0ZSBQdXNoTWV0YWRhdGEgdGFibGUgaW4gZGF0YWJhc2UgKCIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCAiKSAtICIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ICE9IFNRTElURV9ST1cpCisgICAgICAgICAgICByZXR1cm4gIkVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgUHVzaE1ldGFkYXRhIHRhYmxlLiJfczsK
KworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpOworICAg
IH0KKworICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOworCisgICAgaWYgKGN1
cnJlbnRTY2hlbWEgPT0gcHVzaE1ldGFkYXRhVGFibGVTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHNjaGVtYTogIiwgY3Vy
cmVudFNjaGVtYSk7Cit9CisKIHN0YXRpYyBTdHJpbmcgdXBkYXRlVmlhQ2FjaGVUb1N0cmluZyhT
ZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUgdXBkYXRlKQogewogICAgIHN3aXRjaCAodXBkYXRl
KSB7CkBAIC0zNTYsNyArNDA5LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V29ya2VyVHlwZT4g
c3RyaW5nVG9Xb3JrZXJUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogfQogCi12b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpwdXNoQ2hhbmdlcyhjb25z
dCBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXksIHN0ZDo6b3B0aW9uYWw8U2Vy
dmljZVdvcmtlckNvbnRleHREYXRhPj4mIGNoYW5nZWRSZWdpc3RyYXRpb25zLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlZ2lzdHJhdGlvbkRh
dGFiYXNlOjpwdXNoQ2hhbmdlcyhjb25zdCBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25LZXksIHN0ZDo6b3B0aW9uYWw8U2VydmljZVdvcmtlckNvbnRleHREYXRhPj4mIGNoYW5nZWRS
ZWdpc3RyYXRpb25zLCBjb25zdCBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RkOjpvcHRp
b25hbDxQdXNoTWV0YWRhdGFEYXRhPj4mIGNoYW5nZWRQdXNoTWV0YWRhdGEsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBWZWN0b3I8U2Vydmlj
ZVdvcmtlckNvbnRleHREYXRhPiB1cGRhdGVkUmVnaXN0cmF0aW9uczsKICAgICBWZWN0b3I8U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4gcmVtb3ZlZFJlZ2lzdHJhdGlvbnM7CkBAIC0zNjYs
MjIgKzQxOSwzNCBAQCB2b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpwdXNoQ2hhbmdlcyhjb25z
dCBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZQogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZW1vdmVkUmVnaXN0cmF0aW9ucy5hcHBlbmQoa2V5VmFsdWUua2V5Lmlzb2xhdGVk
Q29weSgpKTsKICAgICB9Ci0gICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRS
ZWdpc3RyYXRpb25zKSwgV1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFNob3VsZFJldHJ5
OjpZZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKworICAgIFZlY3RvcjxQdXNoTWV0
YWRhdGFEYXRhPiB1cGRhdGVkUHVzaE1ldGFkYXRhOworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+IHJlbW92ZWRQdXNoTWV0YWRhdGE7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGNo
YW5nZWRQdXNoTWV0YWRhdGEpIHsKKyAgICAgICAgaWYgKGtleVZhbHVlLnZhbHVlKQorICAgICAg
ICAgICAgdXBkYXRlZFB1c2hNZXRhZGF0YS5hcHBlbmQoa2V5VmFsdWUudmFsdWUtPmlzb2xhdGVk
Q29weSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVtb3ZlZFB1c2hNZXRhZGF0YS5h
cHBlbmQoa2V5VmFsdWUua2V5Lmlzb2xhdGVkQ29weSgpKTsKKyAgICB9CisKKyAgICBzY2hlZHVs
ZVB1c2hDaGFuZ2VzKFdURk1vdmUodXBkYXRlZFJlZ2lzdHJhdGlvbnMpLCBXVEZNb3ZlKHJlbW92
ZWRSZWdpc3RyYXRpb25zKSwgV1RGTW92ZSh1cGRhdGVkUHVzaE1ldGFkYXRhKSwgV1RGTW92ZShy
ZW1vdmVkUHVzaE1ldGFkYXRhKSwgU2hvdWxkUmV0cnk6OlllcywgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCi12b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpzY2hlZHVsZVB1c2hD
aGFuZ2VzKFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+JiYgdXBkYXRlZFJlZ2lzdHJh
dGlvbnMsIFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5PiYmIHJlbW92ZWRSZWdp
c3RyYXRpb25zLCBTaG91bGRSZXRyeSBzaG91bGRSZXRyeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6c2No
ZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYmIHVwZGF0
ZWRSZWdpc3RyYXRpb25zLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4mJiBy
ZW1vdmVkUmVnaXN0cmF0aW9ucywgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiYgdXBkYXRlZFB1
c2hNZXRhZGF0YSwgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mJiByZW1vdmVkUHVzaE1ldGFk
YXRhLCBTaG91bGRSZXRyeSBzaG91bGRSZXRyeSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8gcHVzaENvdW50ZXIgPSBzaG91bGRSZXRy
eSA9PSBTaG91bGRSZXRyeTo6WWVzID8gbV9wdXNoQ291bnRlciA6IDA7Ci0gICAgcG9zdFRhc2tU
b1dvcmtRdWV1ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHB1c2hDb3Vu
dGVyLCB1cGRhdGVkUmVnaXN0cmF0aW9ucyA9IFdURk1vdmUodXBkYXRlZFJlZ2lzdHJhdGlvbnMp
LCByZW1vdmVkUmVnaXN0cmF0aW9ucyA9IFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJhdGlvbnMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBib29sIHN1Y2Nlc3MgPSBkb1B1c2hDaGFuZ2VzKHVwZGF0ZWRSZWdpc3RyYXRp
b25zLCByZW1vdmVkUmVnaXN0cmF0aW9ucyk7CisgICAgcG9zdFRhc2tUb1dvcmtRdWV1ZShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHB1c2hDb3VudGVyLCB1cGRhdGVkUmVn
aXN0cmF0aW9ucyA9IFdURk1vdmUodXBkYXRlZFJlZ2lzdHJhdGlvbnMpLCByZW1vdmVkUmVnaXN0
cmF0aW9ucyA9IFdURk1vdmUocmVtb3ZlZFJlZ2lzdHJhdGlvbnMpLCB1cGRhdGVkUHVzaE1ldGFk
YXRhID0gV1RGTW92ZSh1cGRhdGVkUHVzaE1ldGFkYXRhKSwgcmVtb3ZlZFB1c2hNZXRhZGF0YSA9
IFdURk1vdmUocmVtb3ZlZFB1c2hNZXRhZGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGRvUHVzaENoYW5nZXModXBkYXRlZFJlZ2lzdHJhdGlvbnMsIHJlbW92ZWRSZWdpc3RyYXRpb25z
LCB1cGRhdGVkUHVzaE1ldGFkYXRhLCByZW1vdmVkUHVzaE1ldGFkYXRhKTsKICAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHVwZGF0ZWRSZWdpc3RyYXRpb25zLmNsZWFyKCk7CiAg
ICAgICAgICAgICByZW1vdmVkUmVnaXN0cmF0aW9ucy5jbGVhcigpOworICAgICAgICAgICAgdXBk
YXRlZFB1c2hNZXRhZGF0YS5jbGVhcigpOworICAgICAgICAgICAgcmVtb3ZlZFB1c2hNZXRhZGF0
YS5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBzdWNjZXNzLCBwdXNoQ291bnRl
ciwgdXBkYXRlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHVwZGF0ZWRSZWdpc3RyYXRpb25zKS5p
c29sYXRlZENvcHkoKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMgPSBXVEZNb3ZlKHJlbW92ZWRSZWdp
c3RyYXRpb25zKS5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHN1Y2Nlc3MsIHB1
c2hDb3VudGVyLCB1cGRhdGVkUmVnaXN0cmF0aW9ucyA9IFdURk1vdmUodXBkYXRlZFJlZ2lzdHJh
dGlvbnMpLmlzb2xhdGVkQ29weSgpLCByZW1vdmVkUmVnaXN0cmF0aW9ucyA9IFdURk1vdmUocmVt
b3ZlZFJlZ2lzdHJhdGlvbnMpLmlzb2xhdGVkQ29weSgpLCB1cGRhdGVkUHVzaE1ldGFkYXRhID0g
V1RGTW92ZSh1cGRhdGVkUHVzaE1ldGFkYXRhKS5pc29sYXRlZENvcHkoKSwgcmVtb3ZlZFB1c2hN
ZXRhZGF0YSA9IFdURk1vdmUocmVtb3ZlZFB1c2hNZXRhZGF0YSkuaXNvbGF0ZWRDb3B5KCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgKHB1c2hDb3VudGVyICsgMSkgPT0gbV9wdXNo
Q291bnRlcikgewogICAgICAgICAgICAgICAgIC8vIFdlIHJldHJ5IHdyaXRpbmcgb25jZSBpZiBu
byBvdGhlciBjaGFuZ2Ugd2FzIHB1c2hlZC4KLSAgICAgICAgICAgICAgICBzY2hlZHVsZVB1c2hD
aGFuZ2VzKFdURk1vdmUodXBkYXRlZFJlZ2lzdHJhdGlvbnMpLCBXVEZNb3ZlKHJlbW92ZWRSZWdp
c3RyYXRpb25zKSwgU2hvdWxkUmV0cnk6Ok5vLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgICAgICAgICAgICAgc2NoZWR1bGVQdXNoQ2hhbmdlcyhXVEZNb3ZlKHVwZGF0ZWRSZWdp
c3RyYXRpb25zKSwgV1RGTW92ZShyZW1vdmVkUmVnaXN0cmF0aW9ucyksIFdURk1vdmUodXBkYXRl
ZFB1c2hNZXRhZGF0YSksIFdURk1vdmUocmVtb3ZlZFB1c2hNZXRhZGF0YSksIFNob3VsZFJldHJ5
OjpObywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTQxMiw3ICs0NzcsNyBAQCB2b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpjbGVhckFsbChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZQogICAgIH0pOwogfQogCi1i
b29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hDaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2
aWNlV29ya2VyQ29udGV4dERhdGE+JiB1cGRhdGVkUmVnaXN0cmF0aW9ucywgY29uc3QgVmVjdG9y
PFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+JiByZW1vdmVkUmVnaXN0cmF0aW9ucykKK2Jv
b2wgUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmRvUHVzaENoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZp
Y2VXb3JrZXJDb250ZXh0RGF0YT4mIHVwZGF0ZWRSZWdpc3RyYXRpb25zLCBjb25zdCBWZWN0b3I8
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4mIHJlbW92ZWRSZWdpc3RyYXRpb25zLCBjb25z
dCBWZWN0b3I8UHVzaE1ldGFkYXRhRGF0YT4mIHVwZGF0ZWRQdXNoTWV0YWRhdGEsIGNvbnN0IFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiByZW1vdmVkUHVzaE1ldGFkYXRhKQogewogICAgIGlm
ICghbV9kYXRhYmFzZSkgewogICAgICAgICBvcGVuU1FMaXRlRGF0YWJhc2UobV9kYXRhYmFzZUZp
bGVQYXRoKTsKQEAgLTQyMyw2ICs0ODgsMjAgQEAgYm9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6
ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYKICAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9kYXRhYmFzZSk7CiAgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKIAorICAgIGlmICghZG9SZWdpc3RyYXRpb25DaGFuZ2VzKHVwZGF0ZWRS
ZWdpc3RyYXRpb25zLCByZW1vdmVkUmVnaXN0cmF0aW9ucykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZG9QdXNoTWV0YWRhdGFDaGFuZ2VzKHVwZGF0ZWRQdXNoTWV0YWRhdGEs
IHJlbW92ZWRQdXNoTWV0YWRhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0cmFu
c2FjdGlvbi5jb21taXQoKTsKKworICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJVcGRh
dGVkIFNlcnZpY2VXb3JrZXIgcmVnaXN0cmF0aW9uIGRhdGFiYXNlICglenUgYWRkZWQvdXBkYXRl
ZCByZWdpc3RyYXRpb25zIGFuZCAlenUgcmVtb3ZlZCByZWdpc3RyYXRpb25zOyAlenUgYWRkZWQv
dXBkYXRlZCBwdXNoIG1ldGFkYXRhIGFuZCAlenUgcmVtb3ZlZCBwdXNoIG1ldGFkYXRhKSIsIHVw
ZGF0ZWRSZWdpc3RyYXRpb25zLnNpemUoKSwgcmVtb3ZlZFJlZ2lzdHJhdGlvbnMuc2l6ZSgpLCB1
cGRhdGVkUHVzaE1ldGFkYXRhLnNpemUoKSwgcmVtb3ZlZFB1c2hNZXRhZGF0YS5zaXplKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1JlZ2lz
dHJhdGlvbkNoYW5nZXMoY29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mIHVw
ZGF0ZWRSZWdpc3RyYXRpb25zLCBjb25zdCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bktleT4mIHJlbW92ZWRSZWdpc3RyYXRpb25zKQorewogICAgIGF1dG8gaW5zZXJ0U3RhdGVtZW50
ID0gbV9kYXRhYmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxV
RVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zKTsKICAgICBp
ZiAoIWluc2VydFN0YXRlbWVudCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihTZXJ2aWNl
V29ya2VyLCAiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHN0b3JlIHJlZ2lzdHJhdGlv
biBkYXRhIGludG8gcmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwpAQCAtNDk2LDE2ICs1NzUsNTggQEAg
Ym9vbCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6ZG9QdXNoQ2hhbmdlcyhjb25zdCBWZWN0b3I8U2Vy
dmljZVdvcmtlckNvbnRleHREYXRhPiYKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgdHJhbnNh
Y3Rpb24uY29tbWl0KCk7Ci0gICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlVwZGF0ZWQg
U2VydmljZVdvcmtlciByZWdpc3RyYXRpb24gZGF0YWJhc2UgKCV6dSBhZGRlZC91cGRhdGVkIHJl
Z2lzdHJhdGlvbnMgYW5kICV6dSByZW1vdmVkIHJlZ2lzdHJhdGlvbnMiLCB1cGRhdGVkUmVnaXN0
cmF0aW9ucy5zaXplKCksIHJlbW92ZWRSZWdpc3RyYXRpb25zLnNpemUoKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVN0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3Jkcygp
Citib29sIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkb1B1c2hNZXRhZGF0YUNoYW5nZXMoY29uc3Qg
VmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiB1cGRhdGVkUHVzaE1ldGFkYXRhLCBjb25zdCBWZWN0
b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgcmVtb3ZlZFB1c2hNZXRhZGF0YSkKK3sKKyAgICBhdXRv
IHVwZGF0ZVNRTCA9IG1fZGF0YWJhc2UtPnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBSRVBM
QUNFIElOVE8gUHVzaE1ldGFkYXRhIFZBTFVFUyAoPywgPykiX3MpOworICAgIGlmICghdXBkYXRl
U1FMKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gdXBkYXRlIHB1c2ggbWV0YWRhdGEgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGF1dG8gZGVsZXRlU1FMID0gbV9kYXRh
YmFzZS0+cHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gUHVzaE1ldGFkYXRhIFdIRVJFIG9y
aWdpbiA9ID8iX3MpOworICAgIGlmICghZGVsZXRlU1FMKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKFNlcnZpY2VXb3JrZXIsICJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZGVs
ZXRlIHB1c2ggbWV0YWRhdGEgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGZvciAoYXV0byYgZGF0YSA6IHVwZGF0ZWRQdXNoTWV0YWRhdGEpIHsKKyAgICAgICAg
aWYgKHVwZGF0ZVNRTC0+YmluZFRleHQoMSwgZGF0YS5vcmlnaW4udG9TdHJpbmcoKSkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICB8fCB1cGRhdGVTUUwtPmJpbmRJbnQoMiwgZGF0YS5zaWxlbnRQ
dXNoQ291bnQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgdXBkYXRlU1FMLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKFNlcnZpY2VX
b3JrZXIsICJGYWlsZWQgdG8gdXBkYXRlIHB1c2ggbWV0YWRhdGEgKCVpKSAtICVzIiwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgb3Jp
Z2luIDogcmVtb3ZlZFB1c2hNZXRhZGF0YSkgeworICAgICAgICBpZiAoZGVsZXRlU1FMLT5iaW5k
VGV4dCgxLCBvcmlnaW4udG9TdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBk
ZWxldGVTUUwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoU2VydmljZVdvcmtlciwgIkZhaWxlZCB0byByZW1vdmUgcHVzaCBtZXRhZGF0YSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBSZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0
Um93cygpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSRUxFQVNFX0xP
RyhTZXJ2aWNlV29ya2VyLCAiUmVnaXN0cmF0aW9uRGF0YWJhc2U6OmltcG9ydFJlY29yZHM6Iik7
CisgICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpp
bXBvcnRSb3dzOiIpOworCisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBpbXBvcnRSZWNvcmRzKCk7
CisgICAgaWYgKCFlcnJvck1lc3NhZ2UuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBlcnJvck1l
c3NhZ2U7CisKKyAgICByZXR1cm4gaW1wb3J0UHVzaE1ldGFkYXRhKCk7Cit9CisKK1N0cmluZyBS
ZWdpc3RyYXRpb25EYXRhYmFzZTo6aW1wb3J0UmVjb3JkcygpCit7CiAgICAgYXV0byBzcWwgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFJlY29yZHM7Il9zKTsK
ICAgICBpZiAoIXNxbCkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byByZXRyaWV2ZSByZWdpc3RyYXRpb25zIGZyb20gcmVjb3JkcyB0YWJs
ZSAoIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksICIpIC0gIiwgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwpAQCAtNjE2LDEyICs3MzcsNTAgQEAgU3RyaW5nIFJlZ2lzdHJhdGlvbkRhdGFi
YXNlOjppbXBvcnRSZWNvcmRzKCkKICAgICByZXR1cm4geyB9OwogfQogCitTdHJpbmcgUmVnaXN0
cmF0aW9uRGF0YWJhc2U6OmltcG9ydFB1c2hNZXRhZGF0YSgpCit7CisgICAgYXV0byBzcWwgPSBt
X2RhdGFiYXNlLT5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9NIFB1c2hNZXRhZGF0YTsi
X3MpOworICAgIGlmICghc3FsKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRv
IHByZXBhcmUgc3RhdGVtZW50IHRvIHJldHJpZXZlIHJlY29yZHMgZnJvbSBQdXNoTWV0YWRhdGEg
dGFibGUgKCIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCAiKSAtICIsIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKworICAgIGludCByZXN1bHQgPSBzcWwtPnN0ZXAoKTsKKworICAgIGZv
ciAoOyByZXN1bHQgPT0gU1FMSVRFX1JPVzsgcmVzdWx0ID0gc3FsLT5zdGVwKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0coU2VydmljZVdvcmtlciwgIlJlZ2lzdHJhdGlvbkRhdGFiYXNlOjppbXBv
cnRQdXNoTWV0YWRhdGE6IEltcG9ydGluZyBhIHB1c2ggbWV0YWRhdGEgcm93IGZyb20gdGhlIGRh
dGFiYXNlIik7CisKKyAgICAgICAgYXV0byBvcmlnaW5VUkwgPSBVUkwgeyBVUkwoKSwgc3FsLT5j
b2x1bW5UZXh0KDApIH07CisgICAgICAgIGF1dG8gc2lsZW50UHVzaENvdW50ID0gc3FsLT5jb2x1
bW5JbnQoMSk7CisgICAgICAgIGlmIChvcmlnaW5VUkwucHJvdG9jb2woKS5pc0VtcHR5KCkgfHwg
b3JpZ2luVVJMLmhvc3QoKS5pc0VtcHR5KCkgfHwgc2lsZW50UHVzaENvdW50IDwgMCkKKyAgICAg
ICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGltcG9ydCBwdXNoIG1ldGFkYXRhIHJvdyB3aXRoIG1h
bGZvcm1lZCBkYXRhIl9zOworCisgICAgICAgIGF1dG8gZGF0YSA9IFB1c2hNZXRhZGF0YURhdGEg
eworICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKG9yaWdpblVSTCksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2lsZW50UHVzaENvdW50KQorICAgICAg
ICB9OworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAq
dGhpcyB9LCBkYXRhID0gZGF0YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmFkZFB1c2hNZXRhZGF0YVRvU3RvcmUoV1RGTW92ZShkYXRhKSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX0RPTkUpCisg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gaW1wb3J0IGF0IGxlYXN0IG9uZSBy
b3cgZnJvbSBwdXNoIG1ldGFkYXRhIHRhYmxlICgiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
IikgLSAiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisKKyAgICByZXR1cm4geyB9Owor
fQorCiB2b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjphZGRSZWdpc3RyYXRpb25Ub1N0b3JlKFNl
cnZpY2VXb3JrZXJDb250ZXh0RGF0YSYmIGNvbnRleHQpCiB7CiAgICAgaWYgKG1fc3RvcmUpCiAg
ICAgICAgIG1fc3RvcmUtPmFkZFJlZ2lzdHJhdGlvbkZyb21EYXRhYmFzZShXVEZNb3ZlKGNvbnRl
eHQpKTsKIH0KIAordm9pZCBSZWdpc3RyYXRpb25EYXRhYmFzZTo6YWRkUHVzaE1ldGFkYXRhVG9T
dG9yZShQdXNoTWV0YWRhdGFEYXRhJiYgZGF0YSkKK3sKKyAgICBpZiAobV9zdG9yZSkKKyAgICAg
ICAgbV9zdG9yZS0+YWRkUHVzaE1ldGFkYXRhRnJvbURhdGFiYXNlKFdURk1vdmUoZGF0YSkpOwor
fQorCiB2b2lkIFJlZ2lzdHJhdGlvbkRhdGFiYXNlOjpkYXRhYmFzZUZhaWxlZFRvT3BlbigpCiB7
CiAgICAgaWYgKG1fc3RvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJhdGlvbkRhdGFiYXNlLmgKaW5kZXggNmIxY2YwYjJj
MDg0NTNhZjYyZTU5MmU0ZTcwYTU3YWM2NDgwYTVlNC4uMmJkMWRmM2QwYzQ3MjYyNWNjZjZkYmYy
NDNmYTZkNTMxNjM0MTJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25EYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvUmVnaXN0cmF0aW9uRGF0YWJhc2UuaApAQCAtMzksNiArMzks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZWdpc3RyYXRpb25TdG9yZTsKIGNsYXNz
IFNRTGl0ZURhdGFiYXNlOwogY2xhc3MgU1dTY3JpcHRTdG9yYWdlOworc3RydWN0IFB1c2hNZXRh
ZGF0YURhdGE7CiBzdHJ1Y3QgU2VydmljZVdvcmtlckNvbnRleHREYXRhOwogCiBXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGFiYXNlRmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CkBAIC01Myw3ICs1NCw3IEBAIHB1YmxpYzoK
IAogICAgIH5SZWdpc3RyYXRpb25EYXRhYmFzZSgpOwogCi0gICAgdm9pZCBwdXNoQ2hhbmdlcyhj
b25zdCBIYXNoTWFwPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXksIHN0ZDo6b3B0aW9uYWw8
U2VydmljZVdvcmtlckNvbnRleHREYXRhPj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OworICAgIHZvaWQgcHVzaENoYW5nZXMoY29uc3QgSGFzaE1hcDxTZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uS2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4+JiwgY29u
c3QgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRh
RGF0YT4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyQWxs
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBjbG9zZShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogCkBAIC02MywyMSArNjQsMjcgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgZGF0YWJhc2VEaXJlY3RvcnlJc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGFiYXNlRGlyZWN0b3J5Lmlzb2xhdGVkQ29weSgpOyB9CiAKICAgICBlbnVtIGNsYXNzIFNob3Vs
ZFJldHJ5IHsgTm8sIFllcyB9OwotICAgIHZvaWQgc2NoZWR1bGVQdXNoQ2hhbmdlcyhWZWN0b3I8
U2VydmljZVdvcmtlckNvbnRleHREYXRhPiYmLCBWZWN0b3I8U2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbktleT4mJiwgU2hvdWxkUmV0cnksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBzY2hlZHVsZVB1c2hDaGFuZ2VzKFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERh
dGE+JiYsIFZlY3RvcjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5PiYmLCBWZWN0b3I8UHVz
aE1ldGFkYXRhRGF0YT4mJiwgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mJiwgU2hvdWxkUmV0
cnksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBwb3N0VGFza1RvV29y
a1F1ZXVlKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKICAgICAvLyBNZXRob2RzIHRvIGJlIHJ1biBv
biB0aGUgd29yayBxdWV1ZS4KICAgICBib29sIG9wZW5TUUxpdGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIGZ1bGxGaWxlbmFtZSk7CiAgICAgU3RyaW5nIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7
CisgICAgU3RyaW5nIGVuc3VyZVZhbGlkUHVzaE1ldGFkYXRhVGFibGUoKTsKKyAgICBTdHJpbmcg
aW1wb3J0Um93cygpOwogICAgIFN0cmluZyBpbXBvcnRSZWNvcmRzKCk7Ci0gICAgdm9pZCBpbXBv
cnRSZWNvcmRzSWZOZWNlc3NhcnkoKTsKLSAgICBib29sIGRvUHVzaENoYW5nZXMoY29uc3QgVmVj
dG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mLCBjb25zdCBWZWN0b3I8U2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbktleT4mKTsKKyAgICBTdHJpbmcgaW1wb3J0UHVzaE1ldGFkYXRhKCk7Cisg
ICAgdm9pZCBpbXBvcnRSb3dzSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGRvUHVzaENoYW5nZXMo
Y29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YT4mLCBjb25zdCBWZWN0b3I8U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbktleT4mLCBjb25zdCBWZWN0b3I8UHVzaE1ldGFkYXRhRGF0
YT4mLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYpOworICAgIGJvb2wgZG9SZWdp
c3RyYXRpb25DaGFuZ2VzKGNvbnN0IFZlY3RvcjxTZXJ2aWNlV29ya2VyQ29udGV4dERhdGE+Jiwg
Y29uc3QgVmVjdG9yPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXk+Jik7CisgICAgYm9vbCBk
b1B1c2hNZXRhZGF0YUNoYW5nZXMoY29uc3QgVmVjdG9yPFB1c2hNZXRhZGF0YURhdGE+JiwgY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKICAgICB2b2lkIGRvQ2xlYXJPcmlnaW4o
Y29uc3QgU2VjdXJpdHlPcmlnaW4mKTsKICAgICBTV1NjcmlwdFN0b3JhZ2UmIHNjcmlwdFN0b3Jh
Z2UoKTsKICAgICBTdHJpbmcgc2NyaXB0U3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0OwogCiAgICAg
Ly8gUmVwbGllcyB0byB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm9pZCBhZGRSZWdpc3RyYXRpb25U
b1N0b3JlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYmKTsKKyAgICB2b2lkIGFkZFB1c2hNZXRh
ZGF0YVRvU3RvcmUoUHVzaE1ldGFkYXRhRGF0YSYmKTsKICAgICB2b2lkIGRhdGFiYXNlRmFpbGVk
VG9PcGVuKCk7CiAgICAgdm9pZCBkYXRhYmFzZU9wZW5lZEFuZFJlY29yZHNJbXBvcnRlZCgpOyAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9SZWdp
c3RyYXRpb25TdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvblN0b3JlLmNwcAppbmRleCAyMTkwNTc2MTYzODk3OTJlYzNhYzYwMTY1MTgx
MmMzNzU1OTIyOGNkLi5iMDE3YmYyNWYxM2YwYmQ4N2Q0MzRlMzA3MzY3ZTg0MDc0NjRiYWY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1JlZ2lzdHJh
dGlvblN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1JlZ2lzdHJhdGlvblN0b3JlLmNwcApAQCAtNTcsMTQgKzU3LDE2IEBAIHZvaWQgUmVnaXN0cmF0
aW9uU3RvcmU6OnB1c2hDaGFuZ2VzVG9EYXRhYmFzZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2RhdGFiYXNlLT5wdXNo
Q2hhbmdlcyhtX3VwZGF0ZWRSZWdpc3RyYXRpb25zLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgbV9kYXRhYmFzZS0+cHVzaENoYW5nZXMobV91cGRhdGVkUmVnaXN0cmF0aW9ucywg
bV91cGRhdGVkUHVzaE1ldGFkYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
bV91cGRhdGVkUmVnaXN0cmF0aW9ucy5jbGVhcigpOworICAgIG1fdXBkYXRlZFB1c2hNZXRhZGF0
YS5jbGVhcigpOwogfQogCiB2b2lkIFJlZ2lzdHJhdGlvblN0b3JlOjpjbGVhckFsbChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9uZWVkc1B1
c2hpbmdDaGFuZ2VzID0gZmFsc2U7CiAgICAgbV91cGRhdGVkUmVnaXN0cmF0aW9ucy5jbGVhcigp
OworICAgIG1fdXBkYXRlZFB1c2hNZXRhZGF0YS5jbGVhcigpOwogICAgIG1fZGF0YWJhc2VQdXNo
VGltZXIuc3RvcCgpOwogICAgIG1fZGF0YWJhc2UtPmNsZWFyQWxsKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KQEAgLTExOSw2ICsxMjEsMjggQEAgdm9pZCBSZWdpc3RyYXRpb25TdG9y
ZTo6cmVtb3ZlUmVnaXN0cmF0aW9uKGNvbnN0IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25LZXkm
IGsKICAgICBzY2hlZHVsZURhdGFiYXNlUHVzaElmTmVjZXNzYXJ5KCk7CiB9CiAKK3ZvaWQgUmVn
aXN0cmF0aW9uU3RvcmU6OnVwZGF0ZVB1c2hNZXRhZGF0YShjb25zdCBQdXNoTWV0YWRhdGFEYXRh
JiBkYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFkYXRh
Lm9yaWdpbi5wcm90b2NvbC5pc0VtcHR5KCkgJiYgIWRhdGEub3JpZ2luLmhvc3QuaXNFbXB0eSgp
KTsKKyAgICBpZiAoZGF0YS5vcmlnaW4ucHJvdG9jb2wuaXNFbXB0eSgpIHx8IGRhdGEub3JpZ2lu
Lmhvc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3VwZGF0ZWRQdXNoTWV0
YWRhdGEuc2V0KGRhdGEub3JpZ2luLCBkYXRhKTsKKyAgICBzY2hlZHVsZURhdGFiYXNlUHVzaElm
TmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgUmVnaXN0cmF0aW9uU3RvcmU6OnJlbW92ZVB1c2hNZXRh
ZGF0YShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghb3JpZ2luLnByb3RvY29sLmlzRW1wdHkoKSAmJiAh
b3JpZ2luLmhvc3QuaXNFbXB0eSgpKTsKKyAgICBpZiAob3JpZ2luLnByb3RvY29sLmlzRW1wdHko
KSB8fCBvcmlnaW4uaG9zdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdXBk
YXRlZFB1c2hNZXRhZGF0YS5zZXQob3JpZ2luLCBzdGQ6Om51bGxvcHQpOworICAgIHNjaGVkdWxl
RGF0YWJhc2VQdXNoSWZOZWNlc3NhcnkoKTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25TdG9yZTo6
YWRkUmVnaXN0cmF0aW9uRnJvbURhdGFiYXNlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYmIGRh
dGEpCiB7CiAgICAgQVNTRVJUKCFkYXRhLnJlZ2lzdHJhdGlvbi5rZXkuaXNFbXB0eSgpKTsKQEAg
LTEyOCw2ICsxNTIsMTUgQEAgdm9pZCBSZWdpc3RyYXRpb25TdG9yZTo6YWRkUmVnaXN0cmF0aW9u
RnJvbURhdGFiYXNlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYmIGQKICAgICBtX3NlcnZlci5h
ZGRSZWdpc3RyYXRpb25Gcm9tU3RvcmUoV1RGTW92ZShkYXRhKSk7CiB9CiAKK3ZvaWQgUmVnaXN0
cmF0aW9uU3RvcmU6OmFkZFB1c2hNZXRhZGF0YUZyb21EYXRhYmFzZShQdXNoTWV0YWRhdGFEYXRh
JiYgZGF0YSkKK3sKKyAgICBBU1NFUlQoIWRhdGEub3JpZ2luLnByb3RvY29sLmlzRW1wdHkoKSAm
JiAhZGF0YS5vcmlnaW4uaG9zdC5pc0VtcHR5KCkpOworICAgIGlmIChkYXRhLm9yaWdpbi5wcm90
b2NvbC5pc0VtcHR5KCkgfHwgZGF0YS5vcmlnaW4uaG9zdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2VydmVyLmFkZFB1c2hNZXRhZGF0YUZyb21TdG9yZShXVEZNb3ZlKGRh
dGEpKTsKK30KKwogdm9pZCBSZWdpc3RyYXRpb25TdG9yZTo6ZGlkU2F2ZVdvcmtlclNjcmlwdHNU
b0Rpc2soU2VydmljZVdvcmtlcklkZW50aWZpZXIgc2VydmljZVdvcmtlcklkZW50aWZpZXIsIFNj
cmlwdEJ1ZmZlciYmIG1haW5TY3JpcHQsIEhhc2hNYXA8VVJMLCBTY3JpcHRCdWZmZXI+JiYgaW1w
b3J0ZWRTY3JpcHRzKQogewogICAgIG1fc2VydmVyLmRpZFNhdmVXb3JrZXJTY3JpcHRzVG9EaXNr
KHNlcnZpY2VXb3JrZXJJZGVudGlmaWVyLCBXVEZNb3ZlKG1haW5TY3JpcHQpLCBXVEZNb3ZlKGlt
cG9ydGVkU2NyaXB0cykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2
aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9SZWdpc3RyYXRpb25TdG9yZS5oCmluZGV4IDNiM2NkOTg3YjcxZTQyNDcx
ZjFlMjI2Njc1MDcwNTk0OTFlMmNiM2QuLjYxMGUwNGQ5Y2ZjODcyZGVlNWMyMTA5NDQyZDM4YzNj
OTVjMThlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvUmVnaXN0cmF0aW9uU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2Uvc2VydmVyL1JlZ2lzdHJhdGlvblN0b3JlLmgKQEAgLTU5LDkgKzU5LDEyIEBAIHB1YmxpYzoK
ICAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgU1dTZXJ2ZXIKICAgICB2b2lkIHVwZGF0ZVJlZ2lz
dHJhdGlvbihjb25zdCBTZXJ2aWNlV29ya2VyQ29udGV4dERhdGEmKTsKICAgICB2b2lkIHJlbW92
ZVJlZ2lzdHJhdGlvbihjb25zdCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5Jik7CisgICAg
dm9pZCB1cGRhdGVQdXNoTWV0YWRhdGEoY29uc3QgUHVzaE1ldGFkYXRhRGF0YSYpOworICAgIHZv
aWQgcmVtb3ZlUHVzaE1ldGFkYXRhKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYpOwogCiAgICAg
Ly8gQ2FsbGJhY2tzIGZyb20gdGhlIGRhdGFiYXNlCiAgICAgdm9pZCBhZGRSZWdpc3RyYXRpb25G
cm9tRGF0YWJhc2UoU2VydmljZVdvcmtlckNvbnRleHREYXRhJiYpOworICAgIHZvaWQgYWRkUHVz
aE1ldGFkYXRhRnJvbURhdGFiYXNlKFB1c2hNZXRhZGF0YURhdGEmJik7CiAgICAgdm9pZCBkYXRh
YmFzZUZhaWxlZFRvT3BlbigpOwogICAgIHZvaWQgZGF0YWJhc2VPcGVuZWRBbmRSZWNvcmRzSW1w
b3J0ZWQoKTsKICAgICB2b2lkIGRpZFNhdmVXb3JrZXJTY3JpcHRzVG9EaXNrKFNlcnZpY2VXb3Jr
ZXJJZGVudGlmaWVyLCBTY3JpcHRCdWZmZXImJiBtYWluU2NyaXB0LCBIYXNoTWFwPFVSTCwgU2Ny
aXB0QnVmZmVyPiYmIGltcG9ydGVkU2NyaXB0cyk7CkBAIC03Nyw2ICs4MCw3IEBAIHByaXZhdGU6
CiAgICAgUmVmPFJlZ2lzdHJhdGlvbkRhdGFiYXNlPiBtX2RhdGFiYXNlOwogCiAgICAgSGFzaE1h
cDxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uS2V5LCBzdGQ6Om9wdGlvbmFsPFNlcnZpY2VXb3Jr
ZXJDb250ZXh0RGF0YT4+IG1fdXBkYXRlZFJlZ2lzdHJhdGlvbnM7CisgICAgSGFzaE1hcDxTZWN1
cml0eU9yaWdpbkRhdGEsIHN0ZDo6b3B0aW9uYWw8UHVzaE1ldGFkYXRhRGF0YT4+IG1fdXBkYXRl
ZFB1c2hNZXRhZGF0YTsKICAgICBUaW1lciBtX2RhdGFiYXNlUHVzaFRpbWVyOwogCiAgICAgYm9v
bCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKaW5kZXggMzlmZTFiNzg3ZGE3NWY0NDFiYWU1
Y2E0NzVhOTIxYmY1OWNjMzU2Ni4uZDhhNjVmZjc5Mjk5MzYyZDdkMjFmYTViNDc3MWZkN2FkYWI3
OTMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NlcnZlci5jcHAKQEAgLTE5MCw2ICsxOTAsMTEgQEAgdm9pZCBTV1NlcnZlcjo6YWRkUmVnaXN0
cmF0aW9uRnJvbVN0b3JlKFNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YSYmIGRhdGEpCiAgICAgfSk7
CiB9CiAKK3ZvaWQgU1dTZXJ2ZXI6OmFkZFB1c2hNZXRhZGF0YUZyb21TdG9yZShQdXNoTWV0YWRh
dGFEYXRhICYmZGF0YSkKK3sKKyAgICBtX29yaWdpblRvUHVzaE1ldGFkYXRhLnNldChkYXRhLm9y
aWdpbiwgV1RGTW92ZShkYXRhKSk7Cit9CisKIHZvaWQgU1dTZXJ2ZXI6OmRpZFNhdmVXb3JrZXJT
Y3JpcHRzVG9EaXNrKFNlcnZpY2VXb3JrZXJJZGVudGlmaWVyIHNlcnZpY2VXb3JrZXJJZGVudGlm
aWVyLCBTY3JpcHRCdWZmZXImJiBtYWluU2NyaXB0LCBIYXNoTWFwPFVSTCwgU2NyaXB0QnVmZmVy
PiYmIGltcG9ydGVkU2NyaXB0cykKIHsKICAgICBpZiAoYXV0byB3b3JrZXIgPSB3b3JrZXJCeUlE
KHNlcnZpY2VXb3JrZXJJZGVudGlmaWVyKSkKQEAgLTI2OSw2ICsyNzQsNyBAQCB2b2lkIFNXU2Vy
dmVyOjpjbGVhckFsbChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgIG1fcmVnaXN0cmF0aW9ucy5iZWdpbigpLT52YWx1ZS0+Y2xlYXIoKTsKICAg
ICBtX3BlbmRpbmdDb250ZXh0RGF0YXMuY2xlYXIoKTsKICAgICBtX29yaWdpblN0b3JlLT5jbGVh
ckFsbCgpOworICAgIG1fb3JpZ2luVG9QdXNoTWV0YWRhdGEuY2xlYXIoKTsKICAgICBpZiAobV9y
ZWdpc3RyYXRpb25TdG9yZSkKICAgICAgICAgbV9yZWdpc3RyYXRpb25TdG9yZS0+Y2xlYXJBbGwo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQpAQCAtMzA4LDYgKzMxNCw4IEBAIHZvaWQg
U1dTZXJ2ZXI6OmNsZWFyKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4s
IENvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICByZWdpc3RyYXRpb25zVG9SZW1vdmUuYXBw
ZW5kKHJlZ2lzdHJhdGlvbi5nZXQoKSk7CiAgICAgfQogCisgICAgcmVzZXRTaWxlbnRQdXNoQ291
bnQoc2VjdXJpdHlPcmlnaW4pOworCiAgICAgZm9yIChhdXRvJiBjb250ZXh0RGF0YXMgOiBtX3Bl
bmRpbmdDb250ZXh0RGF0YXMudmFsdWVzKCkpIHsKICAgICAgICAgY29udGV4dERhdGFzLnJlbW92
ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjb250ZXh0RGF0YSkgewogICAgICAgICAgICAgcmV0dXJu
IGNvbnRleHREYXRhLnJlZ2lzdHJhdGlvbi5rZXkucmVsYXRlc1RvT3JpZ2luKHNlY3VyaXR5T3Jp
Z2luKTsKQEAgLTU4Nyw2ICs1OTUsMTkgQEAgdm9pZCBTV1NlcnZlcjo6ZGlkRmluaXNoQWN0aXZh
dGlvbihTV1NlcnZlcldvcmtlciYgd29ya2VyKQogICAgIHJlZ2lzdHJhdGlvbi0+ZGlkRmluaXNo
QWN0aXZhdGlvbih3b3JrZXIuaWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBTV1NlcnZlcjo6Zmx1
c2hQZW5kaW5nUmVnaXN0cmF0aW9uc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
bV9yZWdpc3RyYXRpb25TdG9yZSk7CisKKyAgICBpZiAoIW1fcmVnaXN0cmF0aW9uU3RvcmUpIHsK
KyAgICAgICAgaGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZWdp
c3RyYXRpb25TdG9yZS0+Zmx1c2hDaGFuZ2VzKFdURk1vdmUoaGFuZGxlcikpOworfQorCiB2b2lk
IFNXU2VydmVyOjpzdG9yZVJlZ2lzdHJhdGlvbkZvcldvcmtlcihTV1NlcnZlcldvcmtlciYgd29y
a2VyKQogewogICAgIGlmIChtX3JlZ2lzdHJhdGlvblN0b3JlKQpAQCAtMTIyMSw2ICsxMjQyLDU5
IEBAIHZvaWQgU1dTZXJ2ZXI6OnNvZnRVcGRhdGUoU1dTZXJ2ZXJSZWdpc3RyYXRpb24mIHJlZ2lz
dHJhdGlvbikKICAgICBzY2hlZHVsZUpvYihXVEZNb3ZlKGpvYkRhdGEpKTsKIH0KIAordm9pZCBT
V1NlcnZlcjo6aW5jcmVtZW50U2lsZW50UHVzaENvdW50KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgb3JpZ2luKQoreworICAgIEFTU0VSVChtX2ltcG9ydENvbXBsZXRlZCk7CisgICAgQVNTRVJU
KG1fcmVnaXN0cmF0aW9uU3RvcmUpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fcmVnaXN0cmF0aW9uU3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FOiBtZXNzYWdlIHdlYnB1c2hkIGlmIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIHdha2Ugc3Rh
dGUgb2YgdGhlIHRvcGljLgorCisgICAgaWYgKGF1dG8gaXQgPSBtX29yaWdpblRvUHVzaE1ldGFk
YXRhLmZpbmQob3JpZ2luKTsgaXQgIT0gbV9vcmlnaW5Ub1B1c2hNZXRhZGF0YS5lbmQoKSkgewor
ICAgICAgICBpdC0+dmFsdWUuc2lsZW50UHVzaENvdW50Kys7CisgICAgICAgIG1fcmVnaXN0cmF0
aW9uU3RvcmUtPnVwZGF0ZVB1c2hNZXRhZGF0YShpdC0+dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUHVzaE1ldGFkYXRhRGF0YSBkYXRhIHsgb3JpZ2luLCAxIH07CisgICAg
bV9yZWdpc3RyYXRpb25TdG9yZS0+dXBkYXRlUHVzaE1ldGFkYXRhKGRhdGEpOworICAgIG1fb3Jp
Z2luVG9QdXNoTWV0YWRhdGEuc2V0KG9yaWdpbiwgV1RGTW92ZShkYXRhKSk7Cit9CisKK3ZvaWQg
U1dTZXJ2ZXI6OnJlc2V0U2lsZW50UHVzaENvdW50KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
ZGF0YSkKK3sKKyAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZWQpOworICAgIEFTU0VSVChtX3Jl
Z2lzdHJhdGlvblN0b3JlKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8g
RklYTUU6IG1lc3NhZ2Ugd2VicHVzaGQgaWYgbmVjZXNzYXJ5IHRvIHJlc2V0IHRoZSB3YWtlIHN0
YXRlIG9mIHRoZSB0b3BpYy4KKworICAgIGlmIChtX29yaWdpblRvUHVzaE1ldGFkYXRhLnJlbW92
ZShkYXRhKSkKKyAgICAgICAgbV9yZWdpc3RyYXRpb25TdG9yZS0+cmVtb3ZlUHVzaE1ldGFkYXRh
KGRhdGEpOworfQorCit2b2lkIFNXU2VydmVyOjpnZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5n
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgd2hlbkltcG9ydElzQ29tcGxldGVkSWZOZWVk
ZWQoW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIG9yaWdpbiwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpu
dWxsb3B0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChh
dXRvIGl0ID0gbV9vcmlnaW5Ub1B1c2hNZXRhZGF0YS5maW5kKG9yaWdpbik7IGl0ICE9IG1fb3Jp
Z2luVG9QdXNoTWV0YWRhdGEuZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGl0LT52YWx1ZS5zaWxlbnRQdXNoQ291bnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpudWxsb3B0KTsKKyAgICB9KTsK
K30KKwogdm9pZCBTV1NlcnZlcjo6cHJvY2Vzc1B1c2hNZXNzYWdlKHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiYmIGRhdGEsIFVSTCYmIHJlZ2lzdHJhdGlvblVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKIHsKICAgICB3aGVuSW1wb3J0SXNDb21wbGV0
ZWRJZk5lZWRlZChbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgZGF0YSA9IFdU
Rk1vdmUoZGF0YSksIHJlZ2lzdHJhdGlvblVSTCA9IFdURk1vdmUocmVnaXN0cmF0aW9uVVJMKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKQEAgLTEyNDksMTUgKzEz
MjMsMTkgQEAgdm9pZCBTV1NlcnZlcjo6cHJvY2Vzc1B1c2hNZXNzYWdlKHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiYmIGRhdGEsIFVSTCYmIHIKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgYXV0byBzZXJ2aWNlV29ya2VySWRlbnRpZmllciA9IHdvcmtlci0+aWRlbnRpZmllcigp
OwotICAgICAgICAgICAgYXV0byB0ZXJtaW5hdGVXb3JrZXJUaW1lciA9IG1ha2VVbmlxdWU8VGlt
ZXI+KFt3b3JrZXIgPSBXVEZNb3ZlKHdvcmtlcildIHsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2lu
ID0gd29ya2VyLT5yZWdpc3RyYXRpb25LZXkoKS50b3BPcmlnaW4oKTsKKyAgICAgICAgICAgIGF1
dG8gdGVybWluYXRlV29ya2VyVGltZXIgPSBtYWtlVW5pcXVlPFRpbWVyPihbd29ya2VyID0gV1RG
TW92ZSh3b3JrZXIpLCB3ZWFrVGhpc10gewogICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKFNlcnZpY2VXb3JrZXIsICJUZXJtaW5hdGluZyBzZXJ2aWNlIHdvcmtlciBhcyBwcm9jZXNz
aW5nIHB1c2ggZXZlbnQgdG9vayB0b28gbXVjaCB0aW1lIik7CisgICAgICAgICAgICAgICAgaWYg
KHdlYWtUaGlzKQorICAgICAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+aW5jcmVtZW50U2lsZW50
UHVzaENvdW50KHdvcmtlci0+cmVnaXN0cmF0aW9uS2V5KCkudG9wT3JpZ2luKCkpOwogICAgICAg
ICAgICAgICAgIHdvcmtlci0+dGVybWluYXRlKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIHRlcm1pbmF0ZVdvcmtlclRpbWVyLT5zdGFydE9uZVNob3Qod2Vha1RoaXMgJiYgd2Vha1Ro
aXMtPm1faXNQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPyBkZWZhdWx0VGVybWluYXRp
b25EZWxheSA6IDJfcyk7Ci0gICAgICAgICAgICBjb25uZWN0aW9uT3JTdGF0dXMudmFsdWUoKS0+
ZmlyZVB1c2hFdmVudChzZXJ2aWNlV29ya2VySWRlbnRpZmllciwgZGF0YSwgW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIHRlcm1pbmF0ZVdvcmtlclRpbWVyID0gV1RGTW92ZSh0ZXJtaW5h
dGVXb3JrZXJUaW1lcildKGJvb2wgc3VjY2VlZGVkKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNv
bm5lY3Rpb25PclN0YXR1cy52YWx1ZSgpLT5maXJlUHVzaEV2ZW50KHNlcnZpY2VXb3JrZXJJZGVu
dGlmaWVyLCBkYXRhLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgdGVybWluYXRlV29y
a2VyVGltZXIgPSBXVEZNb3ZlKHRlcm1pbmF0ZVdvcmtlclRpbWVyKSwgb3JpZ2luID0gV1RGTW92
ZShvcmlnaW4pLCB3ZWFrVGhpc10oYm9vbCBzdWNjZWVkZWQpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGlmICh0ZXJtaW5hdGVXb3JrZXJUaW1lci0+aXNBY3RpdmUoKSkKICAgICAgICAgICAg
ICAgICAgICAgdGVybWluYXRlV29ya2VyVGltZXItPnN0b3AoKTsKLQorICAgICAgICAgICAgICAg
IGlmICghc3VjY2VlZGVkICYmIHdlYWtUaGlzKQorICAgICAgICAgICAgICAgICAgICB3ZWFrVGhp
cy0+aW5jcmVtZW50U2lsZW50UHVzaENvdW50KG9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2Fs
bGJhY2soc3VjY2VlZGVkKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuaAppbmRleCAzMjM3
NTQ1M2I0ZmQwY2NmM2YxYWRhYjI3MzM5YzBkZWY3YTU3NWY2Li42MGU5OTg1N2UxOWY4ZjVhZDZl
ZjJhOTRkZjFjMjAzYWFjZTg2MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bkRhdGEuaCIKICNpbmNsdWRlICJTZXJ2aWNlV29ya2VyQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUg
IlNlcnZpY2VXb3JrZXJDb250ZXh0RGF0YS5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckpvYi5oIgogI2luY2x1ZGUgIlNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EYXRhLmgiCkBAIC02Miw4ICs2Myw4IEBAIGVudW0gY2xhc3Mg
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblN0YXRlIDogdWludDhfdDsKIGVudW0gY2xhc3MgU2Vy
dmljZVdvcmtlclN0YXRlIDogdWludDhfdDsKIHN0cnVjdCBFeGNlcHRpb25EYXRhOwogc3RydWN0
IE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzOworc3RydWN0IFB1c2hNZXRhZGF0YURhdGE7CiBzdHJ1
Y3QgU2VydmljZVdvcmtlckNsaWVudFF1ZXJ5T3B0aW9uczsKLXN0cnVjdCBTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGE7CiBzdHJ1Y3QgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGE7CiBzdHJ1
Y3QgV29ya2VyRmV0Y2hSZXN1bHQ7CiAKQEAgLTE5MSwxMSArMTkyLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlc29sdmVSZWdpc3RyYXRpb25SZWFkeVJlcXVlc3RzKFNXU2VydmVyUmVnaXN0cmF0
aW9uJik7CiAKICAgICB2b2lkIGFkZFJlZ2lzdHJhdGlvbkZyb21TdG9yZShTZXJ2aWNlV29ya2Vy
Q29udGV4dERhdGEmJik7CisgICAgdm9pZCBhZGRQdXNoTWV0YWRhdGFGcm9tU3RvcmUoUHVzaE1l
dGFkYXRhRGF0YSYmKTsKICAgICB2b2lkIGRpZFNhdmVXb3JrZXJTY3JpcHRzVG9EaXNrKFNlcnZp
Y2VXb3JrZXJJZGVudGlmaWVyLCBTY3JpcHRCdWZmZXImJiBtYWluU2NyaXB0LCBIYXNoTWFwPFVS
TCwgU2NyaXB0QnVmZmVyPiYmIGltcG9ydGVkU2NyaXB0cyk7CiAgICAgdm9pZCByZWdpc3RyYXRp
b25TdG9yZUltcG9ydENvbXBsZXRlKCk7CiAgICAgdm9pZCByZWdpc3RyYXRpb25TdG9yZURhdGFi
YXNlRmFpbGVkVG9PcGVuKCk7CiAgICAgdm9pZCBzdG9yZVJlZ2lzdHJhdGlvbkZvcldvcmtlcihT
V1NlcnZlcldvcmtlciYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmbHVzaFBlbmRpbmdS
ZWdpc3RyYXRpb25zRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoRnVuY3Rp
b248dm9pZChjb25zdCBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4mKT4mJik7CiAKICAgICBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQpA
QCAtMjIyLDYgKzIyNiw4IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZFJ1blNlcnZpY2VXb3Jr
ZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUnVuU2Vy
dmljZVdvcmtlcnNPbk1haW5UaHJlYWRGb3JUZXN0aW5nOyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHByb2Nlc3NQdXNoTWVzc2FnZShzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4m
JiwgVVJMJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVzZXRTaWxlbnRQdXNoQ291bnQoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5n
KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4pPiYmKTsKIAogICAgIGVudW0gY2xhc3MgU2hvdWxkU2tpcEV2ZW50
IDogYm9vbCB7IE5vLCBZZXMgfTsKICAgICB2b2lkIGZpcmVGdW5jdGlvbmFsRXZlbnQoU1dTZXJ2
ZXJSZWdpc3RyYXRpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4cGVjdGVkPFNXU2VydmVy
VG9Db250ZXh0Q29ubmVjdGlvbiosIFNob3VsZFNraXBFdmVudD4pPiYmKTsKQEAgLTI1Niw2ICsy
NjIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQXBwSW5pdGlhdGVkVmFsdWVGb3JXb3Jr
ZXJzKGNvbnN0IENsaWVudE9yaWdpbiYsIExhc3ROYXZpZ2F0aW9uV2FzQXBwSW5pdGlhdGVkKTsK
ICAgICB2b2lkIHdoZW5JbXBvcnRJc0NvbXBsZXRlZElmTmVlZGVkKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKKyAgICB2b2lkIGluY3JlbWVudFNpbGVudFB1c2hDb3VudChjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmKTsKKwogICAgIEhhc2hNYXA8U1dTZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25zOwogICAg
IEhhc2hNYXA8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbktleSwgV2Vha1B0cjxTV1NlcnZlclJl
Z2lzdHJhdGlvbj4+IG1fc2NvcGVUb1JlZ2lzdHJhdGlvbk1hcDsKICAgICBIYXNoTWFwPFNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1dTZXJ2ZXJS
ZWdpc3RyYXRpb24+PiBtX3JlZ2lzdHJhdGlvbnM7CkBAIC0yOTcsNiArMzA1LDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1faGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50IHsgZmFsc2UgfTsKICAg
ICBib29sIG1faGFzUmVjZWl2ZWRBcHBCb3VuZERvbWFpbnMgeyBmYWxzZSB9OwogICAgIHVuc2ln
bmVkIG1fdW5pcXVlUmVnaXN0cmF0aW9uQ291bnQgeyAwIH07CisKKyAgICBIYXNoTWFwPFNlY3Vy
aXR5T3JpZ2luRGF0YSwgUHVzaE1ldGFkYXRhRGF0YT4gbV9vcmlnaW5Ub1B1c2hNZXRhZGF0YTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMTc1YmQzODE2NDc0OTE2Y2MwMTE1Yzlk
OGZmMmM1ODZiZDBlMzFlOC4uNzg5YjFmNDZhNDAwMDhjZjFmM2M1NDM1NzFhOWE0MzkyNjRjNTAy
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKQEAgLTIyNjYsNiArMjI2NiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcm9jZXNzUHVz
aE1lc3NhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJQdXNoTWVzc2FnZQogICAgIGlm
IChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgc2Vz
c2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5wcm9jZXNzUHVzaE1lc3NhZ2UoV1RGTW92ZShwdXNoTWVz
c2FnZS5wdXNoRGF0YSksIFdURk1vdmUocHVzaE1lc3NhZ2UucmVnaXN0cmF0aW9uVVJMKSwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRTaWxlbnRQdXNo
Q291bnRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBvcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4pPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29y
a1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+ZW5zdXJlU1dTZXJ2ZXIoKS5n
ZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nKG9yaWdpbiwgV1RGTW92ZShjYWxsYmFjaykpOwor
fQogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDBmODUzM2VkMTNkZDI2Mjc3YTZk
ZDUyYWI2ZGFiZTIwYzNlMDg4MDUuLjg0ZWQ4YTgyNjRiODc4YzNiZjU3Mzk2NDNmZGQ5ZjE5ZTUy
N2FiZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKQEAgLTM3NSw2ICszNzUsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIHZvaWQgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlcyhQQUw6OlNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViUHVzaE1lc3NhZ2U+Jik+JiYpOwogICAg
IHZvaWQgcHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lvbklELCBXZWJQdXNoTWVzc2FnZSYm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGdldFNpbGVudFB1
c2hDb3VudEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+KT4mJik7CiAjZW5kaWYKIAogICAgIHZvaWQgZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJl
Z2lzdHJhdGlvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbgppbmRleCA2MzFlMmI2MDczYzAxOTIxMzA2OGMyMDk2YjgyN2IyNzlkYmM3ZGUwLi43ZTA1
YTQ5ZTc3YTk0MzhmMzJjM2MxNzYyZTg1MzdkMTc0ZGUzZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAg
LTIwOSw2ICsyMDksNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZl
ciB7CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIEdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1l
c3NhZ2U+IG1lc3NhZ2VzKSBBc3luYwogICAgIFByb2Nlc3NQdXNoTWVzc2FnZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlIHB1c2hNZXNzYWdl
KSAtPiAoYm9vbCBkaWRTdWNjZWVkKSBBc3luYworICAgIEdldFNpbGVudFB1c2hDb3VudEZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhIG9yaWdpbikgLT4gKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGNvdW50KSBBc3lu
YwogI2VuZGlmCiAgICAgRGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEg
b3JpZ2luKSAtPiAoU3RyaW5nIGVycm9yTWVzc2FnZSkgQXN5bmMKICAgICBHZXRPcmlnaW5zV2l0
aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9ucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
IC0+IChWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zKSBBc3luYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9TZXJ2aWNlV29ya2VyL1dl
YlNXU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1Nl
cnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCBiMzkwY2FmYTYwNDFm
M2U4MDFmZDJkM2E4YzI0M2I1NTQ3NTEyMjk0Li4yZWExYmNkODhjNjU3MGRhOGJlNzAwNjE3YmQ5
ZGJmMTY4OTlkNzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1Nl
cnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJDb25uZWN0aW9uLmNwcApA
QCAtMTk0LDYgKzE5NCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlV29ya2VyRmV0Y2hUYXNr
PiBXZWJTV1NlcnZlckNvbm5lY3Rpb246OmNyZWF0ZUZldGNoVGFzayhOCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAorICAgIGlmICh3b3JrZXIgJiYgcmVxdWVzdC5pc1RvcFNpdGUo
KSAmJiByZWdpc3RyYXRpb24pCisgICAgICAgIHNlcnZlcigpLnJlc2V0U2lsZW50UHVzaENvdW50
KHJlZ2lzdHJhdGlvbi0+a2V5KCkudG9wT3JpZ2luKCkpOworCiAgICAgaWYgKHdvcmtlci0+c2hv
dWxkU2tpcEZldGNoRXZlbnQoKSkgewogICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5zaG91bGRT
b2Z0VXBkYXRlKGxvYWRlci5wYXJhbWV0ZXJzKCkub3B0aW9ucykpCiAgICAgICAgICAgICByZWdp
c3RyYXRpb24tPnNjaGVkdWxlU29mdFVwZGF0ZShsb2FkZXIuaXNBcHBJbml0aWF0ZWQoKSA/IFdl
YkNvcmU6OklzQXBwSW5pdGlhdGVkOjpZZXMgOiBXZWJDb3JlOjpJc0FwcEluaXRpYXRlZDo6Tm8p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KaW5kZXggZjkxMzQ4M2RlZGEwNDEyNzYzOGFmYmFkZjFkZDcyZWI4NGIz
ODIxOC4uZTM5NWNhNTk4ZjlhMmQzODY4ZTEzNjYwZGExMjdkNDhmZGU5NDBlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tCkBAIC03OTcsNiArNzk3LDE4IEBAIC0odm9pZClfcHJvY2Vzc1B1c2hNZXNzYWdlOihO
U0RpY3Rpb25hcnkgKilwdXNoTWVzc2FnZURpY3Rpb25hcnkgY29tcGxldGlvbkhhbmRsCiAjZW5k
aWYKIH0KIAorLSh2b2lkKV9nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nOihOU1VSTCAqKXVy
bCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0ludGVnZXIpKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBfd2Vic2l0ZURh
dGFTdG9yZS0+bmV0d29ya1Byb2Nlc3MoKQorICAgICAgICAuZ2V0U2lsZW50UHVzaENvdW50Rm9y
VGVzdGluZyhfd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YTo6ZnJvbVVSTCh1cmwpLCBbY29tcGxldGlvbkhhbmRsZXJDb3B5XShzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBjb3VudCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJD
b3B5KGNvdW50ID8gc3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPigqY291bnQpIDogTlNOb3RGb3VuZCk7
CisgICAgICAgIH0pOworCisjZW5kaWYKK30KKwogLSh2b2lkKV9kZWxldGVQdXNoQW5kTm90aWZp
Y2F0aW9uUmVnaXN0cmF0aW9uOihXS1NlY3VyaXR5T3JpZ2luICopc2VjdXJpdHlPcmlnaW4gY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewog
ICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmluZGV4IDMxYTg1NDA3NDE0ZDRhNzNl
OThiYzQxMWU2MTdmZjhjNDhjZDE4NjkuLjIwZmM4YjM3OTNiMDUwMjUzNWFmNjg0ZjM0NjFmZjc1
ODVlNzZmZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaApAQCAtMTExLDYgKzExMSw3IEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hP
cHRpb25zKSB7CiAtKGJvb2wpX2hhc1NlcnZpY2VXb3JrZXJCYWNrZ3JvdW5kQWN0aXZpdHlGb3JU
ZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CiAtKHZvaWQpX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6KHZvaWQoXikoTlNBcnJheTxOU0Rp
Y3Rpb25hcnkgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0odm9pZClfcHJvY2Vzc1B1c2hNZXNzYWdl
OihOU0RpY3Rpb25hcnkgKilwdXNoTWVzc2FnZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShi
b29sKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOworLSh2b2lkKV9nZXRTaWxlbnRQdXNoQ291bnRGb3JUZXN0aW5n
OihOU1VSTCAqKXVybCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0ludGVnZXIpKWNvbXBs
ZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CiAtKHZvaWQpX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb246
KFdLU2VjdXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtKHZvaWQpX2dldE9yaWdpbnNXaXRoUHVz
aEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOih2b2lkKF4pKE5TU2V0PFdLU2VjdXJpdHlPcmln
aW4gKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGFlNzc4MThk
ZjJlMTNhYTg4ZTNkOGY4YzEyOTg0MTJkY2Y3YzMxNDIuLmFmZTg1NGI0OGRmMzA1YjM5MDNhNTI4
NjQyMTQyM2FjMjgxNWFkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTcxNCw2ICsxNzE0LDEyIEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJvY2Vzc1B1c2hNZXNzYWdlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgV2ViCiB7CiAgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJvY2Vzc1B1c2hNZXNzYWdlIHsgc2Vzc2lvbklELCBwdXNo
TWVzc2FnZSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6Z2V0U2lsZW50UHVzaENvdW50Rm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik+JiYgY2FsbGJhY2spCit7Cisg
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0U2lsZW50
UHVzaENvdW50Rm9yVGVzdGluZyB7IHNlc3Npb25JRCwgb3JpZ2luIH0sIFdURk1vdmUoY2FsbGJh
Y2spKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX1dPUktFUikKIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY2FsbGJhY2spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oCmluZGV4IGM0MzE5ODQ5Mzg5ZDEyMjkxNWUwNzdmODMwZDM1YzkwNmVmNGRiNDEuLjZiNTEz
MWJmYjA1NmZlODNhMjA3ZWE3NjViMmQyZTQ1YWQxZDY3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC0yNzks
NiArMjc5LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICB2b2lk
IGdldFBlbmRpbmdQdXNoTWVzc2FnZXMoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgVmVjdG9yPFdlYlB1c2hNZXNzYWdlPiYpPiYmKTsKICAgICB2b2lkIHByb2Nl
c3NQdXNoTWVzc2FnZShQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViUHVzaE1lc3NhZ2UmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgd2FzUHJvY2Vzc2VkKT4mJik7CisgICAgdm9pZCBnZXRT
aWxlbnRQdXNoQ291bnRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmLCAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPik+JiYpOwogI2VuZGlmCiAKICAgICB2b2lkIGRlbGV0ZVB1c2hBbmROb3RpZmlj
YXRpb25SZWdpc3RyYXRpb24oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFmOTc0
OTYxNGE5MTZlZjU4MGVkNzI3MDM1YzYzY2UzNzI0MzdjODAuLjNjMTAxMWNjYmE1Y2UxMDUxMGZl
YzI5NTAwODljOWI2ZThlZWE0ZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMi0wMi0xMiAgQmVuIE5oYW0gIDxu
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBUcmFjayBzaWxlbnQgcHVzaCBjb3VudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGlmaWVkIHRoZSBQ
dXNoQVBJIHRlc3RzIHRvIGNoZWNrIHRoYXQgc2lsZW50IHB1c2ggY291bnQgc3RhdGUgaXMgdXBk
YXRlZCBhbmQgcGVyc2lzdGVkCisgICAgICAgIGNvcnJlY3RseS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHVzaEFQSS5tbToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbToKKwogMjAyMi0w
Mi0wOSAgSiBQYXNjb2UgIDxqX3Bhc2NvZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhu
XSBTcGVjaWZ5IExvY2FsQXV0aGVudGljYXRvckFjY2Vzc0dyb3VwIHdoZW4gaW1wb3J0aW5nIGNy
ZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1B1c2hBUEkubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1B1
c2hBUEkubW0KaW5kZXggYjY3Mjk2NzhhZjk5ODU3ZDJhZmY5MGMzY2FlNDNlNmZiMjQ3Y2FiNC4u
MTRlNWZkNmRkZTJjNzI1MGU0MDZmNjZlZjcwZTdkZTNmODg2NTFkYiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QdXNoQVBJLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHVzaEFQSS5tbQpAQCAtODksNiArODks
MTEgQEAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CiAgICAg
cG9ydC5wb3N0TWVzc2FnZSgiUmVhZHkiKTsKIH0pOwogc2VsZi5hZGRFdmVudExpc3RlbmVyKCJw
dXNoIiwgKGV2ZW50KSA9PiB7CisgICAgaWYgKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS50ZXh0
KCkgPT0gJ3JlamVjdCcpIHsKKyAgICAgICAgZXZlbnQud2FpdFVudGlsKFByb21pc2UucmVqZWN0
KCdpbnN0YS1yZWplY3QnKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICB0cnkgewog
ICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKICAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2Uo
IlJlY2VpdmVkOiBudWxsIGRhdGEiKTsKQEAgLTEyNywxNCArMTMyLDI4IEBAIHN0YXRpYyBib29s
IHdhaXRVbnRpbEV2YWx1YXRlc1RvVHJ1ZShjb25zdCBGdW5jdGlvbjxib29sKCk+JiBmKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIE5TSW50ZWdlciBnZXRTaWxlbnRQdXNoQ291bnQo
V0tXZWJzaXRlRGF0YVN0b3JlKiBzdG9yZSwgTlNVUkwgKnVybCkKK3sKKyAgICBfX2Jsb2NrIGJv
b2wgZG9uZSA9IGZhbHNlOworICAgIF9fYmxvY2sgTlNJbnRlZ2VyIGNvdW50ID0gTlNOb3RGb3Vu
ZDsKKyAgICBbc3RvcmUgX2dldFNpbGVudFB1c2hDb3VudEZvclRlc3Rpbmc6dXJsIGNvbXBsZXRp
b25IYW5kbGVyOl4oTlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBjb3VudCA9IHJlc3VsdDsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKyAgICByZXR1cm4gY291bnQ7Cit9CisKIFRFU1QoUHVzaEFQSSwgZmlyZVB1
c2hFdmVudCkKIHsKICAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7CiAgICAg
ICAgIHsgIi8iLCB7IG1haW5CeXRlcyB9IH0sCiAgICAgICAgIHsgIi9zdy5qcyIsIHsge3sgIkNv
bnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9fSwgc2NyaXB0Qnl0ZXMgfSB9
CiAgICAgfSwgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApOworICAg
IE5TVVJMICp1cmwgPSBbc2VydmVyLnJlcXVlc3QoKSBVUkxdOwogCiAgICAgW1dLV2Vic2l0ZURh
dGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKKyAgICBbV0tX
ZWJzaXRlRGF0YVN0b3JlIF9zZXROZXR3b3JrUHJvY2Vzc1N1c3BlbnNpb25BbGxvd2VkRm9yVGVz
dGluZzpZRVNdOwogCiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKIApAQCAtMTYzLDYgKzE4Miw3IEBAIFRFU1Qo
UHVzaEFQSSwgZmlyZVB1c2hFdmVudCkKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
cHVzaE1lc3NhZ2VQcm9jZXNzZWQpOwogICAgIEVYUEVDVF9UUlVFKHB1c2hNZXNzYWdlU3VjY2Vz
c2Z1bCk7CisgICAgRVhQRUNUX0VRKGdldFNpbGVudFB1c2hDb3VudChbY29uZmlndXJhdGlvbiB3
ZWJzaXRlRGF0YVN0b3JlXSwgdXJsKSwgTlNOb3RGb3VuZCk7CiAKICAgICBkb25lID0gZmFsc2U7
CiAgICAgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsKQEAgLTE3Nyw2ICsxOTcsMzkgQEAg
VEVTVChQdXNoQVBJLCBmaXJlUHVzaEV2ZW50KQogCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZwdXNoTWVzc2FnZVByb2Nlc3NlZCk7CiAgICAgRVhQRUNUX0ZBTFNFKHB1c2hNZXNzYWdl
U3VjY2Vzc2Z1bCk7CisgICAgRVhQRUNUX0VRKGdldFNpbGVudFB1c2hDb3VudChbY29uZmlndXJh
dGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSwgdXJsKSwgMSk7CisKKyAgICAvLyBUcnkgc2VuZGluZyBh
bm90aGVyIHNpbGVudCBwdXNoIGFmdGVyIHRoZSBuZXR3b3JrIHByb2Nlc3MgZmx1c2hlcyBzdGF0
ZSBhbmQgZGllcyB0byBtYWtlIHN1cmUgdGhlIGNvdW50IGlzIHBlcnNpc3RlZC4KKyAgICBfX2Js
b2NrIGJvb2wgZGlkU3VzcGVuZCA9IGZhbHNlOworICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRl
RGF0YVN0b3JlXSBfc2VuZE5ldHdvcmtQcm9jZXNzUHJlcGFyZVRvU3VzcGVuZDpeKCkgeworICAg
ICAgICBkaWRTdXNwZW5kID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRpZFN1c3BlbmQpOworICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3Jl
XSBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworCisgICAgcHVzaE1lc3NhZ2VQcm9jZXNzZWQg
PSBmYWxzZTsKKyAgICBwdXNoTWVzc2FnZVN1Y2Nlc3NmdWwgPSBmYWxzZTsKKyAgICBtZXNzYWdl
ID0gQCJyZWplY3QiOworICAgIFtbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSBfcHJv
Y2Vzc1B1c2hNZXNzYWdlOm1lc3NhZ2VEaWN0aW9uYXJ5KFttZXNzYWdlIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgW3NlcnZlci5yZXF1ZXN0KCkgVVJMXSkgY29tcGxl
dGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgeworICAgICAgICBwdXNoTWVzc2FnZVN1Y2Nlc3Nm
dWwgPSByZXN1bHQ7CisgICAgICAgIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsK
KyAgICBFWFBFQ1RfRkFMU0UocHVzaE1lc3NhZ2VTdWNjZXNzZnVsKTsKKyAgICBFWFBFQ1RfRVEo
Z2V0U2lsZW50UHVzaENvdW50KFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdLCB1cmwp
LCAyKTsKKworICAgIC8vIFZpc2l0aW5nIHRoZSBwYWdlIGFnYWluIHNob3VsZCBjbGVhciB0aGUg
c2lsZW50IHB1c2ggY291bnQuCisgICAgZG9uZSA9IGZhbHNlOworICAgIGV4cGVjdGVkTWVzc2Fn
ZSA9ICJSZWFkeSI7CisgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcyIGxvYWRSZXF1ZXN0OnNlcnZl
ci5yZXF1ZXN0KCldOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAg
ICBFWFBFQ1RfRVEoZ2V0U2lsZW50UHVzaENvdW50KFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRh
U3RvcmVdLCB1cmwpLCBOU05vdEZvdW5kKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBj
bGVhcmVkIHNpbGVudCBwdXNoIGNvdW50IHdhcyBwZXJzaXN0ZWQuCisgICAgW1tjb25maWd1cmF0
aW9uIHdlYnNpdGVEYXRhU3RvcmVdIF90ZXJtaW5hdGVOZXR3b3JrUHJvY2Vzc107CisgICAgRVhQ
RUNUX0VRKGdldFNpbGVudFB1c2hDb3VudChbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3Jl
XSwgdXJsKSwgTlNOb3RGb3VuZCk7CiAKICAgICBjbGVhcldlYnNpdGVEYXRhU3RvcmUoW2NvbmZp
Z3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNlV29ya2VyQmFzaWMubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQppbmRl
eCA1M2RjYjM5NWUxNWZiMTE0YmMxZTM2ZTNlMGNkMzMzMmFiZmJkMzZjLi5kNjVkZjY4ODQ3NTdj
MWQzNTY5Y2EyODMyNGM4NTk0MjJiOWZlMDg1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NlcnZpY2VXb3JrZXJCYXNpYy5tbQpAQCAt
NTgsNyArNTgsNyBAQAogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXN0YXRpYyBOU1N0cmluZyAqc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkZpbGVuYW1lID0gQCJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucy04LnNxbGl0
ZTMiOworc3RhdGljIE5TU3RyaW5nICpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRmlsZW5hbWUg
PSBAIlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zLTkuc3FsaXRlMyI7CiBzdGF0aWMgYm9vbCBz
ZXJ2aWNlV29ya2VyR2xvYmFsT2JqZWN0SXNBdmFpbGFibGU7CiAKIHN0YXRpYyBTdHJpbmcgZXhw
ZWN0ZWRNZXNzYWdlOwo=
</data>
<flag name="commit-queue"
          id="479372"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>