<?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>198090</bug_id>
          
          <creation_ts>2019-05-21 15:34:04 -0700</creation_ts>
          <short_desc>API Test landed in r245540 [Mac WK2] TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky failure</short_desc>
          <delta_ts>2019-05-31 10:06:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=197636</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=198423</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Roberts">sroberts</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jlewis3</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1538017</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-05-21 15:34:04 -0700</bug_when>
    <thetext>API test added in https://trac.webkit.org/changeset/245540/webkit

TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky failure on Mac Release WK2 testers

https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/4242/steps/run-api-tests/logs/stdio

Reproduced with:

run-api-tests TestWebKitAPI.WKWebView.LocalStorageProcessCrashes --debug --iter30

    TestWebKitAPI.WKWebView.LocalStorageProcessCrashes
        _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
        
        /Volumes/Data/slave/mojave-release/build/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:91
        Value of: [@&quot;storage&quot; isEqualToString:result]
          Actual: false
        Expected: true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538018</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-21 15:34:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/51003644&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538122</commentid>
    <comment_count>2</comment_count>
      <attachid>370382</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-21 22:26:52 -0700</bug_when>
    <thetext>Created attachment 370382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538126</commentid>
    <comment_count>3</comment_count>
      <attachid>370382</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-05-21 23:56:50 -0700</bug_when>
    <thetext>Comment on attachment 370382
Patch

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

&gt; Source/WebKit/ChangeLog:11
&gt; +        thread and main thread does not know how to decode it.

Looking at existing worker queue code, we would probably need to register it at network process start time to make it work.
That would probably be a major change.

Another approach might be to send a sync IPC when recovering from the network process crash.
This might be a smaller change and we anyway want to change how we handle crash recovery.

But all of this would strengthen the fact that one IPC connection is related to one session ID and we want to move away from this.
(Or we would need to do the sessionID dispatching in the background thread).
It is safer and simpler to rely on main thread IPC and do the dispatching ourselves, even though this will be less efficient.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:714
&gt; +    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), &amp;connection, storageMapID, storageNamespaceID, securityOriginData = WTFMove(securityOriginData)]() mutable {

In theory we should isolatedCopy() securityOriginData.
Also, what makes sure connection is alive when dispatched?
Shouldn&apos;t we ref it or just capture its uniqueID?

Ditto elsewhere for all string related parameters.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:852
&gt; +        connection.send(Messages::StorageAreaMap::DidGetValues(storageMapSeed), storageMapID);

We receive a completionHandler from the main thread.
We should probably call it from the main thread, which would mean isolatedCopy storageArea-&gt;items().
Since we use connection, we need to ref it as well.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:-980
&gt; -    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), &amp;connection, &amp;decoder] {

This code is removed, which is probably nice.
How can we be sure that connection and decoder are kept alive after dispatching to the queue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538195</commentid>
    <comment_count>4</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 08:54:43 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #3)
&gt; Comment on attachment 370382 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=370382&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; +        thread and main thread does not know how to decode it.
&gt; 
&gt; Looking at existing worker queue code, we would probably need to register it
&gt; at network process start time to make it work.
&gt; That would probably be a major change.
&gt; 
&gt; Another approach might be to send a sync IPC when recovering from the
&gt; network process crash.
&gt; This might be a smaller change and we anyway want to change how we handle
&gt; crash recovery.
&gt; 
&gt; But all of this would strengthen the fact that one IPC connection is related
&gt; to one session ID and we want to move away from this.
&gt; (Or we would need to do the sessionID dispatching in the background thread).
&gt; It is safer and simpler to rely on main thread IPC and do the dispatching
&gt; ourselves, even though this will be less efficient.
&gt; 
Agree, will add this explanation to change log.

&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:714
&gt; &gt; +    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), &amp;connection, storageMapID, storageNamespaceID, securityOriginData = WTFMove(securityOriginData)]() mutable {
&gt; 
&gt; In theory we should isolatedCopy() securityOriginData.
&gt; Also, what makes sure connection is alive when dispatched?
&gt; Shouldn&apos;t we ref it or just capture its uniqueID?
&gt; 
&gt; Ditto elsewhere for all string related parameters.
&gt; 
Yes, we should use connection&apos;s uniqueID and isolatedCopy(). Will change.

&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:852
&gt; &gt; +        connection.send(Messages::StorageAreaMap::DidGetValues(storageMapSeed), storageMapID);
&gt; 
&gt; We receive a completionHandler from the main thread.
&gt; We should probably call it from the main thread, which would mean
&gt; isolatedCopy storageArea-&gt;items().
&gt; Since we use connection, we need to ref it as well.
&gt; 
True. Will change.

&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:-980
&gt; &gt; -    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), &amp;connection, &amp;decoder] {
&gt; 
&gt; This code is removed, which is probably nice.
&gt; How can we be sure that connection and decoder are kept alive after
&gt; dispatching to the queue?

We cannot, especially decoder which is not copyable and will be released as soon as the message is dispatched to NetworkConnectionToWebProcess. So we have to make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538282</commentid>
    <comment_count>5</comment_count>
      <attachid>370424</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 11:04:34 -0700</bug_when>
    <thetext>Created attachment 370424
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538297</commentid>
    <comment_count>6</comment_count>
      <attachid>370430</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 11:44:51 -0700</bug_when>
    <thetext>Created attachment 370430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538318</commentid>
    <comment_count>7</comment_count>
      <attachid>370430</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-05-22 12:53:21 -0700</bug_when>
    <thetext>Comment on attachment 370430
Patch

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

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:842
&gt; +    RunLoop::main().dispatch([this, protectedThis = makeRef(*this), &amp;connection, storageMapID, items = crossThreadCopy(items)] {

We should ref here.
It might be simpler to move the completion handler to background thread then main frame instead of having this map.
In that case, we need to ensure the handler is destroyed in main thread.

If sticking with the map, the key should be an incrémented integer instead of a 
There might be in theory more than one getValues call from a given connection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538346</commentid>
    <comment_count>8</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 13:32:04 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #7)
&gt; Comment on attachment 370430 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=370430&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:842
&gt; &gt; +    RunLoop::main().dispatch([this, protectedThis = makeRef(*this), &amp;connection, storageMapID, items = crossThreadCopy(items)] {
&gt; 
&gt; We should ref here.
&gt; It might be simpler to move the completion handler to background thread then
&gt; main frame instead of having this map.
&gt; In that case, we need to ensure the handler is destroyed in main thread.
&gt; 
&gt; If sticking with the map, the key should be an incrémented integer instead
&gt; of a 
&gt; There might be in theory more than one getValues call from a given
&gt; connection.

Okay, changed to use move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538348</commentid>
    <comment_count>9</comment_count>
      <attachid>370439</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 13:34:11 -0700</bug_when>
    <thetext>Created attachment 370439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538357</commentid>
    <comment_count>10</comment_count>
      <attachid>370439</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-05-22 13:56:53 -0700</bug_when>
    <thetext>Comment on attachment 370439
Patch

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

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:741
&gt; +    m_queue-&gt;dispatch([this, protectedThis = makeRef(*this), &amp;connection, storageMapID, storageNamespaceID, topLevelOriginData = topLevelOriginData.isolatedCopy(), origin = origin.isolatedCopy()]() mutable {

s/&amp;connection/connectionID = connection-&gt;uniqueID()/

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:839
&gt; +void StorageManager::didGetValues(IPC::Connection&amp; connection, uint64_t storageMapID, const HashMap&lt;String, String&gt;&amp; items, GetValuesCallback&amp;&amp; completionHandler)

No need for connection.
No need for this as well, this can be a static free function.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:859
&gt; +        connection-&gt;send(Messages::StorageAreaMap::DidGetValues(storageMapSeed), storageMapID);

This is a strange design to have both a completion handler and sending in some cases another IPC message.
It might be interesting to try simplifying this in a follow-up patch.

For instance, why do we not send back such message in the ephemeral case?
Or could we not send back storageMapSeed in the completion handler as an optional value?

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:925
&gt; +        connection-&gt;send(Messages::StorageAreaMap::DidClear(storageMapSeed), storageMapID);

It seems strange to not send back StorageAreaMap::DidClear in the ephemeral case since we are clearing some data apparently.
Even in the case where the page has been closed, it seems good practice to send back some information that the task is completed.
We could modernize it with Async IPC reply, in which case we would need to call the completion handler in every case.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.h:46
&gt; +typedef CompletionHandler&lt;void(const HashMap&lt;String, String&gt;&amp;)&gt; GetValuesCallback;

&quot;using&quot; is the preferred way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538377</commentid>
    <comment_count>11</comment_count>
      <attachid>370445</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 14:24:57 -0700</bug_when>
    <thetext>Created attachment 370445
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538391</commentid>
    <comment_count>12</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-05-22 14:56:45 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:859
&gt; &gt; +        connection-&gt;send(Messages::StorageAreaMap::DidGetValues(storageMapSeed), storageMapID);
&gt; 
&gt; This is a strange design to have both a completion handler and sending in
&gt; some cases another IPC message.
&gt; It might be interesting to try simplifying this in a follow-up patch.
&gt; 
&gt; For instance, why do we not send back such message in the ephemeral case?
&gt; Or could we not send back storageMapSeed in the completion handler as an
&gt; optional value?
&gt; 

I also don&apos;t understand why we need to send another didGetValues message here. Should probably either making the getValues message async or removing didGetValues message.

&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:925
&gt; &gt; +        connection-&gt;send(Messages::StorageAreaMap::DidClear(storageMapSeed), storageMapID);
&gt; 
&gt; It seems strange to not send back StorageAreaMap::DidClear in the ephemeral
&gt; case since we are clearing some data apparently.
&gt; Even in the case where the page has been closed, it seems good practice to
&gt; send back some information that the task is completed.
&gt; We could modernize it with Async IPC reply, in which case we would need to
&gt; call the completion handler in every case.
&gt; 

Yes, web process may need to be notified about the result to better keep sync with network process. We used to not care much about synchronization of session storage between processes because session storage can disappear when web process shuts down. This may not be the case with PSON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538396</commentid>
    <comment_count>13</comment_count>
      <attachid>370445</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-22 15:03:57 -0700</bug_when>
    <thetext>Comment on attachment 370445
Patch for landing

Clearing flags on attachment: 370445

Committed r245649: &lt;https://trac.webkit.org/changeset/245649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1538397</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-22 15:03:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370382</attachid>
            <date>2019-05-21 22:26:52 -0700</date>
            <delta_ts>2019-05-22 11:04:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198090-20190521222651.patch</filename>
            <type>text/plain</type>
            <size>29853</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ3NTRjYzlkMTEzMDZiYjhi
NmQ5OWVlOGEyMjdiOGMzYjVhMzVlZWEuLjJlNGJjYzJkNDczNTIxMDgzY2FjNDI1MjliNzdkNWY0
NmE1ODcwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTktMDUtMjEgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIy
NDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nl
c3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAw
MzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBE
byBub3QgZGlzcGF0Y2ggbWVzc2FnZSB0byBXb3JrUXVldWUgb2YgU3RvcmFnZU1hbmFnZXIgYmVj
YXVzZSBtZXNzYWdlcyBjYW4gYmUgcmVjZWl2ZWQgYmVmb3JlIFdvcmtRdWV1ZSBpcyAKKyAgICAg
ICAgYWRkZWQgdG8gY29ubmVjdGlvbi4gSWYgYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGJlZm9yZSBt
ZXNzYWdlIHJlY2VpdmVyIGlzIGFkZGVkLCBpdCB3b3VsZCBiZSBkaXNwYXRjaGVkIHRvIG1haW4g
CisgICAgICAgIHRocmVhZCBhbmQgbWFpbiB0aHJlYWQgZG9lcyBub3Qga25vdyBob3cgdG8gZGVj
b2RlIGl0LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjp3ZWJQYWdlV2FzQWRkZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdl
cjo6cHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdlTWFwKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VN
YW5hZ2VyOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0
ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpT
dG9yYWdlTWFuYWdlcjo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoU3luY01lc3Nh
Z2VUb1F1ZXVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmg6CisKIDIwMTktMDUtMjEgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNhbmRib3ggdmlvbGF0aW9uIGlzIG1ha2luZyB0aGUg
V2ViQ29udGVudCBwcm9jZXNzIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4
IDE4ZGIwZGE4Njk4Y2ZmMDIwOTk1OTAzZjkzNzkxYTc0ZTI2MzI2ZjIuLjNkNzFmOGY2YjFiNmMy
NmRiMDU1MGY4OGFhNWVlMTE0NDIxMGE5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW8KIAogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1f
bmV0d29ya1Byb2Nlc3MtPm5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7
Ci0gICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpc3BhdGNoTWVzc2FnZVRv
UXVldWUoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdl
TWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lCiAKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBtX25ldHdvcmtQcm9jZXNzLT5uZXR3b3JrU2Vz
c2lvbkJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKSkgewotICAgICAgICAgICAgc2Vzc2lvbi0+c3Rv
cmFnZU1hbmFnZXIoKS5kaXNwYXRjaFN5bmNNZXNzYWdlVG9RdWV1ZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseSk7CisgICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGJjZDVhYjZjMDI4ZTk4YzI1NTI5NzcxMDcx
ZmYwZWZhYjM2ZmNiYWEuLmE1ZDZmNWNmY2M3YzQzMjVlOWFkNzMxMzZmMzZmZGEyOTlkMWRlMGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC0yNjM1LDcgKzI2MzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp3ZWJQYWdlV2FzQWRk
ZWQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRAogCiAgICAgYXV0
byBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCk7CiAgICAgbV9zZXNzaW9uQnlD
b25uZWN0aW9uLmVuc3VyZShjb25uZWN0aW9uSUQsIFsmXSgpIHsKLSAgICAgICAgc3RvcmFnZU1h
bmFnZXIucHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICAgICAgICAgcmV0
dXJuIHNlc3Npb25JRDsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggOTcxNTc4
NzdlODQwYmVjZDI1OGMwNmU2OTdhNGRlOGY2YzAyMzMxNi4uN2Y2OWI1NWJjMDQxYWI2YTFiZTli
MTI1OTM4NDA1M2QzNWI1NTE4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC01NTEsMTUgKzU1
MSw4IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Uo
dWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFn
ZU1hbmFnZXI6OnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24uYWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdl
dCgpLCB0aGlzKTsKLX0KLQogdm9pZCBTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc0RpZENsb3NlQ29u
bmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCiB7Ci0gICAgY29ubmVjdGlvbi5y
ZW1vdmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwotCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51
bmlxdWVJRCgpXSgpIG11dGFibGUgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90Pj4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBh
aXJzVG9SZW1vdmU7CiAgICAgICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VB
cmVhc0J5Q29ubmVjdGlvbikgewpAQCAtNzE4LDIxMyArNzExLDIxMiBAQCB2b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6UwogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXAo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2
NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmln
aW5EYXRhKQogewotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgY2hlY2sgaWYgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA0OCBpcyBkb25lLgotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVCghbV9pc0VwaGVtZXJhbCk7Ci0gICAg
c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9u
QW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgJmNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlELCBzZWN1
cml0eU9yaWdpbkRhdGEgPSBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSldKCkgbXV0YWJsZSB7
CisgICAgICAgIEFTU0VSVCghbV9pc0VwaGVtZXJhbCk7CisgICAgICAgIHN0ZDo6cGFpcjxJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJ
RFBhaXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOwogCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQoKEhhc2hNYXA8
c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0
b3JhZ2VBcmVhPj46OmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKSk7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAg
ICAgIEFTU0VSVCgoSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwg
dWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+Pjo6aXNWYWxpZEtleShjb25uZWN0aW9uQW5k
U3RvcmFnZU1hcElEUGFpcikpKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gbV9zdG9yYWdlQXJlYXNC
eUNvbm5lY3Rpb24uYWRkKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyLCBudWxscHRyKTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoY29u
bmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIsIG51bGxwdHIpOwogCi0gICAgLy8gRklYTUU6IFRo
ZXNlIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2tzLgotICAgIEFTU0VSVChyZXN1bHQuaXNOZXdF
bnRyeSk7Ci0gICAgQVNTRVJUKChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TG9jYWxTdG9yYWdl
TmFtZXNwYWNlPj46OmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSkpOworICAgICAgICAv
LyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVja3MuCisgICAgICAgIEFTU0VS
VChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEFTU0VSVCgoSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+Ojppc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3Bh
Y2VJRCkpKTsKIAotICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFtZXNw
YWNlID0gZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZUlE
KTsKKyAgICAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2Ug
PSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQpOwog
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NF
UlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZSk7CiAKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRP
ckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKSk7Ci0gICAgc3Rv
cmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElE
KTsKKyAgICAgICAgYXV0byBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0
T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSkpOworICAgICAg
ICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdl
TWFwSUQpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUoc3RvcmFnZUFy
ZWEpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShzdG9yYWdlQXJl
YSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExv
Y2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEm
JiB0b3BMZXZlbE9yaWdpbkRhdGEsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIG9yaWdpbikKIHsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0
aW9uLmlzVmFsaWRLZXkoeyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9KSk7
Ci0KLSAgICAvLyBTZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHNlc3Npb24gc3RvcmFnZSBmb3IgdGhp
cyBjb25uZWN0aW9uL29yaWdpbiBjb21iby4KLSAgICAvLyBJZiBzbywgdXBkYXRlIHRoZSBtYXAg
d2l0aCB0aGUgbmV3IElELCBvdGhlcndpc2Uga2VlcCBvbiB0cnVja2luZy4KLSAgICBmb3IgKGF1
dG8gaXQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5iZWdpbigpLCBlbmQgPSBtX3N0b3Jh
Z2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
IChpdC0+a2V5LmZpcnN0ICE9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBSZWY8U3RvcmFnZUFyZWE+IGFyZWEgPSAqaXQtPnZhbHVlOwotICAg
ICAgICBpZiAoIWFyZWEtPmlzU2Vzc2lvblN0b3JhZ2UoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoIW9yaWdpbi5zZWN1cml0eU9yaWdpbigpLT5pc1NhbWVTY2hlbWVIb3N0
UG9ydChhcmVhLT5zZWN1cml0eU9yaWdpbigpLnNlY3VyaXR5T3JpZ2luKCkuZ2V0KCkpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKLSAgICAgICAgLy8gSWYgdGhlIHN0b3JhZ2VNYXBJ
RCB1c2VkIGFzIGtleSBpbiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbiBpcyBubyBsb25nZXIg
b25lIG9mIHRoZSBTdG9yYWdlQXJlYSdzIGxpc3RlbmVycywgdGhlbiB0aGlzIG1lYW5zCi0gICAg
ICAgIC8vIHRoYXQgZGVzdHJveVN0b3JhZ2VNYXAoKSB3YXMgYWxyZWFkeSBjYWxsZWQgZm9yIHRo
YXQgc3RvcmFnZU1hcElEIGJ1dCBpdCBkZWNpZGVkIG5vdCB0byByZW1vdmUgaXQgZnJvbSBtX3N0
b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbgotICAgICAgICAvLyBzbyB0aGF0IHdlIGNvdWxkIHJldXNl
IGl0IGxhdGVyIG9uIGZvciB0aGUgc2FtZSBjb25uZWN0aW9uL29yaWdpbiBjb21iby4gSW4gdGhp
cyBjYXNlLCBpdCBpcyBzYWZlIHRvIHJlbW92ZSB0aGUgcHJldmlvdXMKLSAgICAgICAgLy8gc3Rv
cmFnZU1hcElEIGZyb20gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uCi0gICAgICAgIGlmICgh
YXJlYS0+aGFzTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpdC0+a2V5LnNlY29uZCkp
Ci0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoaXQpOwotICAg
ICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25uZWN0aW9uLnVuaXF1ZUlE
KCksIHN0b3JhZ2VNYXBJRCB9LCBXVEZNb3ZlKGFyZWEpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCAmY29ubmVjdGlvbiwgc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlSUQsIHRv
cExldmVsT3JpZ2luRGF0YSA9IFdURk1vdmUodG9wTGV2ZWxPcmlnaW5EYXRhKSwgb3JpZ2luID0g
V1RGTW92ZShvcmlnaW4pXSgpIG11dGFibGUgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElE
IH0pKTsKKworICAgICAgICAvLyBTZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHNlc3Npb24gc3RvcmFn
ZSBmb3IgdGhpcyBjb25uZWN0aW9uL29yaWdpbiBjb21iby4KKyAgICAgICAgLy8gSWYgc28sIHVw
ZGF0ZSB0aGUgbWFwIHdpdGggdGhlIG5ldyBJRCwgb3RoZXJ3aXNlIGtlZXAgb24gdHJ1Y2tpbmcu
CisgICAgICAgIGZvciAoYXV0byBpdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmJlZ2lu
KCksIGVuZCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+a2V5LmZpcnN0ICE9IGNvbm5lY3Rpb24udW5pcXVl
SUQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJlZjxTdG9yYWdl
QXJlYT4gYXJlYSA9ICppdC0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWFyZWEtPmlzU2Vzc2lv
blN0b3JhZ2UoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgh
b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCktPmlzU2FtZVNjaGVtZUhvc3RQb3J0KGFyZWEtPnNlY3Vy
aXR5T3JpZ2luKCkuc2VjdXJpdHlPcmlnaW4oKS5nZXQoKSkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBhcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1ZUlE
KCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgICAgICAvLyBJZiB0aGUgc3RvcmFnZU1hcElEIHVz
ZWQgYXMga2V5IGluIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uIGlzIG5vIGxvbmdlciBvbmUg
b2YgdGhlIFN0b3JhZ2VBcmVhJ3MgbGlzdGVuZXJzLCB0aGVuIHRoaXMgbWVhbnMKKyAgICAgICAg
ICAgIC8vIHRoYXQgZGVzdHJveVN0b3JhZ2VNYXAoKSB3YXMgYWxyZWFkeSBjYWxsZWQgZm9yIHRo
YXQgc3RvcmFnZU1hcElEIGJ1dCBpdCBkZWNpZGVkIG5vdCB0byByZW1vdmUgaXQgZnJvbSBtX3N0
b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbgorICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBjb3VsZCBy
ZXVzZSBpdCBsYXRlciBvbiBmb3IgdGhlIHNhbWUgY29ubmVjdGlvbi9vcmlnaW4gY29tYm8uIElu
IHRoaXMgY2FzZSwgaXQgaXMgc2FmZSB0byByZW1vdmUgdGhlIHByZXZpb3VzCisgICAgICAgICAg
ICAvLyBzdG9yYWdlTWFwSUQgZnJvbSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi4KKyAgICAg
ICAgICAgIGlmICghYXJlYS0+aGFzTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBpdC0+
a2V5LnNlY29uZCkpCisgICAgICAgICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24u
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmFkZCh7
IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0sIFdURk1vdmUoYXJlYSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBhdXRvJiBzbG90ID0gbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdl
TWFwSUQgfSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvJiBzbG90ID0g
bV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbi51bmlxdWVJRCgpLCBz
dG9yYWdlTWFwSUQgfSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQoIXNsb3QpOworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBB
U1NFUlQoIXNsb3QpOwogCi0gICAgYXV0byogdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
ID0gZ2V0T3JDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVz
cGFjZUlELCBXVEZNb3ZlKHRvcExldmVsT3JpZ2luRGF0YSkpOworICAgICAgICBhdXRvKiB0cmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZVRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQsIFdURk1vdmUodG9wTGV2ZWxPcmlnaW5E
YXRhKSk7CiAKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUob3JpZ2luKSk7Ci0gICAgc3Rv
cmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElE
KTsKKyAgICAgICAgYXV0byBzdG9yYWdlQXJlYSA9IHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKG9yaWdpbikpOworICAgICAgICBz
dG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFw
SUQpOwogCi0gICAgc2xvdCA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOworICAgICAgICBzbG90ID0g
V1RGTW92ZShzdG9yYWdlQXJlYSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6
OmNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWlu
dDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5
T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgIG1fZXBoZW1l
cmFsU3RvcmFnZS5hZGQoc2VjdXJpdHlPcmlnaW5EYXRhLCBXZWJDb3JlOjpTdG9yYWdlTWFwOjpj
cmVhdGUobG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXMpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgot
ICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VO
YW1lc3BhY2VJRCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1l
c3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEp
XSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAgICAgICAgICAg
bV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0b3Jh
Z2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFtZXNw
YWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpOwogCi0gICAgU2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlID0gbV9zZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZXMuZ2V0KHN0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgaWYgKCFzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSkgewotICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29taW5nIG1lc3Nh
Z2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3JhZ2UgZm9yIGEg
d2ViIHBhZ2UKLSAgICAgICAgLy8gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwganVzdCBp
Z25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIFNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA9IG1fc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBpZiAoIXNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29taW5n
IG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3JhZ2Ug
Zm9yIGEgd2ViIHBhZ2UKKyAgICAgICAgICAgIC8vIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9z
ZWQsIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVCht
X3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBzdG9yYWdlTWFwSUQgfSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rp
b24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0pKTsK
IAotICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQo
eyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNr
LgotICAgIEFTU0VSVCghc2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZS0+YWxsb3dlZENvbm5lY3Rpb25zKCkuY29udGFpbnMoY29ubmVjdGlvbi51bmlx
dWVJRCgpKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hl
Y2suCisgICAgICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxsb3dlZENvbm5l
Y3Rpb25zKCkuY29udGFpbnMoY29ubmVjdGlvbi51bmlxdWVJRCgpKSk7CiAKLSAgICBhdXRvIHN0
b3JhZ2VBcmVhID0gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFy
ZWEoV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRv
IHN0b3JhZ2VBcmVhID0gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFn
ZUFyZWEoV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEpKTsKKyAgICAgICAgc3RvcmFnZUFyZWEt
PmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKIAotICAg
IHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgc2xvdCA9IFdURk1vdmUoc3Rv
cmFnZUFyZWEpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3Rv
cmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJ
RCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0ZDo6cGFpcjxJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZjb25u
ZWN0aW9uLCBzdG9yYWdlTWFwSURdKCkgbXV0YWJsZSB7CisgICAgICAgIHN0ZDo6cGFpcjxJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJ
RFBhaXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOwogCi0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQobV9zdG9yYWdl
QXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFp
cikpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgor
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleShjb25u
ZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcikpOwogCi0gICAgYXV0byBpdCA9IG1fc3RvcmFnZUFy
ZWFzQnlDb25uZWN0aW9uLmZpbmQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOwotICAg
IGlmIChpdCA9PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKSkgewotICAgICAgICAv
LyBUaGUgY29ubmVjdGlvbiBoYXMgYmVlbiByZW1vdmVkIGJlY2F1c2UgdGhlIGxhc3QgcGFnZSB3
YXMgY2xvc2VkLgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBhdXRvIGl0ID0gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZmluZChjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFp
cik7CisgICAgICAgIGlmIChpdCA9PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKSkg
eworICAgICAgICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBiZWNhdXNl
IHRoZSBsYXN0IHBhZ2Ugd2FzIGNsb3NlZC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogCi0gICAgaXQtPnZhbHVlLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGl0LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOwogCi0gICAgLy8gRG9uJ3QgcmVtb3ZlIHNl
c3Npb24gc3RvcmFnZSBtYXBzLiBUaGUgd2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhw
ZWN0IHRoZSBkYXRhIHRvIHN0aWxsIGJlIGFyb3VuZC4KLSAgICBpZiAoaXQtPnZhbHVlLT5pc1Nl
c3Npb25TdG9yYWdlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRG9uJ3QgcmVtb3Zl
IHNlc3Npb24gc3RvcmFnZSBtYXBzLiBUaGUgd2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQg
ZXhwZWN0IHRoZSBkYXRhIHRvIHN0aWxsIGJlIGFyb3VuZC4KKyAgICAgICAgaWYgKGl0LT52YWx1
ZS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWly
KTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3ZlKGNvbm5lY3Rpb25B
bmRTdG9yYWdlTWFwSURQYWlyKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6
Z2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlmICghc3RvcmFnZUFyZWEp
IHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHN0
b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VNYXAtPml0ZW1z
KCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksICZjb25uZWN0aW9uLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBXVEZNb3ZlKHNlY3Vy
aXR5T3JpZ2luRGF0YSksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU1hcFNlZWQsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VN
YXBJRCk7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lz
RXBoZW1lcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBo
ZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VNYXAtPml0ZW1zKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZv
ciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgICAgIH0KLSAgICAgICAg
Ly8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxy
ZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKLSAgICB9Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihzdG9yYWdlQXJlYS0+
aXRlbXMoKSk7Ci0gICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6
RGlkR2V0VmFsdWVzKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoc3RvcmFnZUFyZWEtPml0ZW1zKCkpOworICAgICAgICBjb25uZWN0aW9u
LnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRHZXRWYWx1ZXMoc3RvcmFnZU1hcFNl
ZWQpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpz
ZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2
NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdl
QXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5
T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICBzdG9yYWdlTWFw
LT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgJmNv
bm5lY3Rpb24sIHNlY3VyaXR5T3JpZ2luRGF0YSA9IFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRh
KSwgc3RvcmFnZU1hcElELCBzb3VyY2VTdG9yYWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5
LCB2YWx1ZSwgdXJsU3RyaW5nXSgpIG11dGFibGUgeworICAgICAgICBhdXRvKiBzdG9yYWdlQXJl
YSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBp
ZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0
KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZh
bHVlOworICAgICAgICAgICAgICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOworICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90
YUV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBw
YWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KIAotICAgIGJvb2wgcXVvdGFFcnJvcjsKLSAgICBzdG9yYWdlQXJlYS0+c2V0
SXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdmFs
dWUsIHVybFN0cmluZywgcXVvdGFFcnJvcik7Ci0gICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2Vz
OjpTdG9yYWdlQXJlYU1hcDo6RGlkU2V0SXRlbShzdG9yYWdlTWFwU2VlZCwga2V5LCBxdW90YUVy
cm9yKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgYm9vbCBxdW90YUVycm9yOworICAgICAgICBz
dG9yYWdlQXJlYS0+c2V0SXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIGtleSwgdmFsdWUsIHVybFN0cmluZywgcXVvdGFFcnJvcik7CisgICAgICAgIGNvbm5l
Y3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1h
cFNlZWQsIGtleSwgcXVvdGFFcnJvciksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW1zKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRl
bXMpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoYXV0byog
c3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKSkK
LSAgICAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW1zKGl0ZW1zKTsKKyAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmY29ubmVjdGlvbiwg
c3RvcmFnZU1hcElELCBpdGVtc10oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0b3Jh
Z2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCkpCisgICAg
ICAgICAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbXMoaXRlbXMpOworICAgIH0pOwogfQogCiB2b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdl
QXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5
T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmY29u
bmVjdGlvbiwgc2VjdXJpdHlPcmlnaW5EYXRhID0gV1RGTW92ZShzZWN1cml0eU9yaWdpbkRhdGEp
LCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCBrZXks
IHVybFN0cmluZ10oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5k
U3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9y
YWdlQXJlYSkgeworICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0
eU9yaWdpbkRhdGEpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGlzIGlz
IGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4g
Y2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgotICAgICAgICByZXR1cm47Ci0gICAgfQog
Ci0gICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzb3Vy
Y2VTdG9yYWdlQXJlYUlELCBrZXksIHVybFN0cmluZyk7Ci0gICAgY29ubmVjdGlvbi5zZW5kKE1l
c3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkUmVtb3ZlSXRlbShzdG9yYWdlTWFwU2VlZCwga2V5
KSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIHVybFN0cmluZyk7Cisg
ICAgICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92
ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewot
ICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkKLSAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFn
ZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Np
b24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4g
SWdub3JlIGl0LgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzZWN1
cml0eU9yaWdpbkRhdGEgPSBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSksIHN0b3JhZ2VNYXBJ
RCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIHVybFN0cmluZ10oKSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVj
dGlvbiwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAgICAg
ICAgICAgaWYgKG1faXNFcGhlbWVyYWwpCisgICAgICAgICAgICAgICAgbV9lcGhlbWVyYWxTdG9y
YWdlLnJlbW92ZShzZWN1cml0eU9yaWdpbkRhdGEpOworICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNs
b3NlZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBz
dG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJl
YUlELCB1cmxTdHJpbmcpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFy
ZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAg
c3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFy
ZWFJRCwgdXJsU3RyaW5nKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZW5kKE1lc3NhZ2VzOjpTdG9y
YWdlQXJlYU1hcDo6RGlkQ2xlYXIoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOworICAg
IH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjp3YWl0VW50aWxXcml0ZXNGaW5pc2hlZCgp
CkBAIC05NzUsMTggKzk2Nyw0IEBAIFN0b3JhZ2VNYW5hZ2VyOjpUcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UqIFN0b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0ZVRyYW5zCiAgICAgfSkuaXRl
cmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaE1l
c3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCAmZGVjb2Rlcl0gewotICAgICAgICBkaWRSZWNl
aXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgJmNvbm5lY3Rpb24sICZkZWNvZGVyLCByZXBs
eUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2RlcildICgpIG11dGFibGUgewotICAgICAgICBk
aWRSZWNlaXZlU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsK
LSAgICB9KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4
IDRhNWI3MTg2ZjU4MzJhODFmNjcwMDZmMzJiZGUzYzVlNDRjNTE5NmUuLjYyYjE1OTU0OTA2Nzc3
ZjZmZDk5MzZhOWJmNmRiYmE5NmQ0YzkxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCkBAIC01NCw3ICs1
NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbG93ZWRTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZUNvbm5lY3Rpb24odWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBJUEM6OkNvbm5lY3Rp
b24mKTsKICAgICB2b2lkIGNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3Rv
cmFnZU5hbWVzcGFjZUlELCB1aW50NjRfdCBuZXdTdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0gICAg
dm9pZCBwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHZv
aWQgcHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lk
IHdhaXRVbnRpbFdyaXRlc0ZpbmlzaGVkKCk7CiAKQEAgLTcwLDE2ICs2OSwxMyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdldExvY2FsU3RvcmFnZU9yaWdpbkRldGFpbHMoRnVuY3Rpb248dm9pZChW
ZWN0b3I8TG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOjpPcmlnaW5EZXRhaWxzPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZVRvUXVldWUoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7Ci0gICAgdm9pZCBkaXNwYXRjaFN5bmNNZXNz
YWdlVG9RdWV1ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7Ci0K
ICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlci4KICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29k
ZXIpIG92ZXJyaWRlOwogCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFN0b3JhZ2VNYW5hZ2VyKGNv
bnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKKwogICAgIC8vIE1lc3NhZ2UgaGFu
ZGxlcnMuCiAgICAgdm9pZCBjcmVhdGVMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKICAgICB2b2lkIGNyZWF0ZVRyYW5zaWVudExvY2Fs
U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2
NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgdG9w
TGV2ZWxPcmlnaW5EYXRhLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJik7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODFlYWJjNzVlMjgy
NzE1ZGZkOGM0ZWU5MzUzMzkwMzA2NjI4M2E3Zi4uYTNlOTdhZTQzMDNkOGE1NmRlOTg5OTZkNzY0
ZDJiOTRjNjI4MjA3NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA1LTIxICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgorCisgICAgICAgIEFQSSBUZXN0IGxhbmRlZCBpbiByMjQ1NTQwIFtNYWMg
V0syXSBUZXN0V2ViS2l0QVBJLldLV2ViVmlldy5Mb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcyBp
cyBhIGZsYWt5IGZhaWx1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODA5MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTEwMDM2NDQ+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViVmlldyB3YXMg
d3JvbmdseSBsb2FkZWQgbXVsdGlwbGUgdGltZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAgICAgICAo
VEVTVCk6CisKIDIwMTktMDUtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUgYnVpbGQgd2l0aCBIQVZFKEFD
Q0VTU0lCSUxJVFkpIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQppbmRl
eCAwYTVjNzAzMjRjYjdmZTE1MzNhMzlkZmRiMWRmYjZkNjVmYzA1MmQ1Li4wMmE1NWY0OTBjMDBl
ZWIwZDQwZDFjNzJiM2YwZGJjNmEzYzg4ODUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVu
Y2UubW0KQEAgLTY4LDIxICs2OCwxOCBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlUHJv
Y2Vzc0NyYXNoZXMpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgTlNVUkxSZXF1ZXN0
ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWwtc3RvcmFnZS1wcm9jZXNzLWNyYXNoZXMiIHdp
dGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKLSAgICAKKwogICAgIHJl
Y2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJl
cXVlc3RdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJsb2NhbDpzdG9yYWdlIiwgW2xhc3RTY3JpcHRN
ZXNzYWdlIGJvZHldKTsKLSAgICAKKwogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNl
OwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEo
QCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCiAgICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsK
LSAgICAKKwogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3
IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVj
ZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJOZXR3b3JrIFByb2Nl
c3MgQ3Jhc2hlZCIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370424</attachid>
            <date>2019-05-22 11:04:34 -0700</date>
            <delta_ts>2019-05-22 11:44:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198090-20190522110433.patch</filename>
            <type>text/plain</type>
            <size>32951</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ3NTRjYzlkMTEzMDZiYjhi
NmQ5OWVlOGEyMjdiOGMzYjVhMzVlZWEuLjY3MzBkYTgzYmFmYWRkODY1NDBhMTQ2ODI4ZDRmZTY4
ODFkNmZmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTktMDUtMjIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIy
NDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nl
c3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAw
MzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
ZSB1c2VkIHRvIGRpc3BhdGNoIFN0b3JhZ2VNYW5hZ2VyIG1lc3NhZ2UgdG8gU3RvcmFnZU1hbmFn
ZXIncyB3b3JrIHF1ZXVlLCB3aGljaCByZXF1aXJlZCBtZXNzYWdlIGhhbmRsZXIgdG8gYmUKKyAg
ICAgICAgYWRkZWQgdG8gcXVldWUgYmVmb3JlIHJlY2VpdmluZyBmaXJzdCBTdG9yYWdlTWFuYWdl
ciBtZXNzYWdlLCBvdGhlcndpc2UgbmV0d29yayBwcm9jZXNzIHdvdWxkIG5vdCBrbm93IGhvdyB0
bworICAgICAgICBkZWNvZGUgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgQWZ0ZXIgcjI0NTU0MCwg
d2hlbiBuZXRvcmsgcHJvY2VzcyBjcmFzaGVzIGFuZCBkb20gc3RvcmFnZSBpcyBhY2Nlc3NlZCBm
cm9tIHdlYiBwcm9jZXNzIGFmdGVyIHRoYXQsIHdlYiBwcm9jZXNzIAorICAgICAgICByZS1lc3Rh
Ymxpc2hlcyBpdHMgY29ubmVjdGlvbiB0byBuZXR3b3JrIHByb2Nlc3MsIGFza3MgbmV0d29yayBw
cm9jZXNzIHRvIGFkZCBtZXNzYWdlIGhhbmRsZXIsIGFuZCB0aGVuIHNlbmRzIAorICAgICAgICBT
dG9yYWdlTWFuYWdlciBtZXNzYWdlIGltbWVkaWF0ZWx5LiBCZWNhdXNlIHdvcmsgcXVldWUgbWVz
c2FnZSByZWNlaXZlciBpcyBhZGRlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGluIAorICAgICAg
ICBuZXR3b3JrIHByb2Nlc3MsIGl0IGlzIHBvc3NpYmxlIHRoZSBTdG9yYWdlTWFuYWdlciBtZXNz
YWdlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGF0LgorCisgICAgICAgIEEgc2FmZSBhbmQgZWFzeSBy
ZXNvbHV0aW9uIGlzIHRvIG5vdCBkaXNwYXRjaCBTdG9yYWdlTWFuYWdlciBtZXNzYWdlIHRvIHdv
cmsgcXVldWUsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byAKKyAgICAgICAgd2FpdCBmb3IgdGhl
IG1lc3NhZ2UgcmVjZWl2ZXIgdG8gYmUgYWRkZWQuIEhhbmRsaW5nIG1lc3NhZ2Ugb24gdGhlIG1h
aW4gdGhyZWFkIGFsc28gYWxsb3dzIHVzIHRvIHVudHlpbmcgdGhlIAorICAgICAgICBrbm90IHRo
YXQgYmluZHMgU3RvcmFnZU1hbmFnZXIgYW5kIGNvbm5lY3Rpb24sIHdoaWNoIG1heSBiZSBhIHBy
ZWZlcnJlZCBkZXNpZ24gaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6d2ViUGFnZVdhc0FkZGVkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnByb2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3Rv
cmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkaWRHZXRWYWx1ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6c2V0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVt
b3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoTWVzc2Fn
ZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGlz
cGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOS0wNS0yMSAgUGVyIEFybmUg
Vm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2FuZGJveCB2aW9sYXRpb24g
aXMgbWFraW5nIHRoZSBXZWJDb250ZW50IHByb2Nlc3MgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggMThkYjBkYTg2OThjZmYwMjA5OTU5MDNmOTM3OTFhNzRlMjYzMjZmMi4u
M2Q3MWY4ZjZiMWI2YzI2ZGIwNTUwZjg4YWE1ZWUxMTQ0MjEwYTkwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
bwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRv
KiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb25CeUNvbm5lY3Rpb24o
Y29ubmVjdGlvbikpIHsKLSAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlz
cGF0Y2hNZXNzYWdlVG9RdWV1ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKKyAgICAgICAgICAgIHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzMsNyAr
MjczLDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmUKIAogICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nl
c3MtPm5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0gICAgICAgICAg
ICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpc3BhdGNoU3luY01lc3NhZ2VUb1F1ZXVlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5KTsKKyAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VN
YW5hZ2VyKCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYmNkNWFiNmMwMjhl
OThjMjU1Mjk3NzEwNzFmZjBlZmFiMzZmY2JhYS4uYTVkNmY1Y2ZjYzdjNDMyNWU5YWQ3MzEzNmYz
NmZkYTI5OWQxZGUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKQEAgLTI2MzUsNyArMjYzNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OndlYlBhZ2VXYXNBZGRlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lv
bklECiAKICAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKTsKICAg
ICBtX3Nlc3Npb25CeUNvbm5lY3Rpb24uZW5zdXJlKGNvbm5lY3Rpb25JRCwgWyZdKCkgewotICAg
ICAgICBzdG9yYWdlTWFuYWdlci5wcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKGNvbm5lY3Rpb24p
OwogICAgICAgICByZXR1cm4gc2Vzc2lvbklEOwogICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNw
cAppbmRleCA5NzE1Nzg3N2U4NDBiZWNkMjU4YzA2ZTY5N2E0ZGU4ZjZjMDIzMzE2Li5iMjU0YjQx
NGQ4OWUyZTQ2Mjc2YmQyZTVmZWMyMWRlMDVkYjc4NWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAK
QEAgLTU1MSwxNSArNTUxLDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHUKICAgICB9KTsKIH0K
IAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5hZGRXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOwotfQotCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpwcm9j
ZXNzRGlkQ2xvc2VDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAg
ICBjb25uZWN0aW9uLnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7Ci0KKyAgICBtX2dldFZhbHVlc0Nh
bGxiYWNrcy5yZW1vdmUoJmNvbm5lY3Rpb24pOwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rp
b24udW5pcXVlSUQoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFw
SURQYWlyc1RvUmVtb3ZlOwogICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24pIHsKQEAgLTcxOCwyMTMgKzcxMiwyMzEgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlMKIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdl
TWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5
T3JpZ2luRGF0YSkKIHsKLSAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGNoZWNrIGlmIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgwNDggaXMgZG9uZS4KLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoIW1faXNFcGhlbWVyYWwpOwot
ICAgIHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVj
dGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFw
SUQpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1h
cElELCBzdG9yYWdlTmFtZXNwYWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3Jp
Z2luRGF0YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFtX2lz
RXBoZW1lcmFsKTsKKyAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQs
IHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uSUQsIHN0
b3JhZ2VNYXBJRCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgotICAgIEFTU0VSVCgoSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+Pjo6aXNWYWxpZEtleShjb25uZWN0
aW9uQW5kU3RvcmFnZU1hcElEUGFpcikpKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKChIYXNoTWFwPHN0ZDo6cGFpcjxJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+
Ojppc1ZhbGlkS2V5KGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKSkpOwogCi0gICAgYXV0
byByZXN1bHQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoY29ubmVjdGlvbkFuZFN0
b3JhZ2VNYXBJRFBhaXIsIG51bGxwdHIpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fc3RvcmFn
ZUFyZWFzQnlDb25uZWN0aW9uLmFkZChjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpciwgbnVs
bHB0cik7CiAKLSAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVja3Mu
Ci0gICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlQoKEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+Pjo6aXNWYWxpZEtleShzdG9yYWdl
TmFtZXNwYWNlSUQpKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgYSBtZXNz
YWdlIGNoZWNrcy4KKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
QVNTRVJUKChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPj46
OmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSkpOwogCi0gICAgTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNw
YWNlKHN0b3JhZ2VOYW1lc3BhY2VJRCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBB
U1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKIAotICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1
cml0eU9yaWdpbkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0g
bG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2Vj
dXJpdHlPcmlnaW5EYXRhKSk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
V1RGTW92ZShzdG9yYWdlQXJlYSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBX
VEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6
Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNl
Y3VyaXR5T3JpZ2luRGF0YSYmIHRvcExldmVsT3JpZ2luRGF0YSwgU2VjdXJpdHlPcmlnaW5EYXRh
JiYgb3JpZ2luKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQobV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwg
c3RvcmFnZU1hcElEIH0pKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgc2Vzc2lv
biBzdG9yYWdlIGZvciB0aGlzIGNvbm5lY3Rpb24vb3JpZ2luIGNvbWJvLgotICAgIC8vIElmIHNv
LCB1cGRhdGUgdGhlIG1hcCB3aXRoIHRoZSBuZXcgSUQsIG90aGVyd2lzZSBrZWVwIG9uIHRydWNr
aW5nLgotICAgIGZvciAoYXV0byBpdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmJlZ2lu
KCksIGVuZCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29ubmVjdGlvbi51bmlxdWVJRCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZjxTdG9yYWdlQXJlYT4gYXJlYSA9
ICppdC0+dmFsdWU7Ci0gICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghb3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkt
PmlzU2FtZVNjaGVtZUhvc3RQb3J0KGFyZWEtPnNlY3VyaXR5T3JpZ2luKCkuc2VjdXJpdHlPcmln
aW4oKS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICAvLyBJ
ZiB0aGUgc3RvcmFnZU1hcElEIHVzZWQgYXMga2V5IGluIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0
aW9uIGlzIG5vIGxvbmdlciBvbmUgb2YgdGhlIFN0b3JhZ2VBcmVhJ3MgbGlzdGVuZXJzLCB0aGVu
IHRoaXMgbWVhbnMKLSAgICAgICAgLy8gdGhhdCBkZXN0cm95U3RvcmFnZU1hcCgpIHdhcyBhbHJl
YWR5IGNhbGxlZCBmb3IgdGhhdCBzdG9yYWdlTWFwSUQgYnV0IGl0IGRlY2lkZWQgbm90IHRvIHJl
bW92ZSBpdCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uCi0gICAgICAgIC8vIHNvIHRo
YXQgd2UgY291bGQgcmV1c2UgaXQgbGF0ZXIgb24gZm9yIHRoZSBzYW1lIGNvbm5lY3Rpb24vb3Jp
Z2luIGNvbWJvLiBJbiB0aGlzIGNhc2UsIGl0IGlzIHNhZmUgdG8gcmVtb3ZlIHRoZSBwcmV2aW91
cwotICAgICAgICAvLyBzdG9yYWdlTWFwSUQgZnJvbSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
bi4KLSAgICAgICAgaWYgKCFhcmVhLT5oYXNMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IGl0LT5rZXkuc2Vjb25kKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LnJlbW92ZShpdCk7Ci0gICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmFkZCh7IGNv
bm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0sIFdURk1vdmUoYXJlYSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQsIHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgdG9wTGV2ZWxPcmlnaW5EYXRhID0gdG9wTGV2ZWxPcmlnaW5EYXRhLmlz
b2xhdGVkQ29weSgpLCBvcmlnaW4gPSBvcmlnaW4uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQgfSkpOworCisgICAgICAgIC8vIFNlZSBpZiB3
ZSBhbHJlYWR5IGhhdmUgc2Vzc2lvbiBzdG9yYWdlIGZvciB0aGlzIGNvbm5lY3Rpb24vb3JpZ2lu
IGNvbWJvLgorICAgICAgICAvLyBJZiBzbywgdXBkYXRlIHRoZSBtYXAgd2l0aCB0aGUgbmV3IElE
LCBvdGhlcndpc2Uga2VlcCBvbiB0cnVja2luZy4KKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4oKSwgZW5kID0gbV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT5r
ZXkuZmlyc3QgIT0gY29ubmVjdGlvbi51bmlxdWVJRCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgUmVmPFN0b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52YWx1ZTsKKyAg
ICAgICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+aXNT
YW1lU2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigp
LmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFyZWEtPmFk
ZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBzdG9yYWdlTWFwSUQgdXNlZCBhcyBrZXkgaW4gbV9zdG9yYWdlQXJlYXNC
eUNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIG9uZSBvZiB0aGUgU3RvcmFnZUFyZWEncyBsaXN0ZW5l
cnMsIHRoZW4gdGhpcyBtZWFucworICAgICAgICAgICAgLy8gdGhhdCBkZXN0cm95U3RvcmFnZU1h
cCgpIHdhcyBhbHJlYWR5IGNhbGxlZCBmb3IgdGhhdCBzdG9yYWdlTWFwSUQgYnV0IGl0IGRlY2lk
ZWQgbm90IHRvIHJlbW92ZSBpdCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uCisgICAg
ICAgICAgICAvLyBzbyB0aGF0IHdlIGNvdWxkIHJldXNlIGl0IGxhdGVyIG9uIGZvciB0aGUgc2Ft
ZSBjb25uZWN0aW9uL29yaWdpbiBjb21iby4gSW4gdGhpcyBjYXNlLCBpdCBpcyBzYWZlIHRvIHJl
bW92ZSB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgIC8vIHN0b3JhZ2VNYXBJRCBmcm9tIG1fc3Rv
cmFnZUFyZWFzQnlDb25uZWN0aW9uLgorICAgICAgICAgICAgaWYgKCFhcmVhLT5oYXNMaXN0ZW5l
cihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGl0LT5rZXkuc2Vjb25kKSkKKyAgICAgICAgICAgICAg
ICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoaXQpOworICAgICAgICAgICAgbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9y
YWdlTWFwSUQgfSwgV1RGTW92ZShhcmVhKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBj
b25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5h
ZGQoeyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgotICAgIEFTU0VSVCghc2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICBhdXRvKiB0
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZVRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQsIFdURk1vdmUodG9wTGV2ZWxPcmln
aW5EYXRhKSk7CisgICAgICAgIGF1dG8qIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA9
IGdldE9yQ3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgV1RGTW92ZSh0b3BMZXZlbE9yaWdpbkRhdGEpKTsKIAotICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFy
ZWEoV1RGTW92ZShvcmlnaW4pKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVh
ID0gdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVh
KFdURk1vdmUob3JpZ2luKSk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzbG90ID0gV1RGTW92ZShz
dG9yYWdlQXJlYSk7CisgICAgICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5E
YXRhKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1faXNF
cGhlbWVyYWwpIHsKLSAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdp
bkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1
b3RhSW5CeXRlcykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSk7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlv
bklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29w
eSgpXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAgICAgICAg
ICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0
b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpOwogCi0gICAgU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlID0gbV9zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZXMuZ2V0KHN0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgaWYgKCFzZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSkgewotICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29taW5nIG1l
c3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3JhZ2UgZm9y
IGEgd2ViIHBhZ2UKLSAgICAgICAgLy8gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwganVz
dCBpZ25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIFNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA9IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBpZiAoIXNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29t
aW5nIG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3Jh
Z2UgZm9yIGEgd2ViIHBhZ2UKKyAgICAgICAgICAgIC8vIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQsIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VS
VChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVjdGlvbi51bmlx
dWVJRCgpLCBzdG9yYWdlTWFwSUQgfSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5l
Y3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEIH0pKTsKIAotICAg
IGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25uZWN0aW9u
LnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVCgh
c2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2su
CisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxs
b3dlZENvbm5lY3Rpb25zKCkuY29udGFpbnMoY29ubmVjdGlvbi51bmlxdWVJRCgpKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFT
U0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxsb3dlZENvbm5lY3Rpb25zKCkuY29udGFp
bnMoY29ubmVjdGlvbklEKSk7CiAKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9yaWdp
bkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0gc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9y
aWdpbkRhdGEpKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb25J
RCwgc3RvcmFnZU1hcElEKTsKIAotICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAg
ICAgICAgc2xvdCA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOworICAgIH0pOwogfQogCiB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VN
YXBJRF0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9u
SUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1f
c3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXIpKTsKKyAgICAgICAgYXV0byBpdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LmZpbmQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOworICAgICAgICBpZiAoaXQgPT0g
bV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBj
b25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGUgbGFzdCBwYWdlIHdhcyBjbG9z
ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGF1dG8gaXQgPSBtX3N0
b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5maW5kKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWly
KTsKLSAgICBpZiAoaXQgPT0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBsYXN0
IHBhZ2Ugd2FzIGNsb3NlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgaXQtPnZh
bHVlLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBp
dC0+dmFsdWUtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1h
cElEKTsKKyAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIHNlc3Npb24gc3RvcmFnZSBtYXBzLiBUaGUg
d2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhwZWN0IHRoZSBkYXRhIHRvIHN0aWxsIGJl
IGFyb3VuZC4KKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRG9uJ3QgcmVtb3ZlIHNlc3Npb24gc3RvcmFnZSBt
YXBzLiBUaGUgd2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhwZWN0IHRoZSBkYXRhIHRv
IHN0aWxsIGJlIGFyb3VuZC4KLSAgICBpZiAoaXQtPnZhbHVlLT5pc1Nlc3Npb25TdG9yYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVt
b3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKKyAgICB9KTsKK30KKwordm9pZCBT
dG9yYWdlTWFuYWdlcjo6ZGlkR2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRl
bXMpCit7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQsIGl0ZW1zID0gY3Jv
c3NUaHJlYWRDb3B5KGl0ZW1zKV0geworICAgICAgICBhdXRvIGl0ID0gbV9nZXRWYWx1ZXNDYWxs
YmFja3MuZmluZCgmY29ubmVjdGlvbik7CisgICAgICAgIGlmIChpdCA9PSBtX2dldFZhbHVlc0Nh
bGxiYWNrcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RvcmFnZUFyZWFz
QnlDb25uZWN0aW9uLnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcik7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUuY29udGFpbnMoc3RvcmFnZU1hcElEKSk7CisgICAgICAgIGlm
IChhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gaXQtPnZhbHVlLnRha2Uoc3RvcmFnZU1hcElEKSkK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGl0ZW1zKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9nZXRWYWx1ZXNDYWxsYmFj
a3MucmVtb3ZlKCZjb25uZWN0aW9uKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Z2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQs
IHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRT
dG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlmICghc3RvcmFnZUFy
ZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
IHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VNYXAtPml0
ZW1zKCkpOworICAgIGF1dG8gY2FsbGJhY2tzRm9yQ29ubmVjdGlvbiA9IG1fZ2V0VmFsdWVzQ2Fs
bGJhY2tzLmFkZCgmY29ubmVjdGlvbiwgR2V0VmFsdWVzQ2FsbGJhY2soKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBjYWxsYmFja3NGb3JDb25uZWN0aW9uLml0ZXJhdG9yLT52YWx1ZS5hZGQoc3RvcmFn
ZU1hcElELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgQVNTRVJUKHJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJp
dHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdl
TWFwSUQsIHN0b3JhZ2VNYXBTZWVkXSgpIG11dGFibGUgeworICAgICAgICBhdXRvKiBzdG9yYWdl
QXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOwor
ICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJh
bCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0
b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFw
LT5pdGVtcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNz
aW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQu
IElnbm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVybiBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5n
ZXQoKSwgc3RvcmFnZU1hcElELCB7IH0pOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMg
YSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7
Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoc3RvcmFnZUFyZWEtPml0ZW1zKCkpOwot
ICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZhbHVl
cyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGRpZEdldFZhbHVlcyhj
b25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VBcmVhLT5pdGVtcygpKTsKKyAg
ICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZh
bHVlcyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQg
U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFn
ZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3Jh
Z2VNYXBJRCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVt
ZXJhbCkgewotICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3Rv
cmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBv
bGRWYWx1ZTsKLSAgICAgICAgICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9uOwotICAgICAgICAg
ICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhj
ZXB0aW9uKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlP
cmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFw
SUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCBrZXkgPSBrZXkuaXNvbGF0
ZWRDb3B5KCksIHZhbHVlID0gdmFsdWUuaXNvbGF0ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0
cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFy
ZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAg
ICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9y
YWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1
ZSwgcXVvdGFFeGNlcHRpb24pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEg
Zm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBib29sIHF1b3RhRXJyb3I7Ci0gICAgc3RvcmFnZUFy
ZWEtPnNldEl0ZW0oY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBr
ZXksIHZhbHVlLCB1cmxTdHJpbmcsIHF1b3RhRXJyb3IpOwotICAgIGNvbm5lY3Rpb24uc2VuZChN
ZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwg
cXVvdGFFcnJvciksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGJvb2wgcXVvdGFFcnJvcjsKKyAg
ICAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0oY29ubmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNl
U3RvcmFnZUFyZWFJRCwga2V5LCB2YWx1ZSwgdXJsU3RyaW5nLCBxdW90YUVycm9yKTsKKyAgICAg
ICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0o
c3RvcmFnZU1hcFNlZWQsIGtleSwgcXVvdGFFcnJvciksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7
CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW1zKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYgaXRlbXMpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBp
ZiAoYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFn
ZU1hcElEKSkKLSAgICAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW1zKGl0ZW1zKTsKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25u
ZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc3RvcmFnZU1hcElELCBpdGVtcyA9IGNyb3Nz
VGhyZWFkQ29weShpdGVtcyldKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChhdXRvKiBzdG9yYWdl
QXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpKQor
ICAgICAgICAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW1zKGl0ZW1zKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSwgdWlu
dDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRf
dCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byogc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKLSAg
ICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1
cml0eU9yaWdpbkRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAg
ICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNl
Y3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzb3VyY2VTdG9y
YWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5ID0ga2V5Lmlzb2xhdGVkQ29weSgpLCB1cmxT
dHJpbmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1
dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3Jh
Z2VNYXBJRCk7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmICht
X2lzRXBoZW1lcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1f
ZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgeworICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAt
PnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBh
IHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3Jh
Z2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBp
dC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVt
KGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCB1cmxTdHJp
bmcpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJl
bW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIHN0
b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3Jh
Z2VBcmVhSUQsIGtleSwgdXJsU3RyaW5nKTsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSks
IHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsZWFy
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJ
RCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkK
LSAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRh
KTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2Ug
dGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9y
aWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJ
RCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIHVybFN0cmluZyA9IHVybFN0
cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFy
ZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAg
ICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwp
CisgICAgICAgICAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLnJlbW92ZShzZWN1cml0eU9yaWdp
bkRhdGEpOworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZv
ciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1cmxTdHJpbmcpOwotICAgIGNv
bm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VN
YXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5l
Y3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVybFN0cmluZyk7CisgICAg
ICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihz
dG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFn
ZU1hbmFnZXI6OndhaXRVbnRpbFdyaXRlc0ZpbmlzaGVkKCkKQEAgLTk3NSwxOCArOTg3LDQgQEAg
U3RvcmFnZU1hbmFnZXI6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSogU3RvcmFnZU1h
bmFnZXI6OmdldE9yQ3JlYXRlVHJhbnMKICAgICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9
CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoTWVzc2FnZVRvUXVldWUoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCi17Ci0gICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgJmNvbm5l
Y3Rpb24sICZkZWNvZGVyXSB7Ci0gICAgICAgIGRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgIH0pOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaFN5
bmNNZXNzYWdlVG9RdWV1ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
LXsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCAmY29ubmVjdGlvbiwgJmRlY29kZXIsIHJlcGx5RW5jb2RlciA9IFdURk1vdmUocmVw
bHlFbmNvZGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgIH0pOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggNGE1YjcxODZmNTgzMmE4MWY2NzAw
NmYzMmJkZTNjNWU0NGM1MTk2ZS4uYmVkZjdlZjdhOWI2YjNkYzJjM2QxM2Y2OTgwZjViZjc0NDli
NDc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlQWxsb3dlZFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlQ29ubmVjdGlvbih1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHZvaWQgY2xvbmVT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVpbnQ2
NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7CiAKLSAgICB2b2lkIHByb2Nlc3NXaWxsT3BlbkNv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2VDb25u
ZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogICAgIHZvaWQgd2FpdFVudGlsV3JpdGVzRmluaXNo
ZWQoKTsKIApAQCAtNzAsMTYgKzY5LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2V0TG9jYWxT
dG9yYWdlT3JpZ2luRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAot
ICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlVG9RdWV1ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKTsKLSAgICB2b2lkIGRpc3BhdGNoU3luY01lc3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBs
eUVuY29kZXIpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VNYW5hZ2VyKGNvbnN0
IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLQogICAgIC8vIElQQzo6Q29ubmVjdGlv
bjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcikgb3ZlcnJpZGU7CiAKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgU3RvcmFnZU1hbmFnZXIoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpOworCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGNyZWF0
ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQs
IHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiYpOwogICAgIHZvaWQgY3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVj
dGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlE
LCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BMZXZlbE9yaWdpbkRhdGEsIFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKQEAgLTkyLDYgKzg4LDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFy
ZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRf
dCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpOwogCisgICAgdm9pZCBkaWRHZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9u
JiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYp
OworCiAgICAgY2xhc3MgU3RvcmFnZUFyZWE7CiAgICAgU3RvcmFnZUFyZWEqIGZpbmRTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCkgY29uc3Q7CiAKQEAgLTExNiw2ICsxMTQs
OCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBS
ZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFnZTsKICAgICBib29sIG1f
aXNFcGhlbWVyYWwgeyBmYWxzZSB9OwogCisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+PiBH
ZXRWYWx1ZXNDYWxsYmFjazsKKyAgICBIYXNoTWFwPFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCBH
ZXRWYWx1ZXNDYWxsYmFjaz4gbV9nZXRWYWx1ZXNDYWxsYmFja3M7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA4MWVhYmM3NWUyODI3MTVkZmQ4YzRlZTkzNTMzOTAzMDY2MjgzYTdmLi5hZjliYTdj
ZmZmYjU2ODAxNGEzNzQ3YTIyZWFjZTVjYWVjNDIxYmRlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDUtMjIg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFu
ZGVkIGluIHIyNDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3Rv
cmFnZVByb2Nlc3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MTAwMzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWJWaWV3IHdhcyB3cm9uZ2x5IGxvYWRlZCBtdWx0aXBsZSB0aW1lcy4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lz
dGVuY2UubW06CisgICAgICAgIChURVNUKToKKwogMjAxOS0wNS0yMSAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IHRo
ZSBidWlsZCB3aXRoIEhBVkUoQUNDRVNTSUJJTElUWSkgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVu
Y2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFn
ZVBlcnNpc3RlbmNlLm1tCmluZGV4IDBhNWM3MDMyNGNiN2ZlMTUzM2EzOWRmZGIxZGZiNmQ2NWZj
MDUyZDUuLjAyYTU1ZjQ5MGMwMGVlYjBkNDBkMWM3MmIzZjBkYmM2YTNjODg4NTMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9M
b2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtNjgsMjEgKzY4LDE4IEBAIFRFU1QoV0tXZWJW
aWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKICAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJsb2NhbC1zdG9yYWdl
LXByb2Nlc3MtY3Jhc2hlcyIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVl
c3RdOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAImxvY2FsOnN0
b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwotICAgIAorCiAgICAgcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwog
ICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2Fn
ZSBib2R5XSk7CiAKICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3NdOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0g
ZmFsc2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19T
VFJFUShAIk5ldHdvcmsgUHJvY2VzcyBDcmFzaGVkIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHld
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370430</attachid>
            <date>2019-05-22 11:44:51 -0700</date>
            <delta_ts>2019-05-22 13:34:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198090-20190522114450.patch</filename>
            <type>text/plain</type>
            <size>32978</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ3NTRjYzlkMTEzMDZiYjhi
NmQ5OWVlOGEyMjdiOGMzYjVhMzVlZWEuLjY3MzBkYTgzYmFmYWRkODY1NDBhMTQ2ODI4ZDRmZTY4
ODFkNmZmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTktMDUtMjIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIy
NDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nl
c3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAw
MzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
ZSB1c2VkIHRvIGRpc3BhdGNoIFN0b3JhZ2VNYW5hZ2VyIG1lc3NhZ2UgdG8gU3RvcmFnZU1hbmFn
ZXIncyB3b3JrIHF1ZXVlLCB3aGljaCByZXF1aXJlZCBtZXNzYWdlIGhhbmRsZXIgdG8gYmUKKyAg
ICAgICAgYWRkZWQgdG8gcXVldWUgYmVmb3JlIHJlY2VpdmluZyBmaXJzdCBTdG9yYWdlTWFuYWdl
ciBtZXNzYWdlLCBvdGhlcndpc2UgbmV0d29yayBwcm9jZXNzIHdvdWxkIG5vdCBrbm93IGhvdyB0
bworICAgICAgICBkZWNvZGUgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgQWZ0ZXIgcjI0NTU0MCwg
d2hlbiBuZXRvcmsgcHJvY2VzcyBjcmFzaGVzIGFuZCBkb20gc3RvcmFnZSBpcyBhY2Nlc3NlZCBm
cm9tIHdlYiBwcm9jZXNzIGFmdGVyIHRoYXQsIHdlYiBwcm9jZXNzIAorICAgICAgICByZS1lc3Rh
Ymxpc2hlcyBpdHMgY29ubmVjdGlvbiB0byBuZXR3b3JrIHByb2Nlc3MsIGFza3MgbmV0d29yayBw
cm9jZXNzIHRvIGFkZCBtZXNzYWdlIGhhbmRsZXIsIGFuZCB0aGVuIHNlbmRzIAorICAgICAgICBT
dG9yYWdlTWFuYWdlciBtZXNzYWdlIGltbWVkaWF0ZWx5LiBCZWNhdXNlIHdvcmsgcXVldWUgbWVz
c2FnZSByZWNlaXZlciBpcyBhZGRlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGluIAorICAgICAg
ICBuZXR3b3JrIHByb2Nlc3MsIGl0IGlzIHBvc3NpYmxlIHRoZSBTdG9yYWdlTWFuYWdlciBtZXNz
YWdlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGF0LgorCisgICAgICAgIEEgc2FmZSBhbmQgZWFzeSBy
ZXNvbHV0aW9uIGlzIHRvIG5vdCBkaXNwYXRjaCBTdG9yYWdlTWFuYWdlciBtZXNzYWdlIHRvIHdv
cmsgcXVldWUsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byAKKyAgICAgICAgd2FpdCBmb3IgdGhl
IG1lc3NhZ2UgcmVjZWl2ZXIgdG8gYmUgYWRkZWQuIEhhbmRsaW5nIG1lc3NhZ2Ugb24gdGhlIG1h
aW4gdGhyZWFkIGFsc28gYWxsb3dzIHVzIHRvIHVudHlpbmcgdGhlIAorICAgICAgICBrbm90IHRo
YXQgYmluZHMgU3RvcmFnZU1hbmFnZXIgYW5kIGNvbm5lY3Rpb24sIHdoaWNoIG1heSBiZSBhIHBy
ZWZlcnJlZCBkZXNpZ24gaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6d2ViUGFnZVdhc0FkZGVkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnByb2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3Rv
cmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkaWRHZXRWYWx1ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6c2V0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVt
b3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoTWVzc2Fn
ZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGlz
cGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOS0wNS0yMSAgUGVyIEFybmUg
Vm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2FuZGJveCB2aW9sYXRpb24g
aXMgbWFraW5nIHRoZSBXZWJDb250ZW50IHByb2Nlc3MgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggMThkYjBkYTg2OThjZmYwMjA5OTU5MDNmOTM3OTFhNzRlMjYzMjZmMi4u
M2Q3MWY4ZjZiMWI2YzI2ZGIwNTUwZjg4YWE1ZWUxMTQ0MjEwYTkwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
bwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRv
KiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb25CeUNvbm5lY3Rpb24o
Y29ubmVjdGlvbikpIHsKLSAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlz
cGF0Y2hNZXNzYWdlVG9RdWV1ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKKyAgICAgICAgICAgIHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzMsNyAr
MjczLDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmUKIAogICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nl
c3MtPm5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0gICAgICAgICAg
ICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpc3BhdGNoU3luY01lc3NhZ2VUb1F1ZXVlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5KTsKKyAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VN
YW5hZ2VyKCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYmNkNWFiNmMwMjhl
OThjMjU1Mjk3NzEwNzFmZjBlZmFiMzZmY2JhYS4uYTVkNmY1Y2ZjYzdjNDMyNWU5YWQ3MzEzNmYz
NmZkYTI5OWQxZGUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKQEAgLTI2MzUsNyArMjYzNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OndlYlBhZ2VXYXNBZGRlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lv
bklECiAKICAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKTsKICAg
ICBtX3Nlc3Npb25CeUNvbm5lY3Rpb24uZW5zdXJlKGNvbm5lY3Rpb25JRCwgWyZdKCkgewotICAg
ICAgICBzdG9yYWdlTWFuYWdlci5wcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKGNvbm5lY3Rpb24p
OwogICAgICAgICByZXR1cm4gc2Vzc2lvbklEOwogICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNw
cAppbmRleCA5NzE1Nzg3N2U4NDBiZWNkMjU4YzA2ZTY5N2E0ZGU4ZjZjMDIzMzE2Li5lYzk1ZmFi
ODEyNGU4NGYyM2Y4YWFhNzNjYzdlYzFjYmQ3YzdlMzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAK
QEAgLTU1MSwxNSArNTUxLDkgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHUKICAgICB9KTsKIH0K
IAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5hZGRXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOwotfQotCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpwcm9j
ZXNzRGlkQ2xvc2VDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAg
ICBjb25uZWN0aW9uLnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7Ci0KKyAgICBtX2dldFZhbHVlc0Nh
bGxiYWNrcy5yZW1vdmUoJmNvbm5lY3Rpb24pOwogICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rp
b24udW5pcXVlSUQoKV0oKSBtdXRhYmxlIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJUEM6
OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFw
SURQYWlyc1RvUmVtb3ZlOwogICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24pIHsKQEAgLTcxOCwyMTMgKzcxMiwyMzIgQEAgdm9pZCBTdG9y
YWdlTWFuYWdlcjo6ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlMKIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdl
TWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5
T3JpZ2luRGF0YSkKIHsKLSAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIGNoZWNrIGlmIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgwNDggaXMgZG9uZS4KLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoIW1faXNFcGhlbWVyYWwpOwot
ICAgIHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVj
dGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFw
SUQpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1h
cElELCBzdG9yYWdlTmFtZXNwYWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3Jp
Z2luRGF0YS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFtX2lz
RXBoZW1lcmFsKTsKKyAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQs
IHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uSUQsIHN0
b3JhZ2VNYXBJRCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgotICAgIEFTU0VSVCgoSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+Pjo6aXNWYWxpZEtleShjb25uZWN0
aW9uQW5kU3RvcmFnZU1hcElEUGFpcikpKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKChIYXNoTWFwPHN0ZDo6cGFpcjxJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+
Ojppc1ZhbGlkS2V5KGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKSkpOwogCi0gICAgYXV0
byByZXN1bHQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoY29ubmVjdGlvbkFuZFN0
b3JhZ2VNYXBJRFBhaXIsIG51bGxwdHIpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fc3RvcmFn
ZUFyZWFzQnlDb25uZWN0aW9uLmFkZChjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpciwgbnVs
bHB0cik7CiAKLSAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVja3Mu
Ci0gICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlQoKEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+Pjo6aXNWYWxpZEtleShzdG9yYWdl
TmFtZXNwYWNlSUQpKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgYSBtZXNz
YWdlIGNoZWNrcy4KKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
QVNTRVJUKChIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPj46
OmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSkpOwogCi0gICAgTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5h
bWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNw
YWNlKHN0b3JhZ2VOYW1lc3BhY2VJRCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBB
U1NFUlQobG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKIAotICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1
cml0eU9yaWdpbkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0g
bG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2Vj
dXJpdHlPcmlnaW5EYXRhKSk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
V1RGTW92ZShzdG9yYWdlQXJlYSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBX
VEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6
Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNl
Y3VyaXR5T3JpZ2luRGF0YSYmIHRvcExldmVsT3JpZ2luRGF0YSwgU2VjdXJpdHlPcmlnaW5EYXRh
JiYgb3JpZ2luKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQobV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwg
c3RvcmFnZU1hcElEIH0pKTsKLQotICAgIC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgc2Vzc2lv
biBzdG9yYWdlIGZvciB0aGlzIGNvbm5lY3Rpb24vb3JpZ2luIGNvbWJvLgotICAgIC8vIElmIHNv
LCB1cGRhdGUgdGhlIG1hcCB3aXRoIHRoZSBuZXcgSUQsIG90aGVyd2lzZSBrZWVwIG9uIHRydWNr
aW5nLgotICAgIGZvciAoYXV0byBpdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmJlZ2lu
KCksIGVuZCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29ubmVjdGlvbi51bmlxdWVJRCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlZjxTdG9yYWdlQXJlYT4gYXJlYSA9
ICppdC0+dmFsdWU7Ci0gICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghb3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkt
PmlzU2FtZVNjaGVtZUhvc3RQb3J0KGFyZWEtPnNlY3VyaXR5T3JpZ2luKCkuc2VjdXJpdHlPcmln
aW4oKS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOwotICAgICAgICAvLyBJ
ZiB0aGUgc3RvcmFnZU1hcElEIHVzZWQgYXMga2V5IGluIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0
aW9uIGlzIG5vIGxvbmdlciBvbmUgb2YgdGhlIFN0b3JhZ2VBcmVhJ3MgbGlzdGVuZXJzLCB0aGVu
IHRoaXMgbWVhbnMKLSAgICAgICAgLy8gdGhhdCBkZXN0cm95U3RvcmFnZU1hcCgpIHdhcyBhbHJl
YWR5IGNhbGxlZCBmb3IgdGhhdCBzdG9yYWdlTWFwSUQgYnV0IGl0IGRlY2lkZWQgbm90IHRvIHJl
bW92ZSBpdCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uCi0gICAgICAgIC8vIHNvIHRo
YXQgd2UgY291bGQgcmV1c2UgaXQgbGF0ZXIgb24gZm9yIHRoZSBzYW1lIGNvbm5lY3Rpb24vb3Jp
Z2luIGNvbWJvLiBJbiB0aGlzIGNhc2UsIGl0IGlzIHNhZmUgdG8gcmVtb3ZlIHRoZSBwcmV2aW91
cwotICAgICAgICAvLyBzdG9yYWdlTWFwSUQgZnJvbSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
bi4KLSAgICAgICAgaWYgKCFhcmVhLT5oYXNMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IGl0LT5rZXkuc2Vjb25kKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LnJlbW92ZShpdCk7Ci0gICAgICAgIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmFkZCh7IGNv
bm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0sIFdURk1vdmUoYXJlYSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQsIHN0b3Jh
Z2VOYW1lc3BhY2VJRCwgdG9wTGV2ZWxPcmlnaW5EYXRhID0gdG9wTGV2ZWxPcmlnaW5EYXRhLmlz
b2xhdGVkQ29weSgpLCBvcmlnaW4gPSBvcmlnaW4uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQgfSkpOworCisgICAgICAgIC8vIFNlZSBpZiB3
ZSBhbHJlYWR5IGhhdmUgc2Vzc2lvbiBzdG9yYWdlIGZvciB0aGlzIGNvbm5lY3Rpb24vb3JpZ2lu
IGNvbWJvLgorICAgICAgICAvLyBJZiBzbywgdXBkYXRlIHRoZSBtYXAgd2l0aCB0aGUgbmV3IElE
LCBvdGhlcndpc2Uga2VlcCBvbiB0cnVja2luZy4KKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4oKSwgZW5kID0gbV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGl0LT5r
ZXkuZmlyc3QgIT0gY29ubmVjdGlvbi51bmlxdWVJRCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgUmVmPFN0b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52YWx1ZTsKKyAg
ICAgICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+aXNT
YW1lU2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigp
LmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFyZWEtPmFk
ZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBzdG9yYWdlTWFwSUQgdXNlZCBhcyBrZXkgaW4gbV9zdG9yYWdlQXJlYXNC
eUNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIG9uZSBvZiB0aGUgU3RvcmFnZUFyZWEncyBsaXN0ZW5l
cnMsIHRoZW4gdGhpcyBtZWFucworICAgICAgICAgICAgLy8gdGhhdCBkZXN0cm95U3RvcmFnZU1h
cCgpIHdhcyBhbHJlYWR5IGNhbGxlZCBmb3IgdGhhdCBzdG9yYWdlTWFwSUQgYnV0IGl0IGRlY2lk
ZWQgbm90IHRvIHJlbW92ZSBpdCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uCisgICAg
ICAgICAgICAvLyBzbyB0aGF0IHdlIGNvdWxkIHJldXNlIGl0IGxhdGVyIG9uIGZvciB0aGUgc2Ft
ZSBjb25uZWN0aW9uL29yaWdpbiBjb21iby4gSW4gdGhpcyBjYXNlLCBpdCBpcyBzYWZlIHRvIHJl
bW92ZSB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgIC8vIHN0b3JhZ2VNYXBJRCBmcm9tIG1fc3Rv
cmFnZUFyZWFzQnlDb25uZWN0aW9uLgorICAgICAgICAgICAgaWYgKCFhcmVhLT5oYXNMaXN0ZW5l
cihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGl0LT5rZXkuc2Vjb25kKSkKKyAgICAgICAgICAgICAg
ICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoaXQpOworICAgICAgICAgICAgbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9y
YWdlTWFwSUQgfSwgV1RGTW92ZShhcmVhKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBj
b25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5h
ZGQoeyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgotICAgIEFTU0VSVCghc2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICBhdXRvKiB0
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZVRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQsIFdURk1vdmUodG9wTGV2ZWxPcmln
aW5EYXRhKSk7CisgICAgICAgIGF1dG8qIHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA9
IGdldE9yQ3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgV1RGTW92ZSh0b3BMZXZlbE9yaWdpbkRhdGEpKTsKIAotICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFy
ZWEoV1RGTW92ZShvcmlnaW4pKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVh
ID0gdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVh
KFdURk1vdmUob3JpZ2luKSk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25u
ZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzbG90ID0gV1RGTW92ZShz
dG9yYWdlQXJlYSk7CisgICAgICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5E
YXRhKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1faXNF
cGhlbWVyYWwpIHsKLSAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdp
bkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1
b3RhSW5CeXRlcykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSk7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlv
bklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3Bh
Y2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29w
eSgpXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAgICAgICAg
ICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0
b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpOwogCi0gICAgU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlID0gbV9zZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZXMuZ2V0KHN0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgaWYgKCFzZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSkgewotICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29taW5nIG1l
c3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3JhZ2UgZm9y
IGEgd2ViIHBhZ2UKLSAgICAgICAgLy8gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCwganVz
dCBpZ25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIFNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA9IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBpZiAoIXNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGluY29t
aW5nIG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9uIHN0b3Jh
Z2UgZm9yIGEgd2ViIHBhZ2UKKyAgICAgICAgICAgIC8vIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQsIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VS
VChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVjdGlvbi51bmlx
dWVJRCgpLCBzdG9yYWdlTWFwSUQgfSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5l
Y3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEIH0pKTsKIAotICAg
IGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25uZWN0aW9u
LnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVCgh
c2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2su
CisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxs
b3dlZENvbm5lY3Rpb25zKCkuY29udGFpbnMoY29ubmVjdGlvbi51bmlxdWVJRCgpKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFT
U0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxsb3dlZENvbm5lY3Rpb25zKCkuY29udGFp
bnMoY29ubmVjdGlvbklEKSk7CiAKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9yaWdp
bkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVhID0gc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9y
aWdpbkRhdGEpKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb25J
RCwgc3RvcmFnZU1hcElEKTsKIAotICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAg
ICAgICAgc2xvdCA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOworICAgIH0pOwogfQogCiB2b2lkIFN0
b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VN
YXBJRF0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9u
SUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1f
c3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VN
YXBJRFBhaXIpKTsKKyAgICAgICAgYXV0byBpdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9u
LmZpbmQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOworICAgICAgICBpZiAoaXQgPT0g
bV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBj
b25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGUgbGFzdCBwYWdlIHdhcyBjbG9z
ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGF1dG8gaXQgPSBtX3N0
b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5maW5kKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWly
KTsKLSAgICBpZiAoaXQgPT0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKLSAg
ICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBsYXN0
IHBhZ2Ugd2FzIGNsb3NlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgaXQtPnZh
bHVlLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBp
dC0+dmFsdWUtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1h
cElEKTsKKyAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIHNlc3Npb24gc3RvcmFnZSBtYXBzLiBUaGUg
d2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhwZWN0IHRoZSBkYXRhIHRvIHN0aWxsIGJl
IGFyb3VuZC4KKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRG9uJ3QgcmVtb3ZlIHNlc3Npb24gc3RvcmFnZSBt
YXBzLiBUaGUgd2ViIHByb2Nlc3MgbWF5IHJlY29ubmVjdCBhbmQgZXhwZWN0IHRoZSBkYXRhIHRv
IHN0aWxsIGJlIGFyb3VuZC4KLSAgICBpZiAoaXQtPnZhbHVlLT5pc1Nlc3Npb25TdG9yYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVt
b3ZlKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKKyAgICB9KTsKK30KKwordm9pZCBT
dG9yYWdlTWFuYWdlcjo6ZGlkR2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
dWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRl
bXMpCit7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQsIGl0ZW1zID0gY3Jv
c3NUaHJlYWRDb3B5KGl0ZW1zKV0geworICAgICAgICBhdXRvIGl0ID0gbV9nZXRWYWx1ZXNDYWxs
YmFja3MuZmluZCgmY29ubmVjdGlvbik7CisgICAgICAgIGlmIChpdCA9PSBtX2dldFZhbHVlc0Nh
bGxiYWNrcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RvcmFnZUFyZWFz
QnlDb25uZWN0aW9uLnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcik7CisgICAg
ICAgIEFTU0VSVChpdC0+dmFsdWUuY29udGFpbnMoc3RvcmFnZU1hcElEKSk7CisgICAgICAgIGlm
IChhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gaXQtPnZhbHVlLnRha2Uoc3RvcmFnZU1hcElEKSkK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGl0ZW1zKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9nZXRWYWx1ZXNDYWxsYmFj
a3MucmVtb3ZlKCZjb25uZWN0aW9uKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdl
cjo6Z2V0VmFsdWVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQs
IHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRT
dG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlmICghc3RvcmFnZUFy
ZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
IHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0b3JhZ2VNYXAtPml0
ZW1zKCkpOworICAgIGF1dG8gY2FsbGJhY2tzRm9yQ29ubmVjdGlvbiA9IG1fZ2V0VmFsdWVzQ2Fs
bGJhY2tzLmFkZCgmY29ubmVjdGlvbiwgR2V0VmFsdWVzQ2FsbGJhY2soKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBjYWxsYmFja3NGb3JDb25uZWN0aW9uLml0ZXJhdG9yLT52YWx1ZS5hZGQoc3RvcmFn
ZU1hcElELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgQVNTRVJUKHJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0g
bWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5E
YXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHN0b3JhZ2VNYXBTZWVkXSgpIG11dGFi
bGUgeworICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0
aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Cisg
ICAgICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRv
IHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5nZXQo
KSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFwLT5pdGVtcygpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVy
biBkaWRHZXRWYWx1ZXMoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElELCB7IH0pOwogICAg
ICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBw
YWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRs
ZXIoc3RvcmFnZUFyZWEtPml0ZW1zKCkpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6
U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZhbHVlcyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJ
RCk7CisgICAgICAgIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQs
IHN0b3JhZ2VBcmVhLT5pdGVtcygpKTsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZhbHVlcyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VN
YXBJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0oSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1
cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3Rv
cmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0
b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJl
YSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAgaWYgKGF1dG8g
c3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkg
ewotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAgICAgICAgICBib29s
IHF1b3RhRXhjZXB0aW9uOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5
LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFr
ZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRh
Lmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3Jh
Z2VNYXBTZWVkLCBrZXkgPSBrZXkuaXNvbGF0ZWRDb3B5KCksIHZhbHVlID0gdmFsdWUuaXNvbGF0
ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAg
ICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBz
dG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7
CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZU1hcC0+
c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9u
IHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIEln
bm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAvLyBUaGlz
IGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJl
ZW4gY2xvc2VkLiBJZ25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBib29s
IHF1b3RhRXJyb3I7Ci0gICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0oY29ubmVjdGlvbi51bmlxdWVJ
RCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIHZhbHVlLCB1cmxTdHJpbmcsIHF1b3RhRXJy
b3IpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFNl
dEl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwgcXVvdGFFcnJvciksIHN0b3JhZ2VNYXBJRCk7Cisg
ICAgICAgIGJvb2wgcXVvdGFFcnJvcjsKKyAgICAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0oY29u
bmVjdGlvbi0+dW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCB2YWx1ZSwgdXJs
U3RyaW5nLCBxdW90YUVycm9yKTsKKyAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
U3RvcmFnZUFyZWFNYXA6OkRpZFNldEl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSwgcXVvdGFFcnJv
ciksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnNl
dEl0ZW1zKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElE
LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpCiB7Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoY29ubmVjdGlvbiwgc3RvcmFnZU1hcElEKSkKLSAgICAgICAgc3RvcmFnZUFyZWEt
PnNldEl0ZW1zKGl0ZW1zKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwg
c3RvcmFnZU1hcElELCBpdGVtcyA9IGNyb3NzVGhyZWFkQ29weShpdGVtcyldKCkgbXV0YWJsZSB7
CisgICAgICAgIGlmIChhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0
aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQpKQorICAgICAgICAgICAgc3RvcmFnZUFyZWEtPnNldEl0
ZW1zKGl0ZW1zKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVtb3ZlSXRl
bShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBz
b3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29u
bmVjdGlvbiwgc3RvcmFnZU1hcElEKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAg
IGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0g
bV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKSB7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnJlbW92
ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlv
biksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHko
KSwgc3RvcmFnZU1hcElELCBzb3VyY2VTdG9yYWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5
ID0ga2V5Lmlzb2xhdGVkQ29weSgpLCB1cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5
KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGlmICghc3RvcmFn
ZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlP
cmlnaW5EYXRhKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNs
b3NlZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNl
U3RvcmFnZUFyZWFJRCwga2V5LCB1cmxTdHJpbmcpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNz
YWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSks
IHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGNvbm5lY3Rp
b24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdXJsU3RyaW5nKTsKKyAg
ICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZFJlbW92
ZUl0ZW0oc3RvcmFnZU1hcFNlZWQsIGtleSksIHN0b3JhZ2VNYXBJRCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsZWFyKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRf
dCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VB
cmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewot
ICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkKLSAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFn
ZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Np
b24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4g
SWdub3JlIGl0LgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fcXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtl
UmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEu
aXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFn
ZU1hcFNlZWQsIHVybFN0cmluZyA9IHVybFN0cmluZy5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlv
bi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAg
ICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpCisgICAgICAgICAgICAgICAgbV9lcGhlbWVyYWxT
dG9yYWdlLnJlbW92ZShzZWN1cml0eU9yaWdpbkRhdGEpOworICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVu
IGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICBzdG9yYWdlQXJlYS0+Y2xlYXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdl
QXJlYUlELCB1cmxTdHJpbmcpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFn
ZUFyZWFNYXA6OkRpZENsZWFyKHN0b3JhZ2VNYXBTZWVkKSwgc3RvcmFnZU1hcElEKTsKKyAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3Jh
Z2VBcmVhSUQsIHVybFN0cmluZyk7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OndhaXRVbnRpbFdyaXRlc0Zpbmlz
aGVkKCkKQEAgLTk3NSwxOCArOTg4LDQgQEAgU3RvcmFnZU1hbmFnZXI6OlRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSogU3RvcmFnZU1hbmFnZXI6OmdldE9yQ3JlYXRlVHJhbnMKICAgICB9
KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmRpc3Bh
dGNoTWVzc2FnZVRvUXVldWUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgJmNvbm5lY3Rpb24sICZkZWNvZGVyXSB7Ci0gICAgICAgIGRp
ZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgIH0pOwotfQotCi12b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaFN5bmNNZXNzYWdlVG9RdWV1ZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKLXsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmY29ubmVjdGlvbiwgJmRlY29kZXIs
IHJlcGx5RW5jb2RlciA9IFdURk1vdmUocmVwbHlFbmNvZGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOwotICAgIH0pOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgK
aW5kZXggNGE1YjcxODZmNTgzMmE4MWY2NzAwNmYzMmJkZTNjNWU0NGM1MTk2ZS4uYmVkZjdlZjdh
OWI2YjNkYzJjM2QxM2Y2OTgwZjViZjc0NDliNDc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmgKQEAgLTU0
LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsb3dlZFNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlQ29ubmVjdGlvbih1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIElQQzo6Q29u
bmVjdGlvbiYpOwogICAgIHZvaWQgY2xvbmVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRf
dCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVpbnQ2NF90IG5ld1N0b3JhZ2VOYW1lc3BhY2VJRCk7CiAK
LSAgICB2b2lkIHByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAg
ICAgdm9pZCBwcm9jZXNzRGlkQ2xvc2VDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogICAg
IHZvaWQgd2FpdFVudGlsV3JpdGVzRmluaXNoZWQoKTsKIApAQCAtNzAsMTYgKzY5LDEzIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZ2V0TG9jYWxTdG9yYWdlT3JpZ2luRGV0YWlscyhGdW5jdGlvbjx2
b2lkKFZlY3RvcjxMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI6Ok9yaWdpbkRldGFpbHM+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlVG9RdWV1
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKLSAgICB2b2lkIGRpc3BhdGNoU3lu
Y01lc3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFN0b3JhZ2VNYW5hZ2VyKGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KTsKLQogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgog
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5
RW5jb2Rlcikgb3ZlcnJpZGU7CiAKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3RvcmFnZU1hbmFn
ZXIoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOworCiAgICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycy4KICAgICB2b2lkIGNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rp
b24mLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYpOwogICAgIHZvaWQgY3JlYXRlVHJhbnNpZW50
TG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwg
dWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
JiB0b3BMZXZlbE9yaWdpbkRhdGEsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKQEAg
LTkyLDYgKzg4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0
aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJ
RCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBj
bGVhcihJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWlu
dDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRf
dCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogCisgICAgdm9pZCBk
aWRHZXRWYWx1ZXMoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOworCiAgICAgY2xhc3MgU3RvcmFnZUFyZWE7CiAg
ICAgU3RvcmFnZUFyZWEqIGZpbmRTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRf
dCkgY29uc3Q7CiAKQEAgLTExNiw2ICsxMTQsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBo
ZW1lcmFsU3RvcmFnZTsKICAgICBib29sIG1faXNFcGhlbWVyYWwgeyBmYWxzZSB9OwogCisgICAg
dHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik+PiBHZXRWYWx1ZXNDYWxsYmFjazsKKyAgICBIYXNoTWFw
PFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+LCBHZXRWYWx1ZXNDYWxsYmFjaz4gbV9nZXRWYWx1ZXND
YWxsYmFja3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MWVhYmM3NWUyODI3MTVkZmQ4YzRl
ZTkzNTMzOTAzMDY2MjgzYTdmLi5hZjliYTdjZmZmYjU2ODAxNGEzNzQ3YTIyZWFjZTVjYWVjNDIx
YmRlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTktMDUtMjIgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIyNDU1NDAgW01hYyBXSzJdIFRlc3RX
ZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nlc3NDcmFzaGVzIGlzIGEgZmxha3kg
ZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAwMzY0ND4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJWaWV3IHdhcyB3cm9uZ2x5IGxv
YWRlZCBtdWx0aXBsZSB0aW1lcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW06CisgICAgICAgIChURVNUKToKKwog
MjAxOS0wNS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gRml4IHRoZSBidWlsZCB3aXRoIEhBVkUoQUNDRVNTSUJJTElU
WSkgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCmluZGV4IDBhNWM3MDMy
NGNiN2ZlMTUzM2EzOWRmZGIxZGZiNmQ2NWZjMDUyZDUuLjAyYTU1ZjQ5MGMwMGVlYjBkNDBkMWM3
MmIzZjBkYmM2YTNjODg4NTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAt
NjgsMjEgKzY4LDE4IEBAIFRFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hl
cykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3Qg
PSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJsb2NhbC1zdG9yYWdlLXByb2Nlc3MtY3Jhc2hlcyIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
IEVYUEVDVF9XS19TVFJFUShAImxvY2FsOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV0pOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246
c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAKICAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOwotICAgIAorCiAg
ICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlw
dE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAIk5ldHdvcmsgUHJvY2VzcyBDcmFzaGVk
IiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370439</attachid>
            <date>2019-05-22 13:34:11 -0700</date>
            <delta_ts>2019-05-22 14:24:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198090-20190522133411.patch</filename>
            <type>text/plain</type>
            <size>33461</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ3NTRjYzlkMTEzMDZiYjhi
NmQ5OWVlOGEyMjdiOGMzYjVhMzVlZWEuLjY3MzBkYTgzYmFmYWRkODY1NDBhMTQ2ODI4ZDRmZTY4
ODFkNmZmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTktMDUtMjIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIy
NDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nl
c3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAw
MzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
ZSB1c2VkIHRvIGRpc3BhdGNoIFN0b3JhZ2VNYW5hZ2VyIG1lc3NhZ2UgdG8gU3RvcmFnZU1hbmFn
ZXIncyB3b3JrIHF1ZXVlLCB3aGljaCByZXF1aXJlZCBtZXNzYWdlIGhhbmRsZXIgdG8gYmUKKyAg
ICAgICAgYWRkZWQgdG8gcXVldWUgYmVmb3JlIHJlY2VpdmluZyBmaXJzdCBTdG9yYWdlTWFuYWdl
ciBtZXNzYWdlLCBvdGhlcndpc2UgbmV0d29yayBwcm9jZXNzIHdvdWxkIG5vdCBrbm93IGhvdyB0
bworICAgICAgICBkZWNvZGUgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgQWZ0ZXIgcjI0NTU0MCwg
d2hlbiBuZXRvcmsgcHJvY2VzcyBjcmFzaGVzIGFuZCBkb20gc3RvcmFnZSBpcyBhY2Nlc3NlZCBm
cm9tIHdlYiBwcm9jZXNzIGFmdGVyIHRoYXQsIHdlYiBwcm9jZXNzIAorICAgICAgICByZS1lc3Rh
Ymxpc2hlcyBpdHMgY29ubmVjdGlvbiB0byBuZXR3b3JrIHByb2Nlc3MsIGFza3MgbmV0d29yayBw
cm9jZXNzIHRvIGFkZCBtZXNzYWdlIGhhbmRsZXIsIGFuZCB0aGVuIHNlbmRzIAorICAgICAgICBT
dG9yYWdlTWFuYWdlciBtZXNzYWdlIGltbWVkaWF0ZWx5LiBCZWNhdXNlIHdvcmsgcXVldWUgbWVz
c2FnZSByZWNlaXZlciBpcyBhZGRlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGluIAorICAgICAg
ICBuZXR3b3JrIHByb2Nlc3MsIGl0IGlzIHBvc3NpYmxlIHRoZSBTdG9yYWdlTWFuYWdlciBtZXNz
YWdlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGF0LgorCisgICAgICAgIEEgc2FmZSBhbmQgZWFzeSBy
ZXNvbHV0aW9uIGlzIHRvIG5vdCBkaXNwYXRjaCBTdG9yYWdlTWFuYWdlciBtZXNzYWdlIHRvIHdv
cmsgcXVldWUsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byAKKyAgICAgICAgd2FpdCBmb3IgdGhl
IG1lc3NhZ2UgcmVjZWl2ZXIgdG8gYmUgYWRkZWQuIEhhbmRsaW5nIG1lc3NhZ2Ugb24gdGhlIG1h
aW4gdGhyZWFkIGFsc28gYWxsb3dzIHVzIHRvIHVudHlpbmcgdGhlIAorICAgICAgICBrbm90IHRo
YXQgYmluZHMgU3RvcmFnZU1hbmFnZXIgYW5kIGNvbm5lY3Rpb24sIHdoaWNoIG1heSBiZSBhIHBy
ZWZlcnJlZCBkZXNpZ24gaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6d2ViUGFnZVdhc0FkZGVkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnByb2Nlc3NEaWRDbG9zZUNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVTZXNzaW9uU3Rv
cmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkaWRHZXRWYWx1ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0VmFsdWVzKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6c2V0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cmVt
b3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjbGVhcik6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoTWVzc2Fn
ZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZGlz
cGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKwogMjAxOS0wNS0yMSAgUGVyIEFybmUg
Vm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2FuZGJveCB2aW9sYXRpb24g
aXMgbWFraW5nIHRoZSBXZWJDb250ZW50IHByb2Nlc3MgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggMThkYjBkYTg2OThjZmYwMjA5OTU5MDNmOTM3OTFhNzRlMjYzMjZmMi4u
M2Q3MWY4ZjZiMWI2YzI2ZGIwNTUwZjg4YWE1ZWUxMTQ0MjEwYTkwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
bwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRv
KiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb25CeUNvbm5lY3Rpb24o
Y29ubmVjdGlvbikpIHsKLSAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlz
cGF0Y2hNZXNzYWdlVG9RdWV1ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKKyAgICAgICAgICAgIHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzMsNyAr
MjczLDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmUKIAogICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nl
c3MtPm5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0gICAgICAgICAg
ICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpc3BhdGNoU3luY01lc3NhZ2VUb1F1ZXVlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5KTsKKyAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VN
YW5hZ2VyKCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYmNkNWFiNmMwMjhl
OThjMjU1Mjk3NzEwNzFmZjBlZmFiMzZmY2JhYS4uYTVkNmY1Y2ZjYzdjNDMyNWU5YWQ3MzEzNmYz
NmZkYTI5OWQxZGUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKQEAgLTI2MzUsNyArMjYzNSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OndlYlBhZ2VXYXNBZGRlZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFBBTDo6U2Vzc2lv
bklECiAKICAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKTsKICAg
ICBtX3Nlc3Npb25CeUNvbm5lY3Rpb24uZW5zdXJlKGNvbm5lY3Rpb25JRCwgWyZdKCkgewotICAg
ICAgICBzdG9yYWdlTWFuYWdlci5wcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKGNvbm5lY3Rpb24p
OwogICAgICAgICByZXR1cm4gc2Vzc2lvbklEOwogICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNw
cAppbmRleCA5NzE1Nzg3N2U4NDBiZWNkMjU4YzA2ZTY5N2E0ZGU4ZjZjMDIzMzE2Li4yYjQzNDRk
N2ZmMjEyZDIwNDU0MGQzNzMxY2UwZjJmNzE0NzRlYWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAK
QEAgLTU1MSwxNSArNTUxLDggQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y2xvbmVTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHUKICAgICB9KTsKIH0K
IAotdm9pZCBTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5hZGRXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOwotfQotCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpwcm9j
ZXNzRGlkQ2xvc2VDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAg
ICBjb25uZWN0aW9uLnJlbW92ZVdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7Ci0KICAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQg
PSBjb25uZWN0aW9uLnVuaXF1ZUlEKCldKCkgbXV0YWJsZSB7CiAgICAgICAgIFZlY3RvcjxzdGQ6
OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+PiBjb25uZWN0aW9uQW5k
U3RvcmFnZU1hcElEUGFpcnNUb1JlbW92ZTsKICAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJl
YSA6IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uKSB7CkBAIC03MTgsMjEzICs3MTEsMjE5IEBA
IHZvaWQgU3RvcmFnZU1hbmFnZXI6OmRlbGV0ZUxvY2FsU3RvcmFnZUVudHJpZXNGb3JPcmlnaW5z
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTCiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxv
Y2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEm
JiBzZWN1cml0eU9yaWdpbkRhdGEpCiB7Ci0gICAgLy8gRklYTUU6IFJlcGxhY2UgdGhpcyBjaGVj
ayBpZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDQ4IGlzIGRv
bmUuCi0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKCFtX2lzRXBo
ZW1lcmFsKTsKLSAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0
X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwg
c3RvcmFnZU1hcElEKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCks
IHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZUlELCBzZWN1cml0eU9yaWdpbkRhdGEgPSBz
ZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIEFT
U0VSVCghbV9pc0VwaGVtZXJhbCk7CisgICAgICAgIHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIoY29ubmVj
dGlvbklELCBzdG9yYWdlTWFwSUQpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEg
bWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQoKEhhc2hNYXA8c3RkOjpwYWlyPElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj46OmlzVmFsaWRL
ZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKSk7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVCgoSGFzaE1hcDxz
dGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+LCBSZWZQdHI8U3Rv
cmFnZUFyZWE+Pjo6aXNWYWxpZEtleShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcikpKTsK
IAotICAgIGF1dG8gcmVzdWx0ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKGNvbm5l
Y3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyLCBudWxscHRyKTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJ
RFBhaXIsIG51bGxwdHIpOwogCi0gICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBhIG1lc3Nh
Z2UgY2hlY2tzLgotICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNTRVJUKChI
YXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPj46OmlzVmFsaWRL
ZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSkpOworICAgICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxk
IGJlIGEgbWVzc2FnZSBjaGVja3MuCisgICAgICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgIEFTU0VSVCgoSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPExvY2FsU3RvcmFnZU5h
bWVzcGFjZT4+Ojppc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpKTsKIAotICAgIExvY2Fs
U3RvcmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlID0gZ2V0T3JDcmVhdGVMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZUlEKTsKKyAgICAgICAgTG9jYWxTdG9y
YWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShzdG9yYWdlTmFtZXNwYWNlSUQpOwogCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTmFtZXNw
YWNlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4K
KyAgICAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CiAKLSAgICBhdXRvIHN0b3Jh
Z2VBcmVhID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdU
Rk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKSk7Ci0gICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVy
KGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgYXV0byBzdG9y
YWdlQXJlYSA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShX
VEZNb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSkpOworICAgICAgICBzdG9yYWdlQXJlYS0+YWRkTGlz
dGVuZXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOwogCi0gICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOworICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gV1RGTW92ZShzdG9yYWdlQXJlYSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFn
ZU1hbmFnZXI6OmNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVz
cGFjZUlELCBTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BMZXZlbE9yaWdpbkRhdGEsIFNlY3VyaXR5
T3JpZ2luRGF0YSYmIG9yaWdpbikKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNT
RVJUKG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoeyBjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9KSk7Ci0KLSAgICAvLyBTZWUgaWYgd2UgYWxyZWFkeSBo
YXZlIHNlc3Npb24gc3RvcmFnZSBmb3IgdGhpcyBjb25uZWN0aW9uL29yaWdpbiBjb21iby4KLSAg
ICAvLyBJZiBzbywgdXBkYXRlIHRoZSBtYXAgd2l0aCB0aGUgbmV3IElELCBvdGhlcndpc2Uga2Vl
cCBvbiB0cnVja2luZy4KLSAgICBmb3IgKGF1dG8gaXQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbi5iZWdpbigpLCBlbmQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+a2V5LmZpcnN0ICE9IGNvbm5lY3Rpb24u
dW5pcXVlSUQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWY8U3RvcmFnZUFy
ZWE+IGFyZWEgPSAqaXQtPnZhbHVlOwotICAgICAgICBpZiAoIWFyZWEtPmlzU2Vzc2lvblN0b3Jh
Z2UoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIW9yaWdpbi5zZWN1cml0
eU9yaWdpbigpLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChhcmVhLT5zZWN1cml0eU9yaWdpbigpLnNl
Y3VyaXR5T3JpZ2luKCkuZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFy
ZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKLSAg
ICAgICAgLy8gSWYgdGhlIHN0b3JhZ2VNYXBJRCB1c2VkIGFzIGtleSBpbiBtX3N0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbiBpcyBubyBsb25nZXIgb25lIG9mIHRoZSBTdG9yYWdlQXJlYSdzIGxpc3Rl
bmVycywgdGhlbiB0aGlzIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgZGVzdHJveVN0b3JhZ2VNYXAo
KSB3YXMgYWxyZWFkeSBjYWxsZWQgZm9yIHRoYXQgc3RvcmFnZU1hcElEIGJ1dCBpdCBkZWNpZGVk
IG5vdCB0byByZW1vdmUgaXQgZnJvbSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbgotICAgICAg
ICAvLyBzbyB0aGF0IHdlIGNvdWxkIHJldXNlIGl0IGxhdGVyIG9uIGZvciB0aGUgc2FtZSBjb25u
ZWN0aW9uL29yaWdpbiBjb21iby4gSW4gdGhpcyBjYXNlLCBpdCBpcyBzYWZlIHRvIHJlbW92ZSB0
aGUgcHJldmlvdXMKLSAgICAgICAgLy8gc3RvcmFnZU1hcElEIGZyb20gbV9zdG9yYWdlQXJlYXNC
eUNvbm5lY3Rpb24uCi0gICAgICAgIGlmICghYXJlYS0+aGFzTGlzdGVuZXIoY29ubmVjdGlvbi51
bmlxdWVJRCgpLCBpdC0+a2V5LnNlY29uZCkpCi0gICAgICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5
Q29ubmVjdGlvbi5yZW1vdmUoaXQpOwotICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
bi5hZGQoeyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBXVEZNb3ZlKGFy
ZWEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmY29ubmVjdGlvbiwgc3RvcmFnZU1h
cElELCBzdG9yYWdlTmFtZXNwYWNlSUQsIHRvcExldmVsT3JpZ2luRGF0YSA9IHRvcExldmVsT3Jp
Z2luRGF0YS5pc29sYXRlZENvcHkoKSwgb3JpZ2luID0gb3JpZ2luLmlzb2xhdGVkQ29weSgpXSgp
IG11dGFibGUgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtl
eSh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0pKTsKIAotICAgIGF1dG8m
IHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQoeyBjb25uZWN0aW9uLnVuaXF1
ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAg
IC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgc2Vzc2lvbiBzdG9yYWdlIGZvciB0aGlzIGNvbm5l
Y3Rpb24vb3JpZ2luIGNvbWJvLgorICAgICAgICAvLyBJZiBzbywgdXBkYXRlIHRoZSBtYXAgd2l0
aCB0aGUgbmV3IElELCBvdGhlcndpc2Uga2VlcCBvbiB0cnVja2luZy4KKyAgICAgICAgZm9yIChh
dXRvIGl0ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4oKSwgZW5kID0gbV9zdG9y
YWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaWYgKGl0LT5rZXkuZmlyc3QgIT0gY29ubmVjdGlvbi51bmlxdWVJRCgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUmVmPFN0b3JhZ2VBcmVhPiBhcmVhID0gKml0
LT52YWx1ZTsKKyAgICAgICAgICAgIGlmICghYXJlYS0+aXNTZXNzaW9uU3RvcmFnZSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJpdHlP
cmlnaW4oKS0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1
cml0eU9yaWdpbigpLmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElE
KTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBzdG9yYWdlTWFwSUQgdXNlZCBhcyBrZXkgaW4gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIG9uZSBvZiB0aGUgU3RvcmFnZUFy
ZWEncyBsaXN0ZW5lcnMsIHRoZW4gdGhpcyBtZWFucworICAgICAgICAgICAgLy8gdGhhdCBkZXN0
cm95U3RvcmFnZU1hcCgpIHdhcyBhbHJlYWR5IGNhbGxlZCBmb3IgdGhhdCBzdG9yYWdlTWFwSUQg
YnV0IGl0IGRlY2lkZWQgbm90IHRvIHJlbW92ZSBpdCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uCisgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNvdWxkIHJldXNlIGl0IGxhdGVyIG9u
IGZvciB0aGUgc2FtZSBjb25uZWN0aW9uL29yaWdpbiBjb21iby4gSW4gdGhpcyBjYXNlLCBpdCBp
cyBzYWZlIHRvIHJlbW92ZSB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgIC8vIHN0b3JhZ2VNYXBJ
RCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLgorICAgICAgICAgICAgaWYgKCFhcmVh
LT5oYXNMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIGl0LT5rZXkuc2Vjb25kKSkKKyAg
ICAgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoaXQpOworICAg
ICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbi51bmlx
dWVJRCgpLCBzdG9yYWdlTWFwSUQgfSwgV1RGTW92ZShhcmVhKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2Ug
Y2hlY2suCi0gICAgQVNTRVJUKCFzbG90KTsKKyAgICAgICAgYXV0byYgc2xvdCA9IG1fc3RvcmFn
ZUFyZWFzQnlDb25uZWN0aW9uLmFkZCh7IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1h
cElEIH0sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKIAotICAgIGF1dG8qIHRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKHN0b3JhZ2VOYW1lc3BhY2VJRCwgV1RGTW92ZSh0b3BMZXZlbE9yaWdpbkRhdGEpKTsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAg
ICAgQVNTRVJUKCFzbG90KTsKIAotICAgIGF1dG8gc3RvcmFnZUFyZWEgPSB0cmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShvcmlnaW4p
KTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBz
dG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvKiB0cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UgPSBnZXRPckNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTmFt
ZXNwYWNlSUQsIFdURk1vdmUodG9wTGV2ZWxPcmlnaW5EYXRhKSk7CiAKLSAgICBzbG90ID0gV1RG
TW92ZShzdG9yYWdlQXJlYSk7CisgICAgICAgIGF1dG8gc3RvcmFnZUFyZWEgPSB0cmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShvcmln
aW4pKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVl
SUQoKSwgc3RvcmFnZU1hcElEKTsKKworICAgICAgICBzbG90ID0gV1RGTW92ZShzdG9yYWdlQXJl
YSk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9y
YWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElE
LCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3Vy
aXR5T3JpZ2luRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChtX2lzRXBoZW1lcmFsKSB7Ci0gICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5hZGQoc2Vj
dXJpdHlPcmlnaW5EYXRhLCBXZWJDb3JlOjpTdG9yYWdlTWFwOjpjcmVhdGUobG9jYWxTdG9yYWdl
RGF0YWJhc2VRdW90YUluQnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChtX3Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpOworICAg
IG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNvbm5lY3Rpb25JRCA9IGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElELCBzdG9y
YWdlTmFtZXNwYWNlSUQsIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5p
c29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsK
KyAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5hZGQoc2VjdXJpdHlPcmlnaW5EYXRhLCBX
ZWJDb3JlOjpTdG9yYWdlTWFwOjpjcmVhdGUobG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0
ZXMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZXMuaXNWYWxpZEtleShzdG9yYWdlTmFtZXNwYWNlSUQpKTsKIAotICAg
IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA9IG1fc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOwotICAgIGlmICgh
c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UpIHsKLSAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBp
bmNvbWluZyBtZXNzYWdlIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRoYXQncyBmb3Igc2Vzc2lvbiBz
dG9yYWdlIGZvciBhIHdlYiBwYWdlCi0gICAgICAgIC8vIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
bG9zZWQsIGp1c3QgaWdub3JlIGl0LgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSogc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgPSBtX3Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlcy5nZXQoc3RvcmFnZU5hbWVzcGFjZUlEKTsKKyAgICAgICAgaWYg
KCFzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSkgeworICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGlu
ZyBhbiBpbmNvbWluZyBtZXNzYWdlIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRoYXQncyBmb3Igc2Vz
c2lvbiBzdG9yYWdlIGZvciBhIHdlYiBwYWdlCisgICAgICAgICAgICAvLyB0aGF0IGhhcyBhbHJl
YWR5IGJlZW4gY2xvc2VkLCBqdXN0IGlnbm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4K
LSAgICBBU1NFUlQobV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleSh7IGNvbm5l
Y3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEIH0pKTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAgICAgQVNTRVJUKG1fc3RvcmFnZUFy
ZWFzQnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoeyBjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCB9
KSk7CiAKLSAgICBhdXRvJiBzbG90ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsg
Y29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQgfSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOworICAgICAgICBhdXRvJiBzbG90ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24u
YWRkKHsgY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQgfSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAg
ICBBU1NFUlQoIXNsb3QpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNz
YWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQoIXNsb3QpOwogCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UtPmFsbG93ZWRDb25uZWN0aW9ucygpLmNvbnRhaW5zKGNvbm5lY3Rpb24udW5pcXVlSUQo
KSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgor
ICAgICAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmFsbG93ZWRDb25uZWN0aW9u
cygpLmNvbnRhaW5zKGNvbm5lY3Rpb25JRCkpOwogCi0gICAgYXV0byBzdG9yYWdlQXJlYSA9IHNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2Vj
dXJpdHlPcmlnaW5EYXRhKSk7Ci0gICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rp
b24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgYXV0byBzdG9yYWdlQXJlYSA9
IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUo
c2VjdXJpdHlPcmlnaW5EYXRhKSk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihj
b25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzbG90ID0gV1RGTW92ZShzdG9yYWdl
QXJlYSk7CisgICAgICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGVzdHJveVN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCiB7Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgp
LCBzdG9yYWdlTWFwSURdKCkgbXV0YWJsZSB7CisgICAgICAgIHN0ZDo6cGFpcjxJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIo
Y29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOwogCi0gICAgc3RkOjpwYWlyPElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcihj
b25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5
Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKSk7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAg
IEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KGNvbm5lY3Rpb25B
bmRTdG9yYWdlTWFwSURQYWlyKSk7CiAKLSAgICBhdXRvIGl0ID0gbV9zdG9yYWdlQXJlYXNCeUNv
bm5lY3Rpb24uZmluZChjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcik7Ci0gICAgaWYgKGl0
ID09IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpKSB7Ci0gICAgICAgIC8vIFRoZSBj
b25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGUgbGFzdCBwYWdlIHdhcyBjbG9z
ZWQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGF1dG8gaXQgPSBtX3N0b3JhZ2VB
cmVhc0J5Q29ubmVjdGlvbi5maW5kKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKKyAg
ICAgICAgaWYgKGl0ID09IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmVuZCgpKSB7CisgICAg
ICAgICAgICAvLyBUaGUgY29ubmVjdGlvbiBoYXMgYmVlbiByZW1vdmVkIGJlY2F1c2UgdGhlIGxh
c3QgcGFnZSB3YXMgY2xvc2VkLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICBpdC0+dmFsdWUtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFn
ZU1hcElEKTsKKyAgICAgICAgaXQtPnZhbHVlLT5yZW1vdmVMaXN0ZW5lcihjb25uZWN0aW9uSUQs
IHN0b3JhZ2VNYXBJRCk7CiAKLSAgICAvLyBEb24ndCByZW1vdmUgc2Vzc2lvbiBzdG9yYWdlIG1h
cHMuIFRoZSB3ZWIgcHJvY2VzcyBtYXkgcmVjb25uZWN0IGFuZCBleHBlY3QgdGhlIGRhdGEgdG8g
c3RpbGwgYmUgYXJvdW5kLgotICAgIGlmIChpdC0+dmFsdWUtPmlzU2Vzc2lvblN0b3JhZ2UoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBEb24ndCByZW1vdmUgc2Vzc2lvbiBzdG9yYWdl
IG1hcHMuIFRoZSB3ZWIgcHJvY2VzcyBtYXkgcmVjb25uZWN0IGFuZCBleHBlY3QgdGhlIGRhdGEg
dG8gc3RpbGwgYmUgYXJvdW5kLgorICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc1Nlc3Npb25TdG9y
YWdlKCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOworICAgICAgICBtX3N0
b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5yZW1vdmUoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBh
aXIpOworICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1
cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZU1hbmFnZXI6OmRpZEdldFZh
bHVlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwg
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zLCBHZXRWYWx1ZXNDYWxsYmFjayYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBpdGVtcyA9IGNyb3NzVGhyZWFkQ29weShpdGVtcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGl0ZW1zKTsKKyAgICB9KTsKK30KIAotICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0g
ZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7Ci0gICAgaWYgKCFzdG9y
YWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAgaWYg
KGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5E
YXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3RvcmFnZU1h
cC0+aXRlbXMoKSk7Cit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRWYWx1ZXMoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9y
aWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQs
IEdldFZhbHVlc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlv
biA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3Jp
Z2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzdG9yYWdlTWFwU2VlZCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5n
ZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYSkgeworICAgICAg
ICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBzdG9y
YWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0eU9yaWdpbkRhdGEpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGlkR2V0VmFsdWVzKGNvbm5lY3Rpb24uZ2V0KCksIHN0
b3JhZ2VNYXBJRCwgc3RvcmFnZU1hcC0+aXRlbXMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3Rv
cmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3Jl
IGl0LgorICAgICAgICAgICAgcmV0dXJuIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBz
dG9yYWdlTWFwSUQsIHsgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9
Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgfQotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoc3Rv
cmFnZUFyZWEtPml0ZW1zKCkpOwotICAgIGNvbm5lY3Rpb24uc2VuZChNZXNzYWdlczo6U3RvcmFn
ZUFyZWFNYXA6OkRpZEdldFZhbHVlcyhzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7Cisg
ICAgICAgIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHN0b3Jh
Z2VBcmVhLT5pdGVtcygpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIGNv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRHZXRWYWx1ZXMoc3Rv
cmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VN
YW5hZ2VyOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVk
LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
KiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQp
OwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0
KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWU7
Ci0gICAgICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICBz
dG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2luRGF0
YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBzb3Vy
Y2VTdG9yYWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5ID0ga2V5Lmlzb2xhdGVkQ29weSgp
LCB2YWx1ZSA9IHZhbHVlLmlzb2xhdGVkQ29weSgpLCB1cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNv
bGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmlu
ZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQo
c2VjdXJpdHlPcmlnaW5EYXRhKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFs
dWU7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcXVvdGFFeGNlcHRpb247CisgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3Rh
RXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBh
Z2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3JlIGl0LgotICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgYm9vbCBxdW90YUVycm9yOwotICAgIHN0b3JhZ2VBcmVhLT5zZXRJ
dGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCB2YWx1
ZSwgdXJsU3RyaW5nLCBxdW90YUVycm9yKTsKLSAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VBcmVhTWFwOjpEaWRTZXRJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXksIHF1b3RhRXJy
b3IpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBib29sIHF1b3RhRXJyb3I7CisgICAgICAgIHN0
b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24tPnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIGtleSwgdmFsdWUsIHVybFN0cmluZywgcXVvdGFFcnJvcik7CisgICAgICAgIGNvbm5l
Y3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRTZXRJdGVtKHN0b3JhZ2VN
YXBTZWVkLCBrZXksIHF1b3RhRXJyb3IpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2
b2lkIFN0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0
ZW1zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGF1dG8q
IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCkp
Ci0gICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtcyhpdGVtcyk7CisgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9
IG1ha2VSZWYoY29ubmVjdGlvbiksIHN0b3JhZ2VNYXBJRCwgaXRlbXMgPSBjcm9zc1RocmVhZENv
cHkoaXRlbXMpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoYXV0byogc3RvcmFnZUFyZWEgPSBm
aW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKSkKKyAgICAgICAg
ICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtcyhpdGVtcyk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3Rv
cmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFn
ZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VBcmVh
ID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJRCk7Ci0gICAgaWYgKCFz
dG9yYWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkgewotICAgICAgICAgICAg
aWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmln
aW5EYXRhKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAgICAg
ICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbm5lY3Rp
b24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdpbkRhdGEgPSBzZWN1cml0eU9y
aWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwgc291cmNlU3RvcmFnZUFyZWFJ
RCwgc3RvcmFnZU1hcFNlZWQsIGtleSA9IGtleS5pc29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0g
dXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvKiBzdG9y
YWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQp
OworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAgICAgICBpZiAobV9pc0VwaGVt
ZXJhbCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2VwaGVtZXJh
bFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIG9sZFZhbHVlOworICAgICAgICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJ
dGVtKGtleSwgb2xkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEg
Zm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCi0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0
aW9uLnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdXJsU3RyaW5nKTsKLSAg
ICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVt
KHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBzdG9yYWdlQXJl
YS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlE
LCBrZXksIHVybFN0cmluZyk7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0
b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBzdG9yYWdl
TWFwSUQpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjbGVhcihJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3Vy
aXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9y
YWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9y
YWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBzdG9yYWdlTWFwSUQpOwotICAg
IGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpCi0gICAgICAg
ICAgICBtX2VwaGVtZXJhbFN0b3JhZ2UucmVtb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSk7Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFz
IGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwgc2VjdXJpdHlPcmlnaW5EYXRh
ID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBzdG9yYWdlTWFwSUQsIHNvdXJj
ZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCB1cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNv
bGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8qIHN0b3JhZ2VBcmVhID0gZmlu
ZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lzRXBoZW1lcmFsKQorICAgICAg
ICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKTsK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBmb3IgYSBwYWdl
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogCi0gICAgc3RvcmFnZUFyZWEtPmNsZWFyKGNvbm5lY3Rpb24udW5p
cXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwgdXJsU3RyaW5nKTsKLSAgICBjb25uZWN0aW9u
LnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVhcihzdG9yYWdlTWFwU2VlZCks
IHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcihjb25uZWN0aW9uLT51
bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1cmxTdHJpbmcpOworICAgICAgICBjb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlkQ2xlYXIoc3RvcmFnZU1h
cFNlZWQpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2Vy
Ojp3YWl0VW50aWxXcml0ZXNGaW5pc2hlZCgpCkBAIC05NzUsMTggKzk3NCw0IEBAIFN0b3JhZ2VN
YW5hZ2VyOjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIFN0b3JhZ2VNYW5hZ2VyOjpn
ZXRPckNyZWF0ZVRyYW5zCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi12b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIG1fcXVldWUtPmRpc3Bh
dGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZjb25uZWN0aW9uLCAm
ZGVjb2Rlcl0gewotICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6ZGlzcGF0Y2hTeW5jTWVzc2Fn
ZVRvUXVldWUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
JmNvbm5lY3Rpb24sICZkZWNvZGVyLCByZXBseUVuY29kZXIgPSBXVEZNb3ZlKHJlcGx5RW5jb2Rl
cildICgpIG11dGFibGUgewotICAgICAgICBkaWRSZWNlaXZlU3luY01lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICB9KTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4IDRhNWI3MTg2ZjU4MzJhODFmNjcwMDZmMzJiZGUz
YzVlNDRjNTE5NmUuLmJmMDc4ODNlMGU4ZGY5NTExYzFmZDZjZmIzMDNiNTE2MTY3NTVmZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5oCkBAIC00Myw2ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5Owog
Cit0eXBlZGVmIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mKT4gR2V0VmFsdWVzQ2FsbGJhY2s7CisKIGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIDogcHVi
bGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkpOwpAQCAtNTQsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmVBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VDb25uZWN0aW9uKHVpbnQ2NF90IHN0
b3JhZ2VOYW1lc3BhY2VJRCwgSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCBjbG9uZVNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgdWludDY0X3Qg
bmV3U3RvcmFnZU5hbWVzcGFjZUlEKTsKIAotICAgIHZvaWQgcHJvY2Vzc1dpbGxPcGVuQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHByb2Nlc3NEaWRDbG9zZUNvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCB3YWl0VW50aWxXcml0ZXNGaW5pc2hlZCgp
OwogCkBAIC03MCwyMyArNzEsMjEgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZXRMb2NhbFN0b3Jh
Z2VPcmlnaW5EZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNl
VHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAg
dm9pZCBkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpOwotICAgIHZvaWQgZGlzcGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5j
b2Rlcik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgU3RvcmFnZU1hbmFnZXIoY29uc3QgU3Ry
aW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpX
b3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKSBvdmVycmlkZTsKIAorcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSk7CisKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQgY3JlYXRlTG9j
YWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWlu
dDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJik7
CiAgICAgdm9pZCBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9u
JiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcExldmVsT3JpZ2luRGF0YSwgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiYpOwogICAgIHZvaWQgY3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAo
SVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdl
TmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKICAgICB2b2lkIGRl
c3Ryb3lTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCk7
CiAKLSAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdlTWFw
U2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYpPiYmKTsKKyAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9y
YWdlTWFwU2VlZCwgR2V0VmFsdWVzQ2FsbGJhY2smJik7CisgICAgdm9pZCBkaWRHZXRWYWx1ZXMo
SVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgaXRlbXMsIEdldFZhbHVlc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRs
ZXIpOwogICAgIHZvaWQgc2V0SXRlbShJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9y
YWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIHNl
dEl0ZW1zKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgY29uc3QgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKTsKICAgICB2b2lkIHJlbW92ZUl0ZW0oSVBDOjpD
b25uZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90IHN0b3Jh
Z2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1h
cFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CkBAIC0x
MTUsNyArMTE0LDYgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhLCBSZWY8V2ViQ29yZTo6U3RvcmFnZU1hcD4+IG1fZXBoZW1lcmFsU3RvcmFnZTsK
ICAgICBib29sIG1faXNFcGhlbWVyYWwgeyBmYWxzZSB9OwotCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA4MWVhYmM3NWUyODI3MTVkZmQ4YzRlZTkzNTMzOTAzMDY2MjgzYTdmLi5hZjliYTdjZmZm
YjU2ODAxNGEzNzQ3YTIyZWFjZTVjYWVjNDIxYmRlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDUtMjIgIFNp
aHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVk
IGluIHIyNDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFn
ZVByb2Nlc3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81MTAwMzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJWaWV3IHdhcyB3cm9uZ2x5IGxvYWRlZCBtdWx0aXBsZSB0aW1lcy4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVu
Y2UubW06CisgICAgICAgIChURVNUKToKKwogMjAxOS0wNS0yMSAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IHRoZSBi
dWlsZCB3aXRoIEhBVkUoQUNDRVNTSUJJTElUWSkgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uu
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBl
cnNpc3RlbmNlLm1tCmluZGV4IDBhNWM3MDMyNGNiN2ZlMTUzM2EzOWRmZGIxZGZiNmQ2NWZjMDUy
ZDUuLjAyYTU1ZjQ5MGMwMGVlYjBkNDBkMWM3MmIzZjBkYmM2YTNjODg4NTMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lz
dGVuY2UubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2Nh
bFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbQpAQCAtNjgsMjEgKzY4LDE4IEBAIFRFU1QoV0tXZWJWaWV3
LCBMb2NhbFN0b3JhZ2VQcm9jZXNzQ3Jhc2hlcykKICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
ICAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJsb2NhbC1zdG9yYWdlLXBy
b2Nlc3MtY3Jhc2hlcyIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3Rd
OwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJFUShAImxvY2FsOnN0b3Jh
Z2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlID0gZmFsc2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAg
IEVYUEVDVF9XS19TVFJFUShAInNlc3Npb246c3RvcmFnZSIsIFtsYXN0U2NyaXB0TWVzc2FnZSBi
b2R5XSk7CiAKICAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfdGVybWluYXRl
TmV0d29ya1Byb2Nlc3NdOwotICAgIAorCiAgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFs
c2U7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOwogICAgIEVYUEVDVF9XS19TVFJF
UShAIk5ldHdvcmsgUHJvY2VzcyBDcmFzaGVkIiwgW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370445</attachid>
            <date>2019-05-22 14:24:57 -0700</date>
            <delta_ts>2019-05-22 15:03:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-198090-20190522142456.patch</filename>
            <type>text/plain</type>
            <size>33222</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1NTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ3NTRjYzlkMTEzMDZiYjhi
NmQ5OWVlOGEyMjdiOGMzYjVhMzVlZWEuLjIyZWQ0NTFlNDg2OTlkMjBjYWNjZThiMjljNjY5MGI0
MGE2NjRiY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTktMDUtMjIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQVBJIFRlc3QgbGFuZGVkIGluIHIy
NDU1NDAgW01hYyBXSzJdIFRlc3RXZWJLaXRBUEkuV0tXZWJWaWV3LkxvY2FsU3RvcmFnZVByb2Nl
c3NDcmFzaGVzIGlzIGEgZmxha3kgZmFpbHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTAw
MzY0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIFdl
IHVzZWQgdG8gZGlzcGF0Y2ggU3RvcmFnZU1hbmFnZXIgbWVzc2FnZSB0byBTdG9yYWdlTWFuYWdl
cidzIHdvcmsgcXVldWUsIHdoaWNoIHJlcXVpcmVkIG1lc3NhZ2UgaGFuZGxlciB0byBiZQorICAg
ICAgICBhZGRlZCB0byBxdWV1ZSBiZWZvcmUgcmVjZWl2aW5nIGZpcnN0IFN0b3JhZ2VNYW5hZ2Vy
IG1lc3NhZ2UsIG90aGVyd2lzZSBuZXR3b3JrIHByb2Nlc3Mgd291bGQgbm90IGtub3cgaG93IHRv
CisgICAgICAgIGRlY29kZSB0aGUgbWVzc2FnZS4KKworICAgICAgICBBZnRlciByMjQ1NTQwLCB3
aGVuIG5ldG9yayBwcm9jZXNzIGNyYXNoZXMgYW5kIGRvbSBzdG9yYWdlIGlzIGFjY2Vzc2VkIGZy
b20gd2ViIHByb2Nlc3MgYWZ0ZXIgdGhhdCwgd2ViIHByb2Nlc3MgCisgICAgICAgIHJlLWVzdGFi
bGlzaGVzIGl0cyBjb25uZWN0aW9uIHRvIG5ldHdvcmsgcHJvY2VzcywgYXNrcyBuZXR3b3JrIHBy
b2Nlc3MgdG8gYWRkIG1lc3NhZ2UgaGFuZGxlciwgYW5kIHRoZW4gc2VuZHMgCisgICAgICAgIFN0
b3JhZ2VNYW5hZ2VyIG1lc3NhZ2UgaW1tZWRpYXRlbHkuIEJlY2F1c2Ugd29yayBxdWV1ZSBtZXNz
YWdlIHJlY2VpdmVyIGlzIGFkZGVkIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaW4gCisgICAgICAg
IG5ldHdvcmsgcHJvY2VzcywgaXQgaXMgcG9zc2libGUgdGhlIFN0b3JhZ2VNYW5hZ2VyIG1lc3Nh
Z2UgaXMgcmVjZWl2ZWQgYmVmb3JlIHRoYXQuCisKKyAgICAgICAgQSBzYWZlIGFuZCBlYXN5IHJl
c29sdXRpb24gaXMgdG8gbm90IGRpc3BhdGNoIFN0b3JhZ2VNYW5hZ2VyIG1lc3NhZ2UgdG8gd29y
ayBxdWV1ZSwgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIAorICAgICAgICB3YWl0IGZvciB0aGUg
bWVzc2FnZSByZWNlaXZlciB0byBiZSBhZGRlZC4gSGFuZGxpbmcgbWVzc2FnZSBvbiB0aGUgbWFp
biB0aHJlYWQgYWxzbyBhbGxvd3MgdXMgdG8gdW50eWluZyB0aGUgCisgICAgICAgIGtub3QgdGhh
dCBiaW5kcyBTdG9yYWdlTWFuYWdlciBhbmQgY29ubmVjdGlvbiwgd2hpY2ggbWF5IGJlIGEgcHJl
ZmVycmVkIGRlc2lnbiBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNz
YWdlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp3ZWJQYWdlV2FzQWRkZWQpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc0RpZENsb3NlQ29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXApOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdl
TWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZVNlc3Npb25TdG9y
YWdlTWFwKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRlc3Ryb3lTdG9yYWdl
TWFwKToKKyAgICAgICAgKFdlYktpdDo6ZGlkR2V0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6
U3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5h
Z2VyOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnNldEl0ZW1z
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlTWFuYWdlcjo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmRpc3BhdGNoU3luY01lc3NhZ2VU
b1F1ZXVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyLmg6CisKIDIwMTktMDUtMjEgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFNhbmRib3ggdmlvbGF0aW9uIGlzIG1ha2luZyB0aGUgV2Vi
Q29udGVudCBwcm9jZXNzIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDE4
ZGIwZGE4Njk4Y2ZmMDIwOTk1OTAzZjkzNzkxYTc0ZTI2MzI2ZjIuLjNkNzFmOGY2YjFiNmMyNmRi
MDU1MGY4OGFhNWVlMTE0NDIxMGE5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBA
IC0yMjcsNyArMjI3LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW8KIAogICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0
d29ya1Byb2Nlc3MtPm5ldHdvcmtTZXNzaW9uQnlDb25uZWN0aW9uKGNvbm5lY3Rpb24pKSB7Ci0g
ICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpc3BhdGNoTWVzc2FnZVRvUXVl
dWUoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFu
YWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lCiAKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBtX25ldHdvcmtQcm9jZXNzLT5uZXR3b3JrU2Vzc2lv
bkJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKSkgewotICAgICAgICAgICAgc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKS5kaXNwYXRjaFN5bmNNZXNzYWdlVG9RdWV1ZShjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseSk7CisgICAgICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGJjZDVhYjZjMDI4ZTk4YzI1NTI5NzcxMDcxZmYw
ZWZhYjM2ZmNiYWEuLmE1ZDZmNWNmY2M3YzQzMjVlOWFkNzMxMzZmMzZmZGEyOTlkMWRlMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBA
IC0yNjM1LDcgKzI2MzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjp3ZWJQYWdlV2FzQWRkZWQo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRAogCiAgICAgYXV0byBj
b25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCk7CiAgICAgbV9zZXNzaW9uQnlDb25u
ZWN0aW9uLmVuc3VyZShjb25uZWN0aW9uSUQsIFsmXSgpIHsKLSAgICAgICAgc3RvcmFnZU1hbmFn
ZXIucHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICAgICAgICAgcmV0dXJu
IHNlc3Npb25JRDsKICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggOTcxNTc4Nzdl
ODQwYmVjZDI1OGMwNmU2OTdhNGRlOGY2YzAyMzMxNi4uMDAzOTQ1MDUzZjU1MDM0YzIzMDg3ZTkw
Nzk4YmY5YjdkZmJlODYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC01NTEsMTUgKzU1MSw4
IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNsb25lU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodWlu
dDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uKQotewotICAgIGNvbm5lY3Rpb24uYWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgp
LCB0aGlzKTsKLX0KLQogdm9pZCBTdG9yYWdlTWFuYWdlcjo6cHJvY2Vzc0RpZENsb3NlQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCiB7Ci0gICAgY29ubmVjdGlvbi5yZW1v
dmVXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpOwotCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlx
dWVJRCgpXSgpIG11dGFibGUgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPElQQzo6Q29ubmVj
dGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90Pj4gY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXJz
VG9SZW1vdmU7CiAgICAgICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbikgewpAQCAtNzE4LDIxMyArNzExLDIxOSBAQCB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpkZWxldGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6UwogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2NhbFN0b3JhZ2VNYXAoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90
IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5E
YXRhKQogewotICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoaXMgY2hlY2sgaWYgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA0OCBpcyBkb25lLgotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVCghbV9pc0VwaGVtZXJhbCk7Ci0gICAgc3Rk
OjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5k
U3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7Cisg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQsIHN0
b3JhZ2VOYW1lc3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRh
Lmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIW1faXNFcGhlbWVy
YWwpOworICAgICAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0
X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1h
cElEKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0g
ICAgQVNTRVJUKChIYXNoTWFwPHN0ZDo6cGFpcjxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1
aW50NjRfdD4sIFJlZlB0cjxTdG9yYWdlQXJlYT4+Ojppc1ZhbGlkS2V5KGNvbm5lY3Rpb25BbmRT
dG9yYWdlTWFwSURQYWlyKSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBt
ZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQoKEhhc2hNYXA8c3RkOjpwYWlyPElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj46OmlzVmFs
aWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKSk7CiAKLSAgICBhdXRvIHJlc3Vs
dCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmFkZChjb25uZWN0aW9uQW5kU3RvcmFnZU1h
cElEUGFpciwgbnVsbHB0cik7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9zdG9yYWdlQXJlYXNC
eUNvbm5lY3Rpb24uYWRkKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyLCBudWxscHRyKTsK
IAotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrcy4KLSAgICBB
U1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwotICAgIEFTU0VSVCgoSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4+Ojppc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3Bh
Y2VJRCkpKTsKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hl
Y2tzLgorICAgICAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBBU1NFUlQo
KEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+Pjo6aXNWYWxp
ZEtleShzdG9yYWdlTmFtZXNwYWNlSUQpKSk7CiAKLSAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uq
IGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHN0b3JhZ2VOYW1lc3BhY2VJRCk7CisgICAgICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbG9j
YWxTdG9yYWdlTmFtZXNwYWNlID0gZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uoc3Rv
cmFnZU5hbWVzcGFjZUlEKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3Nh
Z2UgY2hlY2suCi0gICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChs
b2NhbFN0b3JhZ2VOYW1lc3BhY2UpOwogCi0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGxvY2FsU3Rv
cmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKHNlY3VyaXR5T3Jp
Z2luRGF0YSkpOwotICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uLnVuaXF1
ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBsb2NhbFN0
b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShzZWN1cml0eU9y
aWdpbkRhdGEpKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb25J
RCwgc3RvcmFnZU1hcElEKTsKIAotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3Zl
KHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUo
c3RvcmFnZUFyZWEpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVU
cmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50
NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlP
cmlnaW5EYXRhJiYgdG9wTGV2ZWxPcmlnaW5EYXRhLCBTZWN1cml0eU9yaWdpbkRhdGEmJiBvcmln
aW4pCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVh
c0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdl
TWFwSUQgfSkpOwotCi0gICAgLy8gU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBzZXNzaW9uIHN0b3Jh
Z2UgZm9yIHRoaXMgY29ubmVjdGlvbi9vcmlnaW4gY29tYm8uCi0gICAgLy8gSWYgc28sIHVwZGF0
ZSB0aGUgbWFwIHdpdGggdGhlIG5ldyBJRCwgb3RoZXJ3aXNlIGtlZXAgb24gdHJ1Y2tpbmcuCi0g
ICAgZm9yIChhdXRvIGl0ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYmVnaW4oKSwgZW5k
ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPmtleS5maXJzdCAhPSBjb25uZWN0aW9uLnVuaXF1ZUlEKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVmPFN0b3JhZ2VBcmVhPiBhcmVhID0gKml0LT52
YWx1ZTsKLSAgICAgICAgaWYgKCFhcmVhLT5pc1Nlc3Npb25TdG9yYWdlKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+aXNTYW1l
U2NoZW1lSG9zdFBvcnQoYXJlYS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigpLmdl
dCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcmVhLT5hZGRMaXN0ZW5lcihj
b25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7Ci0gICAgICAgIC8vIElmIHRoZSBz
dG9yYWdlTWFwSUQgdXNlZCBhcyBrZXkgaW4gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24gaXMg
bm8gbG9uZ2VyIG9uZSBvZiB0aGUgU3RvcmFnZUFyZWEncyBsaXN0ZW5lcnMsIHRoZW4gdGhpcyBt
ZWFucwotICAgICAgICAvLyB0aGF0IGRlc3Ryb3lTdG9yYWdlTWFwKCkgd2FzIGFscmVhZHkgY2Fs
bGVkIGZvciB0aGF0IHN0b3JhZ2VNYXBJRCBidXQgaXQgZGVjaWRlZCBub3QgdG8gcmVtb3ZlIGl0
IGZyb20gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24KLSAgICAgICAgLy8gc28gdGhhdCB3ZSBj
b3VsZCByZXVzZSBpdCBsYXRlciBvbiBmb3IgdGhlIHNhbWUgY29ubmVjdGlvbi9vcmlnaW4gY29t
Ym8uIEluIHRoaXMgY2FzZSwgaXQgaXMgc2FmZSB0byByZW1vdmUgdGhlIHByZXZpb3VzCi0gICAg
ICAgIC8vIHN0b3JhZ2VNYXBJRCBmcm9tIG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLgotICAg
ICAgICBpZiAoIWFyZWEtPmhhc0xpc3RlbmVyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgaXQtPmtl
eS5zZWNvbmQpKQotICAgICAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24ucmVtb3Zl
KGl0KTsKLSAgICAgICAgbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlv
bi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQgfSwgV1RGTW92ZShhcmVhKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBz
dG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2VJRCwgdG9wTGV2ZWxPcmlnaW5EYXRhID0gdG9w
TGV2ZWxPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBvcmlnaW4gPSBvcmlnaW4uaXNvbGF0ZWRD
b3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1l
c3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5p
c1ZhbGlkS2V5KHsgY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQgfSkpOwogCi0gICAgYXV0byYg
c2xvdCA9IG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmFkZCh7IGNvbm5lY3Rpb24udW5pcXVl
SUQoKSwgc3RvcmFnZU1hcElEIH0sIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
Ly8gU2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBzZXNzaW9uIHN0b3JhZ2UgZm9yIHRoaXMgY29ubmVj
dGlvbi9vcmlnaW4gY29tYm8uCisgICAgICAgIC8vIElmIHNvLCB1cGRhdGUgdGhlIG1hcCB3aXRo
IHRoZSBuZXcgSUQsIG90aGVyd2lzZSBrZWVwIG9uIHRydWNraW5nLgorICAgICAgICBmb3IgKGF1
dG8gaXQgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5iZWdpbigpLCBlbmQgPSBtX3N0b3Jh
Z2VBcmVhc0J5Q29ubmVjdGlvbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBpZiAoaXQtPmtleS5maXJzdCAhPSBjb25uZWN0aW9uSUQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBSZWY8U3RvcmFnZUFyZWE+IGFyZWEgPSAqaXQtPnZhbHVlOwor
ICAgICAgICAgICAgaWYgKCFhcmVhLT5pc1Nlc3Npb25TdG9yYWdlKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIW9yaWdpbi5zZWN1cml0eU9yaWdpbigpLT5p
c1NhbWVTY2hlbWVIb3N0UG9ydChhcmVhLT5zZWN1cml0eU9yaWdpbigpLnNlY3VyaXR5T3JpZ2lu
KCkuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXJlYS0+
YWRkTGlzdGVuZXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpOworICAgICAgICAgICAgLy8g
SWYgdGhlIHN0b3JhZ2VNYXBJRCB1c2VkIGFzIGtleSBpbiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbiBpcyBubyBsb25nZXIgb25lIG9mIHRoZSBTdG9yYWdlQXJlYSdzIGxpc3RlbmVycywgdGhl
biB0aGlzIG1lYW5zCisgICAgICAgICAgICAvLyB0aGF0IGRlc3Ryb3lTdG9yYWdlTWFwKCkgd2Fz
IGFscmVhZHkgY2FsbGVkIGZvciB0aGF0IHN0b3JhZ2VNYXBJRCBidXQgaXQgZGVjaWRlZCBub3Qg
dG8gcmVtb3ZlIGl0IGZyb20gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24KKyAgICAgICAgICAg
IC8vIHNvIHRoYXQgd2UgY291bGQgcmV1c2UgaXQgbGF0ZXIgb24gZm9yIHRoZSBzYW1lIGNvbm5l
Y3Rpb24vb3JpZ2luIGNvbWJvLiBJbiB0aGlzIGNhc2UsIGl0IGlzIHNhZmUgdG8gcmVtb3ZlIHRo
ZSBwcmV2aW91cworICAgICAgICAgICAgLy8gc3RvcmFnZU1hcElEIGZyb20gbV9zdG9yYWdlQXJl
YXNCeUNvbm5lY3Rpb24uCisgICAgICAgICAgICBpZiAoIWFyZWEtPmhhc0xpc3RlbmVyKGNvbm5l
Y3Rpb25JRCwgaXQtPmtleS5zZWNvbmQpKQorICAgICAgICAgICAgICAgIG1fc3RvcmFnZUFyZWFz
QnlDb25uZWN0aW9uLnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhc0J5Q29u
bmVjdGlvbi5hZGQoeyBjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCB9LCBXVEZNb3ZlKGFyZWEp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KLSAgICBBU1NFUlQoIXNsb3QpOworICAgICAgICBh
dXRvJiBzbG90ID0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uYWRkKHsgY29ubmVjdGlvbklE
LCBzdG9yYWdlTWFwSUQgfSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgYXV0byog
dHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlID0gZ2V0T3JDcmVhdGVUcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU5hbWVzcGFjZUlELCBXVEZNb3ZlKHRvcExldmVsT3Jp
Z2luRGF0YSkpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNo
ZWNrLgorICAgICAgICBBU1NFUlQoIXNsb3QpOwogCi0gICAgYXV0byBzdG9yYWdlQXJlYSA9IHRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZN
b3ZlKG9yaWdpbikpOwotICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uLnVu
aXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGF1dG8qIHRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZSA9IGdldE9yQ3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHN0b3JhZ2VOYW1lc3BhY2VJRCwgV1RGTW92ZSh0b3BMZXZlbE9yaWdpbkRhdGEpKTsKIAotICAg
IHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgYXV0byBzdG9yYWdlQXJlYSA9
IHRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShX
VEZNb3ZlKG9yaWdpbikpOworICAgICAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVj
dGlvbklELCBzdG9yYWdlTWFwSUQpOworCisgICAgICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3JhZ2VB
cmVhKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlU2Vzc2lvblN0
b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFw
SUQsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2Vj
dXJpdHlPcmlnaW5EYXRhKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChz
ZWN1cml0eU9yaWdpbkRhdGEsIFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3Jh
Z2VEYXRhYmFzZVF1b3RhSW5CeXRlcykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1fc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFnZU5hbWVzcGFjZUlEKSk7Cisg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29ubmVjdGlvbklEID0gY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQsIHN0
b3JhZ2VOYW1lc3BhY2VJRCwgc2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRh
Lmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkg
eworICAgICAgICAgICAgbV9lcGhlbWVyYWxTdG9yYWdlLmFkZChzZWN1cml0eU9yaWdpbkRhdGEs
IFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1b3RhSW5C
eXRlcykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVChtX3Nlc3Np
b25TdG9yYWdlTmFtZXNwYWNlcy5pc1ZhbGlkS2V5KHN0b3JhZ2VOYW1lc3BhY2VJRCkpOwogCi0g
ICAgU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlID0gbV9z
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMuZ2V0KHN0b3JhZ2VOYW1lc3BhY2VJRCk7Ci0gICAgaWYg
KCFzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSkgewotICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFu
IGluY29taW5nIG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBzZXNzaW9u
IHN0b3JhZ2UgZm9yIGEgd2ViIHBhZ2UKLSAgICAgICAgLy8gdGhhdCBoYXMgYWxyZWFkeSBiZWVu
IGNsb3NlZCwganVzdCBpZ25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAg
IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA9IG1fc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VzLmdldChzdG9yYWdlTmFtZXNwYWNlSUQpOworICAgICAgICBp
ZiAoIXNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBnZXR0
aW5nIGFuIGluY29taW5nIG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3MgdGhhdCdzIGZvciBz
ZXNzaW9uIHN0b3JhZ2UgZm9yIGEgd2ViIHBhZ2UKKyAgICAgICAgICAgIC8vIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiBjbG9zZWQsIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNr
LgotICAgIEFTU0VSVChtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5pc1ZhbGlkS2V5KHsgY29u
bmVjdGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQgfSkpOworICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgorICAgICAgICBBU1NFUlQobV9zdG9yYWdl
QXJlYXNCeUNvbm5lY3Rpb24uaXNWYWxpZEtleSh7IGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElE
IH0pKTsKIAotICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5hZGQo
eyBjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIGF1dG8mIHNsb3QgPSBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlv
bi5hZGQoeyBjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCB9LCBudWxscHRyKS5pdGVyYXRvci0+
dmFsdWU7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgot
ICAgIEFTU0VSVCghc2xvdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1l
c3NhZ2UgY2hlY2suCisgICAgICAgIEFTU0VSVCghc2xvdCk7CiAKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgYmUgYSBtZXNzYWdlIGNoZWNrLgotICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZS0+YWxsb3dlZENvbm5lY3Rpb25zKCkuY29udGFpbnMoY29ubmVjdGlvbi51bmlxdWVJ
RCgpKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2su
CisgICAgICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+YWxsb3dlZENvbm5lY3Rp
b25zKCkuY29udGFpbnMoY29ubmVjdGlvbklEKSk7CiAKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0g
c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92ZShz
ZWN1cml0eU9yaWdpbkRhdGEpKTsKLSAgICBzdG9yYWdlQXJlYS0+YWRkTGlzdGVuZXIoY29ubmVj
dGlvbi51bmlxdWVJRCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBhdXRvIHN0b3JhZ2VBcmVh
ID0gc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV1RGTW92
ZShzZWN1cml0eU9yaWdpbkRhdGEpKTsKKyAgICAgICAgc3RvcmFnZUFyZWEtPmFkZExpc3RlbmVy
KGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKTsKIAotICAgIHNsb3QgPSBXVEZNb3ZlKHN0b3Jh
Z2VBcmVhKTsKKyAgICAgICAgc2xvdCA9IFdURk1vdmUoc3RvcmFnZUFyZWEpOworICAgIH0pOwog
fQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkZXN0cm95U3RvcmFnZU1hcChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKIHsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLnVuaXF1ZUlE
KCksIHN0b3JhZ2VNYXBJRF0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RkOjpwYWlyPElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFp
cihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCk7CiAKLSAgICBzdGQ6OnBhaXI8SVBDOjpDb25u
ZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWly
KGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBhIG1lc3NhZ2UgY2hlY2suCi0gICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFz
QnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpKTsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZSBjaGVjay4KKyAgICAg
ICAgQVNTRVJUKG1fc3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLmlzVmFsaWRLZXkoY29ubmVjdGlv
bkFuZFN0b3JhZ2VNYXBJRFBhaXIpKTsKIAotICAgIGF1dG8gaXQgPSBtX3N0b3JhZ2VBcmVhc0J5
Q29ubmVjdGlvbi5maW5kKGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKTsKLSAgICBpZiAo
aXQgPT0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKLSAgICAgICAgLy8gVGhl
IGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZSBsYXN0IHBhZ2Ugd2FzIGNs
b3NlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgYXV0byBpdCA9IG1fc3RvcmFn
ZUFyZWFzQnlDb25uZWN0aW9uLmZpbmQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBhaXIpOwor
ICAgICAgICBpZiAoaXQgPT0gbV9zdG9yYWdlQXJlYXNCeUNvbm5lY3Rpb24uZW5kKCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGUg
bGFzdCBwYWdlIHdhcyBjbG9zZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
ICAgIGl0LT52YWx1ZS0+cmVtb3ZlTGlzdGVuZXIoY29ubmVjdGlvbi51bmlxdWVJRCgpLCBzdG9y
YWdlTWFwSUQpOworICAgICAgICBpdC0+dmFsdWUtPnJlbW92ZUxpc3RlbmVyKGNvbm5lY3Rpb25J
RCwgc3RvcmFnZU1hcElEKTsKIAotICAgIC8vIERvbid0IHJlbW92ZSBzZXNzaW9uIHN0b3JhZ2Ug
bWFwcy4gVGhlIHdlYiBwcm9jZXNzIG1heSByZWNvbm5lY3QgYW5kIGV4cGVjdCB0aGUgZGF0YSB0
byBzdGlsbCBiZSBhcm91bmQuCi0gICAgaWYgKGl0LT52YWx1ZS0+aXNTZXNzaW9uU3RvcmFnZSgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIC8vIERvbid0IHJlbW92ZSBzZXNzaW9uIHN0b3Jh
Z2UgbWFwcy4gVGhlIHdlYiBwcm9jZXNzIG1heSByZWNvbm5lY3QgYW5kIGV4cGVjdCB0aGUgZGF0
YSB0byBzdGlsbCBiZSBhcm91bmQuCisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzU2Vzc2lvblN0
b3JhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uLnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcik7CisgICAgICAgIG1f
c3RvcmFnZUFyZWFzQnlDb25uZWN0aW9uLnJlbW92ZShjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElE
UGFpcik7CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZU1hbmFnZXI6OmdldFZhbHVlcyhJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHNl
Y3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9yYWdl
TWFwU2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorc3RhdGljIHZvaWQgZGlkR2V0VmFsdWVzKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMsIEdldFZhbHVlc0NhbGxiYWNrJiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtpdGVtcyA9IGNyb3NzVGhyZWFkQ29weShpdGVtcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGl0ZW1zKTsKKyAgICB9KTsKK30KIAotICAgIGF1
dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VNYXBJ
RCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJhbCkg
ewotICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFnZS5n
ZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoc3RvcmFnZU1hcC0+aXRlbXMoKSk7Cit2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpnZXRW
YWx1ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmJiBzZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQsIEdldFZhbHVlc0NhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHNlY3VyaXR5T3JpZ2lu
RGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwgc3RvcmFnZU1hcElELCBz
dG9yYWdlTWFwU2VlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFn
ZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFnZU1hcElEKTsKKyAgICAgICAgaWYgKCFzdG9y
YWdlQXJlYSkgeworICAgICAgICAgICAgaWYgKG1faXNFcGhlbWVyYWwpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byBzdG9yYWdlTWFwID0gbV9lcGhlbWVyYWxTdG9yYWdlLmdldChzZWN1cml0
eU9yaWdpbkRhdGEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlkR2V0VmFsdWVzKGNv
bm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VNYXBJRCwgc3RvcmFnZU1hcC0+aXRlbXMoKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHNlc3Npb24gc3RvcmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBi
ZWVuIGNsb3NlZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgcmV0dXJuIGRpZEdldFZhbHVlcyhj
b25uZWN0aW9uLmdldCgpLCBzdG9yYWdlTWFwSUQsIHsgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2Ug
YXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4K
LSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgfQotCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoc3RvcmFnZUFyZWEtPml0ZW1zKCkpOwotICAgIGNvbm5lY3Rpb24uc2Vu
ZChNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpZEdldFZhbHVlcyhzdG9yYWdlTWFwU2VlZCks
IHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIGRpZEdldFZhbHVlcyhjb25uZWN0aW9uLmdldCgpLCBz
dG9yYWdlTWFwSUQsIHN0b3JhZ2VBcmVhLT5pdGVtcygpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFw
OjpEaWRHZXRWYWx1ZXMoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwog
fQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW5EYXRhLCB1
aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHVpbnQ2
NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0
aW9uLCBzdG9yYWdlTWFwSUQpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYg
KG1faXNFcGhlbWVyYWwpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHN0b3JhZ2VNYXAgPSBtX2Vw
aGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAgICAgICAgICAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbjsK
LSAgICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVl
LCBxdW90YUV4Y2VwdGlvbik7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiks
IHNlY3VyaXR5T3JpZ2luRGF0YSA9IHNlY3VyaXR5T3JpZ2luRGF0YS5pc29sYXRlZENvcHkoKSwg
c3RvcmFnZU1hcElELCBzb3VyY2VTdG9yYWdlQXJlYUlELCBzdG9yYWdlTWFwU2VlZCwga2V5ID0g
a2V5Lmlzb2xhdGVkQ29weSgpLCB2YWx1ZSA9IHZhbHVlLmlzb2xhdGVkQ29weSgpLCB1cmxTdHJp
bmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8q
IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VN
YXBJRCk7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lz
RXBoZW1lcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBo
ZW1lcmFsU3RvcmFnZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgeworICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcXVvdGFFeGNl
cHRpb247CisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1
ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2Vzc2lvbiBzdG9yYWdlIGFyZWEgZm9y
IGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkLiBJZ25vcmUgaXQuCisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHNlc3Npb24gc3Rv
cmFnZSBhcmVhIGZvciBhIHBhZ2UgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC4gSWdub3Jl
IGl0LgotICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgYm9vbCBxdW90YUVycm9yOwotICAg
IHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNlU3RvcmFn
ZUFyZWFJRCwga2V5LCB2YWx1ZSwgdXJsU3RyaW5nLCBxdW90YUVycm9yKTsKLSAgICBjb25uZWN0
aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRTZXRJdGVtKHN0b3JhZ2VNYXBT
ZWVkLCBrZXksIHF1b3RhRXJyb3IpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBib29sIHF1b3Rh
RXJyb3I7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtKGNvbm5lY3Rpb24tPnVuaXF1ZUlE
KCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgdmFsdWUsIHVybFN0cmluZywgcXVvdGFFcnJv
cik7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpE
aWRTZXRJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXksIHF1b3RhRXJyb3IpLCBzdG9yYWdlTWFwSUQp
OworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpzZXRJdGVtcyhJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mIGl0ZW1zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rp
b24sIHN0b3JhZ2VNYXBJRCkpCi0gICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtcyhpdGVtcyk7
CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29ubmVjdGlvbiA9IG1ha2VSZWYoY29ubmVjdGlvbiksIHN0b3JhZ2VNYXBJRCwgaXRl
bXMgPSBjcm9zc1RocmVhZENvcHkoaXRlbXMpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoYXV0
byogc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoY29ubmVjdGlvbi5nZXQoKSwgc3RvcmFn
ZU1hcElEKSkKKyAgICAgICAgICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtcyhpdGVtcyk7CisgICAg
fSk7CiB9CiAKIHZvaWQgU3RvcmFnZU1hbmFnZXI6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdp
bkRhdGEsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJ
RCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGF1dG8qIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24sIHN0b3JhZ2VN
YXBJRCk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBpZiAobV9pc0VwaGVtZXJh
bCkgewotICAgICAgICAgICAgaWYgKGF1dG8gc3RvcmFnZU1hcCA9IG1fZXBoZW1lcmFsU3RvcmFn
ZS5nZXQoc2VjdXJpdHlPcmlnaW5EYXRhKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRW
YWx1ZTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFs
dWUpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pLCBzZWN1cml0eU9yaWdp
bkRhdGEgPSBzZWN1cml0eU9yaWdpbkRhdGEuaXNvbGF0ZWRDb3B5KCksIHN0b3JhZ2VNYXBJRCwg
c291cmNlU3RvcmFnZUFyZWFJRCwgc3RvcmFnZU1hcFNlZWQsIGtleSA9IGtleS5pc29sYXRlZENv
cHkoKSwgdXJsU3RyaW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewor
ICAgICAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLmdl
dCgpLCBzdG9yYWdlTWFwSUQpOworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7CisgICAgICAg
ICAgICBpZiAobV9pc0VwaGVtZXJhbCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHN0b3Jh
Z2VNYXAgPSBtX2VwaGVtZXJhbFN0b3JhZ2UuZ2V0KHNlY3VyaXR5T3JpZ2luRGF0YSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlOworICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2Ug
YXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4K
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAvLyBUaGlzIGlzIGEgc2Vz
c2lvbiBzdG9yYWdlIGFyZWEgZm9yIGEgcGFnZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2Vk
LiBJZ25vcmUgaXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBzdG9yYWdlQXJlYS0+
cmVtb3ZlSXRlbShjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGtl
eSwgdXJsU3RyaW5nKTsKLSAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVh
TWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBTZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQpOwor
ICAgICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBz
b3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIHVybFN0cmluZyk7CisgICAgICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRSZW1vdmVJdGVtKHN0b3JhZ2VNYXBT
ZWVkLCBrZXkpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpjbGVhcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBhdXRvKiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShjb25uZWN0aW9uLCBz
dG9yYWdlTWFwSUQpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgaWYgKG1faXNF
cGhlbWVyYWwpCi0gICAgICAgICAgICBtX2VwaGVtZXJhbFN0b3JhZ2UucmVtb3ZlKHNlY3VyaXR5
T3JpZ2luRGF0YSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3JhZ2UgYXJlYSBm
b3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBpdC4KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKSwg
c2VjdXJpdHlPcmlnaW5EYXRhID0gc2VjdXJpdHlPcmlnaW5EYXRhLmlzb2xhdGVkQ29weSgpLCBz
dG9yYWdlTWFwSUQsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIHN0b3JhZ2VNYXBTZWVkLCB1cmxTdHJp
bmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8q
IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGNvbm5lY3Rpb24uZ2V0KCksIHN0b3JhZ2VN
YXBJRCk7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChtX2lz
RXBoZW1lcmFsKQorICAgICAgICAgICAgICAgIG1fZXBoZW1lcmFsU3RvcmFnZS5yZW1vdmUoc2Vj
dXJpdHlPcmlnaW5EYXRhKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzZXNzaW9uIHN0b3Jh
Z2UgYXJlYSBmb3IgYSBwYWdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuIElnbm9yZSBp
dC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgc3RvcmFnZUFyZWEtPmNs
ZWFyKGNvbm5lY3Rpb24udW5pcXVlSUQoKSwgc291cmNlU3RvcmFnZUFyZWFJRCwgdXJsU3RyaW5n
KTsKLSAgICBjb25uZWN0aW9uLnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaWRDbGVh
cihzdG9yYWdlTWFwU2VlZCksIHN0b3JhZ2VNYXBJRCk7CisgICAgICAgIHN0b3JhZ2VBcmVhLT5j
bGVhcihjb25uZWN0aW9uLT51bmlxdWVJRCgpLCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1cmxTdHJp
bmcpOworICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6
RGlkQ2xlYXIoc3RvcmFnZU1hcFNlZWQpLCBzdG9yYWdlTWFwSUQpOworICAgIH0pOwogfQogCiB2
b2lkIFN0b3JhZ2VNYW5hZ2VyOjp3YWl0VW50aWxXcml0ZXNGaW5pc2hlZCgpCkBAIC05NzUsMTgg
Kzk3NCw0IEBAIFN0b3JhZ2VNYW5hZ2VyOjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uq
IFN0b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0ZVRyYW5zCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOwogfQogCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksICZjb25uZWN0aW9uLCAmZGVjb2Rlcl0gewotICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6
ZGlzcGF0Y2hTeW5jTWVzc2FnZVRvUXVldWUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBs
eUVuY29kZXIpCi17Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgJmNvbm5lY3Rpb24sICZkZWNvZGVyLCByZXBseUVuY29kZXIgPSBX
VEZNb3ZlKHJlcGx5RW5jb2RlcildICgpIG11dGFibGUgewotICAgICAgICBkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICB9KTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4IDRhNWI3MTg2ZjU4
MzJhODFmNjcwMDZmMzJiZGUzYzVlNDRjNTE5NmUuLmE4ODgzMzJlZmNmYjU5NDEzMGIyNjA4ODQ2
YWY0YTE4MjE4MmI3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCkBAIC00Myw2ICs0Myw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyOwogY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5OwogCit1c2luZyBHZXRWYWx1ZXNDYWxsYmFjayA9IENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT47CisKIGNsYXNzIFN0
b3JhZ2VNYW5hZ2VyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJl
Y2VpdmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwpAQCAtNTQsNyArNTYsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VDb25u
ZWN0aW9uKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwgSVBDOjpDb25uZWN0aW9uJik7CiAg
ICAgdm9pZCBjbG9uZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1l
c3BhY2VJRCwgdWludDY0X3QgbmV3U3RvcmFnZU5hbWVzcGFjZUlEKTsKIAotICAgIHZvaWQgcHJv
Y2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHByb2Nl
c3NEaWRDbG9zZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAgICAgdm9pZCB3YWl0VW50
aWxXcml0ZXNGaW5pc2hlZCgpOwogCkBAIC03MCwyMyArNzEsMjAgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZXRMb2NhbFN0b3JhZ2VPcmlnaW5EZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpOwogCi0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VUb1F1ZXVlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpOwotICAgIHZvaWQgZGlzcGF0Y2hTeW5jTWVzc2FnZVRvUXVl
dWUoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgU3RvcmFn
ZU1hbmFnZXIoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotCiAgICAgLy8g
SVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCiAgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKSBvdmVy
cmlkZTsKIAorcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTdG9yYWdlTWFuYWdlcihjb25zdCBTdHJp
bmcmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7CisKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgog
ICAgIHZvaWQgY3JlYXRlTG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmJik7CiAgICAgdm9pZCBjcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VN
YXAoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzdG9y
YWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcExldmVsT3Jp
Z2luRGF0YSwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYpOwogICAgIHZvaWQgY3JlYXRl
U2Vzc2lvblN0b3JhZ2VNYXAoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElE
LCB1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmKTsKICAgICB2b2lkIGRlc3Ryb3lTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ2
NF90IHN0b3JhZ2VNYXBJRCk7CiAKLSAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5lY3Rpb24m
LCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYpPiYmKTsKKyAgICB2b2lkIGdldFZhbHVlcyhJUEM6OkNvbm5l
Y3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1h
cElELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgR2V0VmFsdWVzQ2FsbGJhY2smJik7CiAgICAg
dm9pZCBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYmLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQs
IHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgc2V0SXRlbXMoSVBD
OjpDb25uZWN0aW9uJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgaXRlbXMpOwogICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb24m
LCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1
aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKQEAgLTExNSw3ICsxMTMs
NiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEs
IFJlZjxXZWJDb3JlOjpTdG9yYWdlTWFwPj4gbV9lcGhlbWVyYWxTdG9yYWdlOwogICAgIGJvb2wg
bV9pc0VwaGVtZXJhbCB7IGZhbHNlIH07Ci0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDgxZWFi
Yzc1ZTI4MjcxNWRmZDhjNGVlOTM1MzM5MDMwNjYyODNhN2YuLmRlZjE5MTM0NmQ3NzBkOTllY2Ex
Mzg3ZTUwOTE3Yjk1NTM1YzNjYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNS0yMiAgU2lodWkgTGl1ICA8
c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBBUEkgVGVzdCBsYW5kZWQgaW4gcjI0NTU0
MCBbTWFjIFdLMl0gVGVzdFdlYktpdEFQSS5XS1dlYlZpZXcuTG9jYWxTdG9yYWdlUHJvY2Vzc0Ny
YXNoZXMgaXMgYSBmbGFreSBmYWlsdXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTgwOTAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxMDAzNjQ0
PgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgV2ViVmll
dyB3YXMgd3JvbmdseSBsb2FkZWQgbXVsdGlwbGUgdGltZXMuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTktMDUtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUgYnVpbGQgd2l0aCBI
QVZFKEFDQ0VTU0lCSUxJVFkpIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5t
bQppbmRleCAwYTVjNzAzMjRjYjdmZTE1MzNhMzlkZmRiMWRmYjZkNjVmYzA1MmQ1Li4wMmE1NWY0
OTBjMDBlZWIwZDQwZDFjNzJiM2YwZGJjNmEzYzg4ODUzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVy
c2lzdGVuY2UubW0KQEAgLTY4LDIxICs2OCwxOCBAQCBURVNUKFdLV2ViVmlldywgTG9jYWxTdG9y
YWdlUHJvY2Vzc0NyYXNoZXMpCiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgTlNVUkxS
ZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWwtc3RvcmFnZS1wcm9jZXNzLWNyYXNo
ZXMiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKLSAgICAKKwog
ICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3Jp
cHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJsb2NhbDpzdG9yYWdlIiwgW2xhc3RT
Y3JpcHRNZXNzYWdlIGJvZHldKTsKLSAgICAKKwogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9
IGZhbHNlOwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCJzZXNzaW9uOnN0b3JhZ2UiLCBbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV0pOwogCiAg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9j
ZXNzXTsKLSAgICAKKwogICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOwotICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJOZXR3b3Jr
IFByb2Nlc3MgQ3Jhc2hlZCIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>