<?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>237335</bug_id>
          
          <creation_ts>2022-03-01 10:50:59 -0800</creation_ts>
          <short_desc>REGRESSION (r289474): cacheStoragePath is empty in NetworkStorageManager::localOriginStorageManager</short_desc>
          <delta_ts>2022-03-02 21:09:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Website Storage</component>
          <version>Safari Technology Preview</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=234925</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1847100</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-03-01 10:50:59 -0800</bug_when>
    <thetext>Whenever I launch MiniBrowser now, I get:

ERROR: File failed to delete. Error message: Operation not permitted
/Volumes/Data/Development/system/webkit/OpenSource/Source/WTF/wtf/posix/FileSystemPOSIX.cpp(265) : bool WTF::FileSystemImpl::deleteFile(const WTF::String &amp;)

the file is /Users/smfr/Library/Containers/org.webkit.MiniBrowser/Data/Library/Caches/WebKit/CacheStorage/salt

The backtrace is:

  * frame #0: 0x000000012d60e324 JavaScriptCore`WTF::FileSystemImpl::deleteFile(path={ length = 98, contents = &apos;/Users/smfr/Library/Containers/org.webkit.MiniBrowser/Data/Library/Caches/WebKit/CacheStorage/salt&apos; }) at FileSystemPOSIX.cpp:267:12
    frame #1: 0x000000012d60265d JavaScriptCore`WTF::FileSystemImpl::readOrMakeSalt(path={ length = 98, contents = &apos;/Users/smfr/Library/Containers/org.webkit.MiniBrowser/Data/Library/Caches/WebKit/CacheStorage/salt&apos; }) at FileSystem.cpp:501:9
    frame #2: 0x000000011a6bd755 WebKit`WebKit::CacheStorage::Engine::storagePath(rootDirectory={ length = 93, contents = &apos;/Users/smfr/Library/Containers/org.webkit.MiniBrowser/Data/Library/Caches/WebKit/CacheStorage&apos; }, origin=0x0000700002c542d0) at CacheStorageEngine.cpp:215:17
    frame #3: 0x000000011a82ba72 WebKit`WebKit::NetworkStorageManager::localOriginStorageManager(this=0x0000700002c53ec0)::$_3::operator()() const at NetworkStorageManager.cpp:240:33
    frame #4: 0x000000011a82b71a WebKit`void WTF::HashMapEnsureTranslator&lt;WTF::HashMap&lt;WebCore::ClientOrigin, std::__1::unique_ptr&lt;WebKit::OriginStorageManager, std::__1::default_delete&lt;WebKit::OriginStorageManager&gt; &gt;, WTF::DefaultHash&lt;WebCore::ClientOrigin&gt;, WTF::HashTraits&lt;WebCore::ClientOrigin&gt;, WTF::HashTraits&lt;std::__1::unique_ptr&lt;WebKit::OriginStorageManager, std::__1::defau...kStorageManager::localOriginStorageManager(this={ tableSize = 0, keyCount = 0 }, key=0x0000700002c542d0, functor=0x0000700002c53ec0)::$_3&gt;(WebCore::ClientOrigin const&amp;, WebKit::NetworkStorageManager::localOriginStorageManager(WebCore::ClientOrigin const&amp;, WebKit::NetworkStorageManager::ShouldWriteOriginFile)::$_3&amp;&amp;) at HashMap.h:389:28
    frame #7: 0x000000011a80dc50 WebKit`WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WTF::HashTable&lt;WebCore::ClientOrigin, WTF::KeyValueP...anager(this={ tableSize = 0, keyCount = 0 }, key=0x0000700002c542d0, functor=0x0000700002c53ec0)::$_3&gt;(WebCore::ClientOrigin const&amp;, WebKit::NetworkStorageManager::localOriginStorageManager(WebCore::ClientOrigin const&amp;, WebKit::NetworkStorageManager::ShouldWriteOriginFile)::$_3&amp;&amp;) at HashMap.h:445:12
    frame #8: 0x000000011a80dbcc WebKit`WebKit::NetworkStorageManager::localOriginStorageManager(this=0x00000001060d0100, origin=0x0000700002c542d0, shouldWriteOriginFile=No) at NetworkStorageManager.cpp:234:42
    frame #9: 0x000000011a812908 WebKit`WebKit::NetworkStorageManager::connectToStorageArea(this=0x00000001060d0100, connection=0x000000010605c340, type=Local, sourceIdentifier=(m_identifier = 11), namespaceIdentifier=(m_identifier = 1), origin=0x0000700002c542d0, completionHandler=0x0000700002c54118)&gt;&amp;&amp;) at NetworkStorageManager.cpp:727:34
    frame #10: 0x00000001199ba661 WebKit`void IPC::callMemberFunctionImpl&lt;WebKit::NetworkStorageManager, void (WebKit::NetworkStorageManager::*)(IPC:..._1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt;) at HandleMessage.h:153:5
    frame #11: 0x00000001199b5e8b WebKit`void IPC::callMemberFunction&lt;WebKit::NetworkStorageManager, void (WebKit::NetworkStorageManager::*)(IPC::Connection&amp;, WebCore::StorageType, WTF::ObjectIdentifier&lt;WebKit::StorageAreaMapIdentifierType&gt;, WTF::ObjectIdentifier&lt;WebKit::StorageNamespaceIdentifierType&gt;, WebCore::ClientOrigin const&amp;, WTF::CompletionHandler&lt;void (WTF::ObjectIdentifier&lt;WebKit::StorageAreaIdentifierType&gt;, WTF::HashMap&lt;WTF::String, WTF::String, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTableTraits&gt;, unsigned long long)&gt;&amp;&amp;), void (WTF::ObjectIdentifier&lt;WebKit::StorageAreaIdentifierType&gt; const&amp;, WTF::HashMap&lt;WTF::String, WTF::String, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTableTraits&gt; const&amp;, unsigned long long), std::__1::tuple&lt;WebCore::StorageType, WTF::ObjectIdentifier&lt;WebKit::StorageAreaMapIdentifierType&gt;, WTF::ObjectIdentifier&lt;WebKit::StorageNamespaceIdentifierType&gt;, WebCore::ClientOrigin&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt; &gt;(connection=0x000000010605c340, args=size=4, completionHandler=0x0000700002c542a0, object=0x00000001060d0100, function=40 28 81 1a 01 00 00 00 00 00 00 00 00 00 00 00)&gt;&amp;&amp;, WebKit::NetworkStorageManager*, void (WebKit::NetworkStorageManager::*)(IPC::Connection&amp;, WebCore::StorageType, WTF::ObjectIdentifier&lt;WebKit::StorageAreaMapIdentifierType&gt;, WTF::ObjectIdentifier&lt;WebKit::StorageNamespaceIdentifierType&gt;, WebCore::ClientOrigin const&amp;, WTF::CompletionHandler&lt;void (WTF::ObjectIdentifier&lt;WebKit::StorageAreaIdentifierType&gt;, WTF::HashMap&lt;WTF::String, WTF::String, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTableTraits&gt;, unsigned long long)&gt;&amp;&amp;)) at HandleMessage.h:159:5
    frame #12: 0x0000000119986096 WebKit`void IPC::handleMessageAsyncWantsConnection&lt;Messages::NetworkStorageManager::ConnectToStorageArea, WebKit::NetworkStorageManager, void (WebKit::NetworkStorageManager::*)(IPC::Connection&amp;, WebCore::StorageType, WTF::ObjectIdentifier&lt;WebKit::StorageAreaMapIdentifierType&gt;, WTF::ObjectIdentifier&lt;WebKit::StorageNamespaceIdentifierType&gt;, WebCore::ClientOrigin const&amp;, WTF::CompletionHandler&lt;void (WTF::ObjectIdentifier&lt;WebKit::StorageAreaIdentifierType&gt;, WTF::HashMap&lt;WTF::String, WTF::String, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTableTraits&gt;, unsigned long long)&gt;&amp;&amp;)&gt;(connection=0x000000010605c340, decoder=0x00000001061501d0, object=0x00000001060d0100, function=40 28 81 1a 01 00 00 00 00 00 00 00 00 00 00 00)(IPC::Connection&amp;, WebCore::StorageType, WTF::ObjectIdentifier&lt;WebKit::StorageAreaMapIdentifierType&gt;, WTF::ObjectIdentifier&lt;WebKit::StorageNamespaceIdentifierType&gt;, WebCore::ClientOrigin const&amp;, WTF::CompletionHandler&lt;void (WTF::ObjectIdentifier&lt;WebKit::StorageAreaIdentifierType&gt;, WTF::HashMap&lt;WTF::String, WTF::String, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTableTraits&gt;, unsigned long long)&gt;&amp;&amp;)) at HandleMessage.h:298:5
    frame #13: 0x000000011998377d WebKit`WebKit::NetworkStorageManager::didReceiveMessage(this=0x00000001060d0100, connection=0x000000010605c340, decoder=0x00000001061501d0) at NetworkStorageManagerMessageReceiver.cpp:533:16
    frame #14: 0x000000011a8b84c7 WebKit`IPC::Connection::dispatchMessageReceiverMessage(this=0x000000010605c340, messageReceiver=0x00000001060d0100, decoder=IPC::Decoder @ 0x00000001061501d0) at Connection.cpp:391:25
    frame #15: 0x000000011a8c134b WebKit`IPC::WorkQueueMessageReceiverQueue::enqueueMessage(this=0x00000001060780c8)::&apos;lambda&apos;()::operator()() at MessageReceiveQueues.h:86:25
    frame #16: 0x000000011a8c10e9 WebKit`WTF::Detail::CallableWrapper&lt;IPC::WorkQueueMessageReceiverQueue::enqueueMessage(IPC::Connection&amp;, std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;&amp;&amp;)::&apos;lambda&apos;(), void&gt;::call(this=0x00000001060780c0) at Function.h:53:39
    frame #17: 0x000000012d5e8d52 JavaScriptCore`WTF::Function&lt;void ()&gt;::operator(this=0x00000001060780f0)() const at Function.h:82:35
    frame #18: 0x000000012d69ddd9 JavaScriptCore`WTF::SuspendableWorkQueue::dispatch(this=0x00000001060780e8)&gt;&amp;&amp;)::$_1::operator()() const at SuspendableWorkQueue.cpp:77:9
    frame #19: 0x000000012d69dd09 JavaScriptCore`WTF::Detail::CallableWrapper&lt;WTF::SuspendableWorkQueue::dispatch(WTF::Function&lt;void ()&gt;&amp;&amp;)::$_1, void&gt;::call(this=0x00000001060780e0) at Function.h:53:39
    frame #20: 0x000000012d5e8d52 JavaScriptCore`WTF::Function&lt;void ()&gt;::operator(this=0x00000001060dc138)() const at Function.h:82:35
    frame #21: 0x000000012d70bd79 JavaScriptCore`WTF::(anonymous namespace)::DispatchWorkItem::operator(this=0x00000001060dc130)() at WorkQueueCocoa.cpp:40:25
    frame #22: 0x000000012d70aa2d JavaScriptCore`void WTF::dispatchWorkItem&lt;WTF::(anonymous namespace)::DispatchWorkItem&gt;(dispatchContext=0x00000001060dc130) at WorkQueueCocoa.cpp:48:5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847255</commentid>
    <comment_count>1</comment_count>
      <attachid>453551</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-01 16:52:00 -0800</bug_when>
    <thetext>Created attachment 453551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847288</commentid>
    <comment_count>2</comment_count>
      <attachid>453564</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-01 19:29:15 -0800</bug_when>
    <thetext>Created attachment 453564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847412</commentid>
    <comment_count>3</comment_count>
      <attachid>453564</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-02 08:21:12 -0800</bug_when>
    <thetext>Comment on attachment 453564
Patch

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

r=me with comments.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:419
&gt; +    RetainPtr&lt;CFStringRef&gt; cfIdentifier = makeString(identifierBase, &quot;.PrivateBrowsing.&quot;, createVersion4UUIDString()).createCFString();

Could use auto.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:442
&gt; +    if (m_networkSessions.contains(sessionID))

This could be dropped and we could use HashMap::ensure() below to avoid double hash map  lookup.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2177
&gt; +    if (auto* session = networkSession(sessionID))

BUG: You&apos;re now failing to call the completionHandler in the else case.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2282
&gt; +const String&amp; NetworkProcess::uiProcessBundleIdentifier()

Given that this is a one liner, I would keep inline in the header. Outside the class but inline in the header:
```
#if !PLATFORM(COCOA)
inline const String&amp; NetworkProcess::uiProcessBundleIdentifier() const
{
    return m_uiProcessBundleIdentifier;
}
#endif
```

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:303
&gt; +    const String&amp; uiProcessBundleIdentifier();

I think this should remain const.

&gt; Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp:480
&gt; +        , WTFMove(*shouldUseCustomStoragePaths)

Please don&apos;t use WTFMove() for booleans and integers.

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:258
&gt; +const String&amp; NetworkProcess::uiProcessBundleIdentifier()

I think we should keep the getter as const and mark m_uiProcessBundleIdentifier as mutable. It is a typical pattern for lazy initialization.

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:260
&gt; +    if (m_uiProcessBundleIdentifier.isEmpty())

Shouldn&apos;t this is a isNull() check?

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:261
&gt; +        m_uiProcessBundleIdentifier = String([[NSBundle mainBundle] bundleIdentifier]);

Is String() really needed?

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1856
&gt; +        FileSystem::makeAllDirectories(directory);

Not new in this patch but we really should NOT be blocking the main thread of the UIProcess (or any process for that matter but the UIProcess is probably this worse) on file system operations.

If you don&apos;t want to fix in this patch, at the very least add a FIXME because we likely need to revisit.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1857
&gt; +        FileSystem::excludeFromBackup(directory);

ditto.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:257
&gt; +    const String&amp; resolvedIndexedDBDirectory() const { return m_resolvedConfiguration-&gt;indexedDBDatabaseDirectory(); }

The lack of consistency in the naming between &quot;resolvedIndexedDBDirectory&quot; and `m_resolvedConfiguration-&gt;indexedDBDatabaseDirectory()` is bothering me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847495</commentid>
    <comment_count>4</comment_count>
      <attachid>453564</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-02 10:33:55 -0800</bug_when>
    <thetext>Comment on attachment 453564
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:419
&gt;&gt; +    RetainPtr&lt;CFStringRef&gt; cfIdentifier = makeString(identifierBase, &quot;.PrivateBrowsing.&quot;, createVersion4UUIDString()).createCFString();
&gt; 
&gt; Could use auto.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:442
&gt;&gt; +    if (m_networkSessions.contains(sessionID))
&gt; 
&gt; This could be dropped and we could use HashMap::ensure() below to avoid double hash map  lookup.

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2177
&gt;&gt; +    if (auto* session = networkSession(sessionID))
&gt; 
&gt; BUG: You&apos;re now failing to call the completionHandler in the else case.

Ooops

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2282
&gt;&gt; +const String&amp; NetworkProcess::uiProcessBundleIdentifier()
&gt; 
&gt; Given that this is a one liner, I would keep inline in the header. Outside the class but inline in the header:
&gt; ```
&gt; #if !PLATFORM(COCOA)
&gt; inline const String&amp; NetworkProcess::uiProcessBundleIdentifier() const
&gt; {
&gt;     return m_uiProcessBundleIdentifier;
&gt; }
&gt; #endif
&gt; ```

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:303
&gt;&gt; +    const String&amp; uiProcessBundleIdentifier();
&gt; 
&gt; I think this should remain const.

We may change its value in its definition on Cocoa platforms

&gt;&gt; Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp:480
&gt;&gt; +        , WTFMove(*shouldUseCustomStoragePaths)
&gt; 
&gt; Please don&apos;t use WTFMove() for booleans and integers.

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:258
&gt;&gt; +const String&amp; NetworkProcess::uiProcessBundleIdentifier()
&gt; 
&gt; I think we should keep the getter as const and mark m_uiProcessBundleIdentifier as mutable. It is a typical pattern for lazy initialization.

Okay.

&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:260
&gt;&gt; +    if (m_uiProcessBundleIdentifier.isEmpty())
&gt; 
&gt; Shouldn&apos;t this is a isNull() check?

Will change it back to isNull()

&gt;&gt; Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm:261
&gt;&gt; +        m_uiProcessBundleIdentifier = String([[NSBundle mainBundle] bundleIdentifier]);
&gt; 
&gt; Is String() really needed?

Maybe not.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1856
&gt;&gt; +        FileSystem::makeAllDirectories(directory);
&gt; 
&gt; Not new in this patch but we really should NOT be blocking the main thread of the UIProcess (or any process for that matter but the UIProcess is probably this worse) on file system operations.
&gt; 
&gt; If you don&apos;t want to fix in this patch, at the very least add a FIXME because we likely need to revisit.

Sure, will add.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:1857
&gt;&gt; +        FileSystem::excludeFromBackup(directory);
&gt; 
&gt; ditto.

Sure.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:257
&gt;&gt; +    const String&amp; resolvedIndexedDBDirectory() const { return m_resolvedConfiguration-&gt;indexedDBDatabaseDirectory(); }
&gt; 
&gt; The lack of consistency in the naming between &quot;resolvedIndexedDBDirectory&quot; and `m_resolvedConfiguration-&gt;indexedDBDatabaseDirectory()` is bothering me.

Will change to resolvedIndexedDBDatabaseDirectory (the inconsistency between resolvedIndexedDatabaseDirectory and indexedDBDatabaseDirectory is more annoying to me)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847560</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-02 12:08:20 -0800</bug_when>
    <thetext>(In reply to Sihui Liu from comment #4)
&gt; Comment on attachment 453564 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453564&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:419
&gt; &gt;&gt; +    RetainPtr&lt;CFStringRef&gt; cfIdentifier = makeString(identifierBase, &quot;.PrivateBrowsing.&quot;, createVersion4UUIDString()).createCFString();
&gt; &gt; 
&gt; &gt; Could use auto.
&gt; 
&gt; Sure.
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:442
&gt; &gt;&gt; +    if (m_networkSessions.contains(sessionID))
&gt; &gt; 
&gt; &gt; This could be dropped and we could use HashMap::ensure() below to avoid double hash map  lookup.
&gt; 
&gt; Okay.
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2177
&gt; &gt;&gt; +    if (auto* session = networkSession(sessionID))
&gt; &gt; 
&gt; &gt; BUG: You&apos;re now failing to call the completionHandler in the else case.
&gt; 
&gt; Ooops
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2282
&gt; &gt;&gt; +const String&amp; NetworkProcess::uiProcessBundleIdentifier()
&gt; &gt; 
&gt; &gt; Given that this is a one liner, I would keep inline in the header. Outside the class but inline in the header:
&gt; &gt; ```
&gt; &gt; #if !PLATFORM(COCOA)
&gt; &gt; inline const String&amp; NetworkProcess::uiProcessBundleIdentifier() const
&gt; &gt; {
&gt; &gt;     return m_uiProcessBundleIdentifier;
&gt; &gt; }
&gt; &gt; #endif
&gt; &gt; ```
&gt; 
&gt; Sure.
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:303
&gt; &gt;&gt; +    const String&amp; uiProcessBundleIdentifier();
&gt; &gt; 
&gt; &gt; I think this should remain const.
&gt; 
&gt; We may change its value in its definition on Cocoa platforms

Yes and I commented on how to address that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847620</commentid>
    <comment_count>6</comment_count>
      <attachid>453661</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-02 14:39:50 -0800</bug_when>
    <thetext>Created attachment 453661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847657</commentid>
    <comment_count>7</comment_count>
      <attachid>453672</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-03-02 16:06:46 -0800</bug_when>
    <thetext>Created attachment 453672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847737</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-02 21:09:17 -0800</bug_when>
    <thetext>Committed r290766 (248010@main): &lt;https://commits.webkit.org/248010@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453672.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453551</attachid>
            <date>2022-03-01 16:52:00 -0800</date>
            <delta_ts>2022-03-01 19:29:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237335-20220301165159.patch</filename>
            <type>text/plain</type>
            <size>69508</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDllNzhlNDYyNWM1NTllNjMx
ZDQ0NjQ3M2QzMDg3Nzg5Y2FlZjAzMGQuLmMzOWU5ZThjMmYwNTdhMGQzZjY0YmM0YjY2MjBiYjFm
MjU2MGFmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjItMDMtMDEgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAocjI4OTQ3NCk6
IGNhY2hlU3RvcmFnZVBhdGggaXMgZW1wdHkgaW4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzczMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6c3RvcmFnZVBhdGggcmV0dXJucyBl
bXB0eVN0cmluZyBpZiBzYWx0IGZpbGUgdW5kZXIgcm9vdERpcmVjdG9yeSBjYW5ub3QgYmUgcmVh
ZCBvcgorICAgICAgICB3cml0dGVuLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzYW5kYm94IGV4
dGVuc2lvbiBmb3Igcm9vdERpcmVjdG9yeSBpcyBjb25zdW1lZCBiZWZvcmUgY2FsbGluZyBzdG9y
YWdlUGF0aAorICAgICAgICAoaW4gY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIG9mIE5ldHdv
cmtTZXNzaW9uKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIGNvZGUgYWJv
dXQgYWRkaW5nIHNlc3Npb24gaW4gbmV0d29yayBwcm9jZXNzLiBOb3cgd2Ugd291bGQgY3JlYXRl
IAorICAgICAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgd2hlbiBOZXR3b3JrU2Vzc2lvbiBpcyBj
cmVhdGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9y
YXJ5RmlsZXNGb3JJbmRleGVkREIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OmFkZFN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
aGFzTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNo
V2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vi
c2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpjbGVhclN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGlk
SW5jcmVhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5hbWVP
cmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVp
UHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVO
ZXR3b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6
TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxp
ZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpsb3dNZW1v
cnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246
OmFkZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246
OnN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW06IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICog
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpyZXNvbHZlZEluZGV4ZWREQkRpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IGNv
bnN0KTogRGVsZXRlZC4KKwogMjAyMi0wMy0wMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBmb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pIGRvZXMg
bm90IHByZXZlbnQgc2Nyb2xsaW5nIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApp
bmRleCBhMmEwOGZiNjkyZGEzNmQ1NTMwMzk2NjUyZjU4NzMwOGViNzQyMzQ2Li5hYWFlYTExZjUw
YTljYzI3ZWE2YThjOWU1MTYzOWZmM2U4ZGNjZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNDA5LDEyICs0MDksOCBAQCBib29sIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZQogCiB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVz
YWdlRm9yVGVzdGluZyhjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBhdXRvKiBz
ZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpOwot
ICAgIGlmICghc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHN0b3Jh
Z2VNYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgc3RvcmFnZU1h
bmFnZXItPnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyhvcmlnaW4pOwor
ICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKCkpKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLnJlc2V0UXVv
dGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyhvcmlnaW4pOwogfQogCiB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCkBAIC0xMDAzLDEwICs5OTksOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25zdAogICAg
ICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlUmVmZXJlbmNlcykKICAgICAgICAgICAgIGZpbGUt
PnJldm9rZUZpbGVBY2Nlc3MoKTsKIAotICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdv
cmtTZXNzaW9uKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBzdG9yYWdlTWFuYWdlciA9IHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICAgICAgc3RvcmFnZU1hbmFnZXIt
PnJlZ2lzdGVyVGVtcG9yYXJ5QmxvYkZpbGVQYXRocyhtX2Nvbm5lY3Rpb24sIGZpbGVQYXRocyk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigp
KQorICAgICAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5yZWdpc3RlclRlbXBvcmFy
eUJsb2JGaWxlUGF0aHMobV9jb25uZWN0aW9uLCBmaWxlUGF0aHMpOworCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoZmlsZVBhdGhzKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDIwZmE2NGM5
M2ZkZDlmMTdhZmE3OGEzZmQ3NjVkNDEyZmU2MmNlYWQuLjQ2ZmNmN2E0ZTg4NTM3ZmQ0YjAzOGJh
NzE5NzMwMWI1ZWNkOTRmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJlY29ubmVjdFRhc2suaCIKICNpbmNsdWRlICJQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0b3JlLmgiCi0jaW5jbHVkZSAiUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJT
ZXQuaCIKQEAgLTEwMiw2ICsxMDEsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiQ29va2llU3RvcmFnZVV0aWxzQ0Yu
aCIKICNpbmNsdWRlICJMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW5jbHVkZSA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgpAQCAtMzgyLDEwICszODIsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNzSWRlbnRpZmllciBpZGVudAogCiAgICAg
Y29ubmVjdGlvbi5zZXRPbkxpbmVTdGF0ZShOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2luZ2xldG9u
KCkub25MaW5lKCkpOwogCi0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKSkKLSAgICAgICAgICAgIG1hbmFnZXItPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZy
b21Db25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKLSAgICB9CisgICAgaWYgKGF1
dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzZXNzaW9u
LT5zdG9yYWdlTWFuYWdlcigpLnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKGNv
bm5lY3Rpb24uY29ubmVjdGlvbigpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0zOTcsMTkgKzM5
NSw1MyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmFk
ZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJz
KQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSkK
IHsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRDsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICByZXR1cm47CiAKLSAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIHBhcmFtZXRlcnMpOworICAgIGlmIChz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5ld1Rlc3RpbmdTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Np
b25JRCkpIHsKLSAgICAgICAgc2Vzc2lvbi0+YWRkU3RvcmFnZU1hbmFnZXJTZXNzaW9uKHBhcmFt
ZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VE
aXJlY3RvcnlIYW5kbGUsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSwgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlLCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOworICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgJiYgIXVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29va2llU3RvcmFnZVBh
dGhFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9y
YWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEodWlQcm9jZXNzQ29va2llU3Rv
cmFnZUlkZW50aWZpZXIpOworICAgIH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICAgICAgc2Vzc2lvbi0+YWRkU2VydmljZVdvcmtlclNlc3Npb24ocGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKKyAgICBh
dXRvIGlkZW50aWZpZXJCYXNlID0gbWFrZVN0cmluZyh1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVy
KCksICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpOworICAgIFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiBzdG9yYWdlU2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dz
aW5nLiIsIGNyZWF0ZVZlcnNpb240VVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOworICAg
IGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBj
cmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpLCBzdGQ6Om51bGxv
cHQsIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6U2hvdWxkRGlzYWJsZUNGVVJMQ2Fj
aGU6Olllcyk7CisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpCisgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklk
ZW50aWZpZXIuZ2V0KCkpOworCisgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vz
c01heVVzZUNvb2tpZUFQSSgpKSB7CisgICAgICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdl
KFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICAgICAgaWYgKCF1
aVByb2Nlc3NDb29raWVTdG9yYWdlICYmIHN0b3JhZ2VTZXNzaW9uKQorICAgICAgICAgICAgdWlQ
cm9jZXNzQ29va2llU3RvcmFnZSA9IGFkb3B0Q0YoX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q29v
a2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbi5nZXQoKSkpOwog
ICAgIH0KKworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBXVEZNb3ZlKHN0b3JhZ2VTZXNzaW9uKSwgV1RG
TW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CisjZWxpZiBVU0UoQ1VSTCkgfHwgVVNFKFNP
VVApCisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlxdWU8TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQpOworI2VuZGlmCit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJh
bWV0ZXJzKQoreworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgIGlmIChtX25ldHdvcmtTZXNzaW9ucy5jb250YWlu
cyhzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25ldHdvcmtTZXNzaW9ucy5h
ZGQoc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycykpOworICAgIGFkZFN0b3JhZ2VTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uLCBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVy
LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIH0KIAogdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZv
aWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC00MzUsNDEgKzQ2Nyw2IEBAIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQcm9jZXNz
OjpuZXdUZXN0aW5nU2Vzc2lvCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXJCYXNlLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJiBjb29raWVTdG9y
YWdlKQotI2Vsc2UKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKLSNlbmRpZgotewotICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOwotICAg
IGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5ld1Rlc3RpbmdTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPENGVVJM
U3RvcmFnZVNlc3Npb25SZWY+IHN0b3JhZ2VTZXNzaW9uOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Qcml2YXRl
QnJvd3NpbmcuIiwgY3JlYXRlVmVyc2lvbjRVVUlEU3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCk7
Ci0gICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICBzdG9yYWdlU2Vzc2lv
biA9IGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCksIHN0ZDo6
bnVsbG9wdCwgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpTaG91bGREaXNhYmxlQ0ZV
UkxDYWNoZTo6WWVzKTsKLSAgICBlbHNlIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZUNGU3RvcmFnZVNlc3Npb25Gb3JJZGVudGlmaWVy
KGNmSWRlbnRpZmllci5nZXQoKSk7Ci0KLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpw
cm9jZXNzTWF5VXNlQ29va2llQVBJKCkpIHsKLSAgICAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2
aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAgICAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2UgJiYgc3RvcmFnZVNlc3Npb24pCi0gICAgICAgICAgICBjb29raWVT
dG9yYWdlID0gYWRvcHRDRihfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNvcHlDb29raWVTdG9yYWdlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHN0b3JhZ2VTZXNzaW9uLmdldCgpKSk7Ci0gICAgfQotCi0gICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNz
aW9uPihzZXNzaW9uSUQsIFdURk1vdmUoc3RvcmFnZVNlc3Npb24pLCBXVEZNb3ZlKGNvb2tpZVN0
b3JhZ2UpKTsKLSNlbGlmIFVTRShDVVJMKSB8fCBVU0UoU09VUCkKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25J
RCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0UG9saWN5
Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIHsKICAgICBmb3IgKGF1
dG8mIGNvbm5lY3Rpb24gOiBtX3dlYlByb2Nlc3NDb25uZWN0aW9ucy52YWx1ZXMoKSkKQEAgLTk5
OSwxMSArOTk2LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyVXNlckludGVyYWN0aW9u
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpoYXNMb2NhbFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpOwotICAgIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIo
KSkKKyAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CiAKICAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4geyBX
ZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OwotICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5h
Z2VyKCktPmZldGNoRGF0YSh0eXBlcywgW2RvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAgICBzZXNz
aW9uLT5zdG9yYWdlTWFuYWdlcigpLmZldGNoRGF0YSh0eXBlcywgW2RvbWFpbiwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBlbnRyaWVzKSBtdXRh
YmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihlbnRyaWVzLCBbJmRv
bWFpbl0oYXV0byYgZW50cnkpIHsKICAgICAgICAgICAgIHJldHVybiBkb21haW4ubWF0Y2hlcyhl
bnRyeS5vcmlnaW4pOwogICAgICAgICB9KSk7CkBAIC0xNDY0LDggKzE0NjEsOCBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdl
TWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbiAmJiBz
ZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKSB7Ci0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5h
Z2VyKCktPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShh
dXRvIGVudHJpZXMpIG11dGFibGUgeworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNh
bkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24pIHsKKyAgICAgICAgc2Vz
c2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxi
YWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihXVEZNb3Zl
KGVudHJpZXMpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTUyNyw4ICsxNTI0LDggQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2kKICAgICAgICAgc2Vzc2lvbi0+Y2xlYXJBbHRlcm5hdGl2ZVNl
cnZpY2VzKG1vZGlmaWVkU2luY2UpOwogI2VuZGlmCiAKLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uICYmIHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2Vy
KCktPmRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2lu
Y2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uKQorICAgICAg
ICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKHdlYnNp
dGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKIH0K
IAogc3RhdGljIHZvaWQgY2xlYXJEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUq
IGNhY2hlLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYyMCw4ICsxNjE3
LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYm
IHNlc3Npb24gJiYgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgc2Vzc2lvbi0+
c3RvcmFnZU1hbmFnZXIoKS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmlnaW5EYXRh
cywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24pCisgICAgICAg
IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBv
cmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCiAgICAgaWYgKHNlc3Npb24p
IHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1Rv
RGVsZXRlTmV0d29ya0RhdGFGb3I7CkBAIC0xODEyLDggKzE4MDksOCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5z
KFBBTDo6U2VzcwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uICYmIHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpIHsKLSAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFn
ZXIoKS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBk
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVn
YXRvcl0oYXV0byYmIGRlbGV0ZWREb21haW5zKSBtdXRhYmxlIHsKKyAgICBpZiAoTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9u
KSB7CisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlRGF0YUZvclJlZ2lz
dHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRlbGV0ZWREb21h
aW5zKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBkZWxldGVkRG9t
YWlucykKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlucy5hZGQo
V1RGTW92ZShkb21haW4pKTsKICAgICAgICAgfSk7CkBAIC0xOTI5LDggKzE5MjYsOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lv
biAmJiBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKSB7Ci0gICAgICAgIHNlc3Npb24tPnN0b3Jh
Z2VNYW5hZ2VyKCktPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgIGlmIChzZXNzaW9uKSB7CisgICAgICAg
IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtj
YWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICBj
YWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RG
TW92ZShlbnRyaWVzKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTIwOTksOCArMjA5Niw3IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25J
bW1pbmVudCwgQ29tcGxldGlvbkhhbmRsCiAgICAgICAgIGlmIChhdXRvKiBzd1NlcnZlciA9IHNl
c3Npb24uc3dTZXJ2ZXIoKSkKICAgICAgICAgICAgIHN3U2VydmVyLT5zdGFydFN1c3BlbnNpb24o
W2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbmRpZgotICAgICAgICBpZiAoYXV0byogc3Rv
cmFnZU1hbmFnZXIgPSBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBzdG9y
YWdlTWFuYWdlci0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAgICAgICBz
ZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkuc3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0p
OwogICAgIH0pOwogCiAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV93ZWJQcm9jZXNzQ29u
bmVjdGlvbnMudmFsdWVzKCkpCkBAIC0yMTM4LDggKzIxMzQsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpyZXN1bWUoKQogICAgICAgICBpZiAoYXV0byogc3dTZXJ2ZXIgPSBzZXNzaW9uLnN3U2Vy
dmVyKCkpCiAgICAgICAgICAgICBzd1NlcnZlci0+ZW5kU3VzcGVuc2lvbigpOwogI2VuZGlmCi0g
ICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpKQotICAg
ICAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7CisgICAgICAgIHNlc3Npb24uc3RvcmFnZU1hbmFn
ZXIoKS5yZXN1bWUoKTsKICAgICB9KTsKIH0KIApAQCAtMjE3Miw0MSArMjE2NywyOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZAogewogICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBmb3JFYWNo
TmV0d29ya1Nlc3Npb24oWyZdKGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgaWYgKGF1dG8qIG1h
bmFnZXIgPSBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5z
eW5jTG9jYWxTdG9yYWdlKFthZ2dyZWdhdG9yXSB7IH0pOworICAgICAgICBzZXNzaW9uLnN0b3Jh
Z2VNYW5hZ2VyKCkuc3luY0xvY2FsU3RvcmFnZShbYWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBpZiAo
IXNlc3Npb24pCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgYXV0
byogc3RvcmFnZU1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpOwotICAgIGlmICgh
c3RvcmFnZU1hbmFnZXIpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgc3RvcmFnZU1hbmFnZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Np
b25JRCkpCisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkucmVzZXRRdW90YUZvclRl
c3RpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpjbGVhclN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogc2Vzc2lvbiA9
IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZXNz
aW9uID8gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSA6IG51bGxwdHIpCi0gICAgICAgIG1hbmFn
ZXItPmNsZWFyU3RvcmFnZUZvclRlc3RpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
ICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAg
ICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5jbGVhclN0b3JhZ2VGb3JUZXN0aW5nKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBlbHNlCiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEluY3JlYXNlUXVvdGEoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgUXVvdGFJbmNy
ZWFzZVJlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IG5ld1F1b3RhKQogewotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9u
SUQpOwotICAgIGlmICghc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8q
IG1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKQotICAgICAgICBtYW5hZ2VyLT5k
aWRJbmNyZWFzZVF1b3RhKG9yaWdpbiwgaWRlbnRpZmllciwgbmV3UXVvdGEpOworICAgIGlmIChh
dXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lv
bi0+c3RvcmFnZU1hbmFnZXIoKS5kaWRJbmNyZWFzZVF1b3RhKG9yaWdpbiwgaWRlbnRpZmllciwg
bmV3UXVvdGEpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW5hbWVPcmlnaW5JbldlYnNp
dGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBvbGROYW1lLCBjb25z
dCBVUkwmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjIxOCw5ICsy
MjAwLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAgICBpZiAob2xkT3JpZ2luLmlzRW1w
dHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
KiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBpZiAoYXV0byogbWFu
YWdlciA9IHNlc3Npb24gPyBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpIDogbnVsbHB0cikKLSAg
ICAgICAgbWFuYWdlci0+bW92ZURhdGEoZGF0YVR5cGVzLCBvbGRPcmlnaW4sIG5ld09yaWdpbiwg
W2FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lv
bihzZXNzaW9uSUQpKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLm1vdmVEYXRh
KGRhdGFUeXBlcywgb2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOwogfQog
CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtMjI5Nyw2ICsyMjc4LDExIEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtRmx1c2hDb29raWVzKFBBTDo6U2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAorY29uc3Qg
U3RyaW5nJiBOZXR3b3JrUHJvY2Vzczo6dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcigpCit7Cisg
ICAgcmV0dXJuIG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKK30KKwogI2VuZGlmCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnN0b3JlUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIHByaXZh
dGVDbGlja01lYXN1cmVtZW50KQpAQCAtMjQ3NCwxMCArMjQ2MCw4IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBsb2FkZXIp
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9zZWQoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0g
ICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAg
ICAgICAgIG1hbmFnZXItPnN0b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24oY29ubmVj
dGlvbik7Ci0gICAgfQorICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5zdG9wUmVjZWl2aW5n
TWVzc2FnZUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24pOwogfQogCiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyogTmV0d29ya1Byb2Nlc3M6OndlYlByb2Nlc3NDb25uZWN0aW9uKFByb2Nl
c3NJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYTNlZjExMjg1NzExNmRmMTU4ODY5YTk2NmI4
NTljYWQxMzhmNDhhOC4uY2FiNGEzZDk5MDAwNTQ4Zjc1NzUyMTFiZmYwMjgzZWIwNTdjNTZjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAt
MTY4LDExICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
Jik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lv
bihQQUw6OlNlc3Npb25JRCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgZW5zdXJlU2Vzc2lvbihQQUw6OlNlc3Npb25J
RCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwotI2Vsc2UKLSAg
ICB2b2lkIGVuc3VyZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpOwotI2VuZGlmCisgICAg
dm9pZCBhZGRTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdWlQcm9jZXNzQ29va2ll
U3RvcmFnZUlkZW50aWZpZXIsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwogCiAg
ICAgdm9pZCBwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZ1N5bmMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHByZXBhcmVUb1N1c3BlbmQoYm9vbCBp
c1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTMw
NCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdv
cmtlckVudGl0bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICBj
b25zdCBTdHJpbmcmIHVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVpUHJvY2Vz
c0J1bmRsZUlkZW50aWZpZXIoKTsKIAogICAgIHZvaWQgcmVmKCkgY29uc3Qgb3ZlcnJpZGUgeyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzcz46OnJlZigpOyB9CiAgICAgdm9pZCBk
ZXJlZigpIGNvbnN0IG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nl
c3M+OjpkZXJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uY3BwCmluZGV4IDZkZGM3MjBmNzA3YTM3NjIxMDFkZjkyNmJlOTQzMDg2M2Y1M2Ni
NGQuLmRkMDM4YTAzODJlYzA2M2UwMzJiNjViNjMwZTg0NmZhNzhmZTY5ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0xMTEsNiAr
MTExLDE4IEBAIHN0YXRpYyBVbmlxdWVSZWY8UENNOjpNYW5hZ2VySW50ZXJmYWNlPiBtYW5hZ2Vy
T3JQcm94eShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1NlCiAgICAgcmV0dXJuIG1ha2VVbmlxdWVS
ZWY8UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyPihtYWtlVW5pcXVlUmVmPFBDTTo6Q2xp
ZW50SW1wbD4obmV0d29ya1Nlc3Npb24sIG5ldHdvcmtQcm9jZXNzKSwgcGNtU3RvcmVEaXJlY3Rv
cnkobmV0d29ya1Nlc3Npb24sIHBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFt
ZXRlcnMuZGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0
ZXJzLnByaXZhdGVDbGlja01lYXN1cmVtZW50U3RvcmFnZURpcmVjdG9yeSkpOwogfQogCitzdGF0
aWMgUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2Vy
KElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5pbmRleGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpOworICAgIElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEOworICAgIGlmIChjb25uZWN0aW9uKQorICAg
ICAgICBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLT51bmlxdWVJRCgpOworICAgIHJldHVybiBO
ZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShwYXJhbWV0ZXJzLnNlc3Npb25JRCwgY29ubmVj
dGlvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkREJEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VR
dW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0
ZXJzLnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Cit9CisKIE5ldHdvcmtTZXNzaW9uOjpO
ZXR3b3JrU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIDogbV9zZXNzaW9u
SUQocGFyYW1ldGVycy5zZXNzaW9uSUQpCiAgICAgLCBtX25ldHdvcmtQcm9jZXNzKG5ldHdvcmtQ
cm9jZXNzKQpAQCAtMTMxLDYgKzE0Myw3IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lv
bihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IE5ldHdvcmtTZXNzCiAgICAg
LCBtX3Rlc3RTcGVlZE11bHRpcGxpZXIocGFyYW1ldGVycy50ZXN0U3BlZWRNdWx0aXBsaWVyKQog
ICAgICwgbV9hbGxvd3NTZXJ2ZXJQcmVjb25uZWN0KHBhcmFtZXRlcnMuYWxsb3dzU2VydmVyUHJl
Y29ubmVjdCkKICAgICAsIG1fc2hvdWxkUnVuU2VydmljZVdvcmtlcnNPbk1haW5UaHJlYWRGb3JU
ZXN0aW5nKHBhcmFtZXRlcnMuc2hvdWxkUnVuU2VydmljZVdvcmtlcnNPbk1haW5UaHJlYWRGb3JU
ZXN0aW5nKQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihjcmVhdGVOZXR3b3JrU3RvcmFnZU1hbmFn
ZXIobmV0d29ya1Byb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSwgcGFyYW1ldGVycykp
CiAjaWYgRU5BQkxFKEJVSUxUX0lOX05PVElGSUNBVElPTlMpCiAgICAgLCBtX25vdGlmaWNhdGlv
bk1hbmFnZXIoKnRoaXMsIHBhcmFtZXRlcnMud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSkKICNlbmRp
ZgpAQCAtMTY5LDYgKzE4MiwxNCBAQCBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBjb25zdCBOZXR3b3JrU2VzcwogICAgIHNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BhcmFtZXRlcnMuZW5hYmxlZCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICBtX3NlcnZpY2VXb3JrZXJJbmZvID0gU2VydmljZVdvcmtlckluZm8geworICAgICAgICBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksCisgICAgICAgIHBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAorICAgIH07
CisjZW5kaWYKKwogI2lmIEVOQUJMRShCVUlMVF9JTl9OT1RJRklDQVRJT05TKQogICAgIG1fbmV0
d29ya1Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Tm90aWZpY2F0aW9uTWFu
YWdlck1lc3NhZ2VIYW5kbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fc2Vzc2lvbklELnRv
VUludDY0KCksIG1fbm90aWZpY2F0aW9uTWFuYWdlcik7CiAjZW5kaWYKQEAgLTIwNiw4ICsyMjcs
NyBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKICAgICBpZiAo
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKQogICAgICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MtPmludmFsaWRhdGVBbmRDYW5jZWwoKTsKICNlbmRpZgotICAgIGlmIChhdXRvIG1hbmFnZXIg
PSBzdGQ6OmV4Y2hhbmdlKG1fc3RvcmFnZU1hbmFnZXIsIG51bGxwdHIpKQotICAgICAgICBtYW5h
Z2VyLT5jbG9zZSgpOworICAgIG1fc3RvcmFnZU1hbmFnZXItPmNsb3NlKCk7CiAgICAgbV9jYWNo
ZUVuZ2luZSA9IG51bGxwdHI7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBtX2lzSW52YWxpZGF0
ZWQgPSB0cnVlOwpAQCAtNTY4LDggKzU4OCw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246Omxvd01l
bW9yeUhhbmRsZXIoQ3JpdGljYWwpCiAgICAgaWYgKG1fc3dTZXJ2ZXIpCiAgICAgICAgIG1fc3dT
ZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKICNlbmRpZgotICAgIGlmIChtX3N0b3Jh
Z2VNYW5hZ2VyKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5oYW5kbGVMb3dNZW1vcnlXYXJu
aW5nKCk7CisgICAgbV9zdG9yYWdlTWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOwog
fQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNjM1LDE3ICs2NTQsNiBAQCBTV1Nl
cnZlciYgTmV0d29ya1Nlc3Npb246OmVuc3VyZVNXU2VydmVyKCkKICAgICByZXR1cm4gKm1fc3dT
ZXJ2ZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VXb3JrZXJTZXNzaW9u
KGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IGhhbmRsZSkKLXsKLSAgICBib29sIGhhZFNlcnZpY2VXb3JrZXJJbmZvID0gISFtX3NlcnZpY2VX
b3JrZXJJbmZvOwotICAgIG1fc2VydmljZVdvcmtlckluZm8gPSBTZXJ2aWNlV29ya2VySW5mbyB7
Ci0gICAgICAgIFdURk1vdmUoc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksCi0g
ICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAotICAgIH07Ci0gICAgaWYgKCFo
YWRTZXJ2aWNlV29ya2VySW5mbykKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGhhbmRsZSk7Ci19Ci0KIGJvb2wgTmV0d29ya1Nlc3Npb246Omhhc1NlcnZpY2VX
b3JrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlcnZpY2VXb3JrZXJJ
bmZvICYmICFtX3NlcnZpY2VXb3JrZXJJbmZvLT5kYXRhYmFzZVBhdGguaXNFbXB0eSgpOwpAQCAt
NjYwLDIwICs2NjgsNiBAQCBXZWJTaGFyZWRXb3JrZXJTZXJ2ZXImIE5ldHdvcmtTZXNzaW9uOjpl
bnN1cmVTaGFyZWRXb3JrZXJTZXJ2ZXIoKQogICAgIHJldHVybiAqbV9zaGFyZWRXb3JrZXJTZXJ2
ZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmFkZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbihj
b25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25z
dCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGlkYlN0
b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGNhY2hlU3RvcmFnZVBhdGgsIHVpbnQ2NF90
IGRlZmF1bHRPcmlnaW5RdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgYm9v
bCBzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpCi17Ci0gICAgaWYgKG1fc3RvcmFnZU1hbmFn
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpOwotICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseShsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKTsKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaWRiU3RvcmFnZVBhdGhIYW5kbGUpOwotICAg
IElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChhdXRvKiBj
b25uZWN0aW9uID0gbmV0d29ya1Byb2Nlc3MoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpKQot
ICAgICAgICBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLT51bmlxdWVJRCgpOwotICAgIG1fc3Rv
cmFnZU1hbmFnZXIgPSBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9uSUQoKSwg
Y29ubmVjdGlvbklELCBnZW5lcmFsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgsIGlkYlN0
b3JhZ2VQYXRoLCBjYWNoZVN0b3JhZ2VQYXRoLCBkZWZhdWx0T3JpZ2luUXVvdGEsIGRlZmF1bHRU
aGlyZFBhcnR5UXVvdGEsIHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Ci19Ci0KIHZvaWQg
TmV0d29ya1Nlc3Npb246OmVuc3VyZUNhY2hlRW5naW5lKEZ1bmN0aW9uPHZvaWQoQ2FjaGVTdG9y
YWdlOjpFbmdpbmUmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9jYWNoZUVuZ2luZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCA4NWM3
Y2JkNjkwMzRkOWNiYTdmNDQ1ZGE5ZGU0NzVhMWQ3YjM1MTE4Li41OTgwNmJkZmI0YmUyYjE0MDRm
NDE5M2M3MDg5ODk2OWYzNDE2MDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC0yMDcsMTYgKzIwNywxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlvbiYpOwog
CiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlF
bmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNlbmRpZgogCiAgICAgV2ViU2hhcmVkV29y
a2VyU2VydmVyKiBzaGFyZWRXb3JrZXJTZXJ2ZXIoKSB7IHJldHVybiBtX3NoYXJlZFdvcmtlclNl
cnZlci5nZXQoKTsgfQogICAgIFdlYlNoYXJlZFdvcmtlclNlcnZlciYgZW5zdXJlU2hhcmVkV29y
a2VyU2VydmVyKCk7CiAKLSAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2Vy
KCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsgfQotICAgIHZvaWQgYWRkU3RvcmFn
ZU1hbmFnZXJTZXNzaW9uKGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGxvY2FsU3RvcmFn
ZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYgaWRiU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgY2FjaGVTdG9y
YWdlUGF0aCwgdWludDY0X3QgZGVmYXVsdE9yaWdpblF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhLCBib29sIHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Ci0KKyAgICBO
ZXR3b3JrU3RvcmFnZU1hbmFnZXImIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdl
TWFuYWdlci5nZXQoKTsgfQogICAgIENhY2hlU3RvcmFnZTo6RW5naW5lKiBjYWNoZUVuZ2luZSgp
IHsgcmV0dXJuIG1fY2FjaGVFbmdpbmUuZ2V0KCk7IH0KICAgICB2b2lkIGVuc3VyZUNhY2hlRW5n
aW5lKEZ1bmN0aW9uPHZvaWQoQ2FjaGVTdG9yYWdlOjpFbmdpbmUmKT4mJik7CiAgICAgdm9pZCBj
bGVhckNhY2hlRW5naW5lKCk7CkBAIC0zMTgsNyArMzE0LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNoYXJlZFdvcmtlclNlcnZlcj4gbV9zaGFyZWRXb3Jr
ZXJTZXJ2ZXI7CiAKLSAgICBSZWZQdHI8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBtX3N0b3JhZ2VN
YW5hZ2VyOworICAgIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IG1fc3RvcmFnZU1hbmFnZXI7
CiAgICAgUmVmUHRyPENhY2hlU3RvcmFnZTo6RW5naW5lPiBtX2NhY2hlRW5naW5lOwogICAgIFZl
Y3RvcjxGdW5jdGlvbjx2b2lkKENhY2hlU3RvcmFnZTo6RW5naW5lJik+PiBtX2NhY2hlU3RvcmFn
ZVBhcmFtZXRlcnNDYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAK
aW5kZXggMmYwOWE1ZThkM2FlMTZhMWNmNGQxZTc0MTFhNDA2MGNkZDhkZjcxNS4uYTkzYTFlMWU1
ODVmNjg0ZTQ2NDUxNjdmNDJlMjM0NjhkMmY2ODU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycy5jcHAKQEAgLTk1LDYgKzk1LDE2IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAjaWYgIUhB
VkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKICAgICBlbmNvZGVyIDw8IHNob3VsZEFjY2VwdElu
c2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0czsKICNlbmRpZgorCisgICAgZW5jb2RlciA8
PCBzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHM7CisgICAgZW5jb2RlciA8PCBwZXJPcmlnaW5T
dG9yYWdlUXVvdGEgPDwgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKKyAgICBlbmNv
ZGVyIDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7CisgICAgZW5jb2RlciA8PCBpbmRleGVkREJEaXJlY3RvcnkgPDwgaW5kZXhl
ZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGVuY29kZXIgPDwgY2FjaGVTdG9yYWdl
RGlyZWN0b3J5IDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBl
bmNvZGVyIDw8IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGdlbmVyYWxTdG9yYWdlRGlyZWN0
b3J5SGFuZGxlOworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBlbmNvZGVyIDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkOworI2VuZGlmCiAgICAgZW5jb2RlciA8PCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVyczsKIH0KIApAQCAtMzM0LDYgKzM0NCw3OCBAQCBzdGQ6Om9wdGlv
bmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzPiBOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogI2VuZGlmCiAKKyAg
ICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKKyAgICBk
ZWNvZGVyID4+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKKyAgICBpZiAoIXNob3VsZFVz
ZUN1c3RvbVN0b3JhZ2VQYXRocykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKKyAgICBkZWNv
ZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKKyAgICBpZiAoIXBlck9yaWdpblN0b3JhZ2VR
dW90YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZGVjb2RlciA+
PiBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOworICAgIGlmICghcGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgZGVjb2Rl
ciA+PiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOworICAgIGRlY29kZXIgPj4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OworICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGluZGV4
ZWREQkRpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGluZGV4ZWREQkRpcmVjdG9yeTsKKyAgICBp
ZiAoIWluZGV4ZWREQkRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAKKyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5kZXhlZERC
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gaW5kZXhlZERCRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3Rv
cmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZGVj
b2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFj
YWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZ2VuZXJhbFN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgZGVjb2RlciA+PiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAo
IWdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGdlbmVyYWxTdG9y
YWdlRGlyZWN0b3J5SGFuZGxlOworICAgIGRlY29kZXIgPj4gZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rv
cnlIYW5kbGU7CisgICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAg
ICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eTsKKyAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Cisg
ICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOworICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisg
ICAgc3RkOjpvcHRpb25hbDxib29sPiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXlFbmFibGVkOworICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlv
bkRlbGF5RW5hYmxlZDsKKyAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKwogICAg
IHN0ZDo6b3B0aW9uYWw8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnM+IHJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzOwogICAgIGRlY29kZXIgPj4gcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BhcmFtZXRlcnM7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1l
dGVycykKQEAgLTM5NCw2ICs0NzYsMjIgQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycz4gTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMKICAgICAg
ICAgLCBXVEZNb3ZlKCplbmFibGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnTW9kZSkKICNp
ZiAhSEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQogICAgICAgICAsIFdURk1vdmUoKnNob3Vs
ZEFjY2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cykKKyNlbmRpZgorICAgICAg
ICAsIFdURk1vdmUoKnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocykKKyAgICAgICAgLCBXVEZN
b3ZlKCpwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAgICwgV1RGTW92ZSgqcGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSkKKyAgICAgICAgLCBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKQorICAgICAgICAsIFdURk1vdmUoKmluZGV4ZWREQkRpcmVjdG9yeSkKKyAgICAg
ICAgLCBXVEZNb3ZlKCppbmRleGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAg
ICwgV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICAsIFdURk1vdmUoKmNh
Y2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCBXVEZNb3ZlKCpn
ZW5lcmFsU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAgLCBXVEZNb3ZlKCpnZW5lcmFsU3RvcmFn
ZURpcmVjdG9yeUhhbmRsZSkKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgICAgICwg
V1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKKyAgICAgICAgLCBX
VEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KQorICAgICAgICAsIFdURk1vdmUoKnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eUVuYWJsZWQpCiAjZW5kaWYKICAgICAgICAgLCBXVEZNb3ZlKCpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUGFyYW1ldGVycykKICAgICB9fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaAppbmRl
eCAzNDBiNDM0ODFkMjU3N2E2MjMzNzUzYmY0ZDY0MWMwNTE2Zjg1ZTVkLi4xMjU1NTU5Y2UzMGI4
NmU4MzEyNmFmZmZkZTRhMmU4MDllZDkxMjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
cy5oCkBAIC0xMTIsNiArMTEyLDIzIEBAIHN0cnVjdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycyB7CiAgICAgYm9vbCBzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0Zvcldl
YlNvY2tldHMgeyBmYWxzZSB9OwogI2VuZGlmCiAKKyAgICBib29sIHNob3VsZFVzZUN1c3RvbVN0
b3JhZ2VQYXRocyB7IGZhbHNlIH07CisgICAgdWludDY0X3QgcGVyT3JpZ2luU3RvcmFnZVF1b3Rh
OworICAgIHVpbnQ2NF90IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CisgICAgU3Ry
aW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUg
bG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIFN0cmluZyBpbmRleGVk
REJEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREQkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBTdHJpbmcgY2FjaGVTdG9yYWdlRGlyZWN0b3J5Owor
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7CisgICAgU3RyaW5nIGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OworICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKKyNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgYm9vbCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkIHsgdHJ1ZSB9OworI2VuZGlmCisKICAg
ICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVyczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjA1NmY0ZjZlYjYwN2I0ZDc5Y2ViODJhNWYzYjk0NGQ2M2Y0ZGE5MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrUHJvY2VzczsKLXN0cnVjdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczsKLQotY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQgewotcHVibGljOgot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KLSAgICBzdGF0aWMg
dm9pZCBlbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYsIGNvbnN0
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7Ci19OwotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAK
aW5kZXggYmRhYjE4Zjk0MjkwNWFjYzJjODY2ZWRhODMzMDk2NTgyOGNiNjBkZS4uNWY2YzA0MTg2
YjM0NjZhYjI3YThmZGFhNDE2ZTQ2YzhmOWZlYjhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAt
MjQ1LDExICsyNDUsNyBAQCB2b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcQogICAgIGlmICghc2Vzc2lv
bikKICAgICAgICAgY2FsbGJhY2soZmFsc2UpOwogCi0gICAgYXV0byogc3RvcmFnZU1hbmFnZXIg
PSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpOwotICAgIGlmICghc3RvcmFnZU1hbmFnZXIpCi0g
ICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKLQotICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCBzcGFjZVJlcXVlc3RlZCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHNlc3Np
b24tPnN0b3JhZ2VNYW5hZ2VyKCkucmVxdWVzdFNwYWNlKG9yaWdpbiwgc3BhY2VSZXF1ZXN0ZWQs
IFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogRW5naW5lOjpFbmdpbmUoTmV0d29ya1Nlc3Npb24m
IG5ldHdvcmtTZXNzaW9uLCBTdHJpbmcmJiByb290UGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRl
eCA0NGFlODQyNGUwYjU0N2RkZWI0NTBjM2I5MjQ4ZTNmODhlMjc0OTg4Li5kMWRkODQ4ZjRhYWRi
ZmViNDIwZWUyMWU3NDc0YWRhMTZjNmRhNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC0yNTUs
NCArMjU1LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nCiB9CiAjZW5kaWYKIAorY29uc3Qg
U3RyaW5nJiBOZXR3b3JrUHJvY2Vzczo6dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcigpCit7Cisg
ICAgaWYgKG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgICAgIG1f
dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVd
IGJ1bmRsZUlkZW50aWZpZXJdKTsKKworICAgIHJldHVybiBtX3VpUHJvY2Vzc0J1bmRsZUlkZW50
aWZpZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHRDdXJsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwNDkwYjZhNWU4NTJi
NGM2Mjk0M2Q5NzlkMDcwZjk3NDJlMDNhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZU5l
dHdvcmtpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5ldHdvcmtQ
cm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpCi17Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNzLnN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5ldHdvcmtQcm9j
ZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIFN0cmluZzo6bnVtYmVyKHNl
c3Npb25JRC50b1VJbnQ2NCgpKSk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTJmMGZjNmI1ZmE4NjhkOGQxZjYwY2E3
MTZhZDY1YWY0NTIyNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotCi0j
aW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgotI2ltcG9ydCAiTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmgiCi0jaW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgotI2ltcG9ydCAiTmV0
d29ya1Nlc3Npb24uaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCi0jaW1wb3J0ICJXZWJFcnJvcnMuaCIKLSNpbXBvcnQgIldlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmgiCi0jaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotI2lt
cG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW1wb3J0IDxwYWwvU2Vzc2lvbklELmg+
Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFJlbW90ZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJv
Y2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQotewotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzcy5zdG9yYWdl
U2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYmFzZSA9
IG5ldHdvcmtQcm9jZXNzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIoKTsKLSAgICBpZiAoYmFz
ZS5pc051bGwoKSkKLSAgICAgICAgYmFzZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl07Ci0KLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jb29raWVT
dG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlm
aWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgdWlQ
cm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRhKHBh
cmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwotCi0gICAgbmV0d29y
a1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0cmluZyhi
YXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3NDb29raWVT
dG9yYWdlKSk7Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjODJiZjhhMzAwODE4NGYyYjRjOGRj
M2FmZTUzOWZkNzUzMjAxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHRTb3VwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwIEluYy4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0K
LSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3Ms
IGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGF1
dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklEOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGlu
Z05ldHdvcmtTZXNzaW9uLCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQudG9VSW50NjQoKSkpOwot
ICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cykpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRp
b24uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKaW5kZXgg
OGI3NmI2MDY1M2IxYjMxYWQzYjhjOWU3ZDdiMzY3ZDlmMmZjYTY2OS4uOWEyYWUyYzFhZTc0YzJk
NTI3ZGFhNWY5YmNiOTE3ODYwYWVmNDdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3Rh
dGlvbi5jbWFrZQpAQCAtNDgsNyArNDgsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwog
ICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAogICAgIE5ldHdv
cmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vzcy9jdXJs
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKIAogICAgIFBsYXRmb3JtL0lQQy91bml4
L0F0dGFjaG1lbnRVbml4LmNwcAogICAgIFBsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rpb25Vbml4
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMjRiZDg0MjY3MmFhODEwMWQxYzFlYjZk
YjQzMzVmMWU1ZjBiODQwZC4uYmE0MWNjNGI4ZDNjNDhlOTZlODBhMmZkMTZhYmNiODMzMjgzMGJh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYgQEAgaWYgKCR7V1RG
X1BMQVRGT1JNX1dJTl9DQUlST30pCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29y
a0RhdGFUYXNrQ3VybC5jcHAKICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrUHJv
Y2Vzc0N1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nlc3Npb25D
dXJsLmNwcAotICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Q3VybC5jcHAKIAogICAgICAgICBTaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNhaXJvLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5jcHAKaW5kZXggMTIwMzdmYzhmYmM2OTliNThkMDA5ZjQ3NTUyMzk4ZGExYzQ4M2M0MC4u
ODYwYTA3ZGVlMjllNjc2ZTY3YzNhOTRkMzJkMTYwZTg5YjQyODJhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtMzEs
MjkgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKCkKLXsKLX0KK1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzOjp+V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoKSA9IGRlZmF1bHQ7
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllcjsKICAg
ICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29k
ZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBlbmNv
ZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkOwotI2VuZGlmCi0KLSAgICBlbmNvZGVyIDw8IGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7Ci0gICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPDwgY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgZ2VuZXJhbFN0b3JhZ2VE
aXJlY3RvcnkgPDwgZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGU7Ci0KLSAgICBlbmNvZGVy
IDw8IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICBlbmNvZGVyIDw8IHBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGE7Ci0KLSAgICBlbmNvZGVyIDw8IHNob3VsZFVzZUN1c3RvbVN0b3Jh
Z2VQYXRoczsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4g
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIp
CkBAIC03OCw5MiArNjIsNiBAQCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQwogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNp
b25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAK
LSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAg
IGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIGlmICghaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KTsKLSAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZT4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29k
ZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICgh
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBkZWNvZGVy
ID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgaWYgKCFzZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IFdU
Rk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpOwotICAgIAotICAgIHN0
ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAoIXNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgCi0gICAgc3RkOjpvcHRpb25h
bDxib29sPiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkOwotICAg
IGRlY29kZXIgPj4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsK
LSAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gV1RGTW92ZSgqc2VydmljZVdvcmtlclBy
b2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCk7Ci0jZW5kaWYKLQotICAgIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgZGVjb2RlciA+PiBsb2NhbFN0
b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotCi0gICAgc3RkOjpvcHRpb25h
bDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY2FjaGVTdG9yYWdl
RGlyZWN0b3J5OwotICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OwotICAgIGlm
ICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+
PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFjYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGRlY29k
ZXIgPj4gZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgaWYgKCFnZW5lcmFsU3RvcmFnZURp
cmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmdl
bmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnkp
OwotCi0gICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5SGFuZGxlOwotICAgIGRlY29kZXIgPj4gZ2VuZXJhbFN0b3JhZ2VEaXJl
Y3RvcnlIYW5kbGU7Ci0gICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdl
RGlyZWN0b3J5SGFuZGxlID0gV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUp
OwotCi0gICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwot
ICAgIGRlY29kZXIgPj4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwotICAgIGlmICghcGVyT3JpZ2lu
U3RvcmFnZVF1b3RhKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRl
cnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gKnBlck9yaWdpblN0b3JhZ2VRdW90YTsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7
Ci0gICAgZGVjb2RlciA+PiBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwotICAgIGlm
ICghcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEg
PSAqcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhzOwotICAgIGRlY29kZXIgPj4gc2hvdWxk
VXNlQ3VzdG9tU3RvcmFnZVBhdGhzOwotICAgIGlmICghc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBh
dGhzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuc2hvdWxk
VXNlQ3VzdG9tU3RvcmFnZVBhdGhzID0gKnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKLSAg
ICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggMzdjOTdmMTMwMzA3NzVkY2U1
ZTNkMTAwMjAzNWYyMWU3MzU0MGU5OC4uNTkxOTlmNGNlYzBhNTUzOTYyNDUzNTdhMmQyNDUxNmE5
ZDFkM2M2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5oCkBAIC01MiwyOSArNTIsNiBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMgewogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGU7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMgbmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotCi0gICAgU3RyaW5nIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIFN0
cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5h
YmxlZCB7IHRydWUgfTsKLSNlbmRpZgotCi0gICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9y
eTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotCi0gICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwotCi0gICAgU3RyaW5nIGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKLQotICAgIHVp
bnQ2NF90IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5
T3JpZ2luU3RvcmFnZVF1b3RhOwotCi0gICAgYm9vbCBzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0
aHMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggMzlmZWE5MWNlNTYxNzU4MTYwYWQ5MjE4OTg5NDUzZTU4M2VkNjQ2MS4uZmI4
MzcyMzE4Nzk5MzExNDhjNzJhMTQyODIwYzhjZDBkMjQyNWRkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dApAQCAtNTMsNyArNTMsNiBAQCBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NJT1MubW0KIE5ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lP
Uy5tbQogCiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KLU5ldHdvcmtQ
cm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQogCiBOZXR3b3JrUHJvY2Vzcy93
ZWJydGMvTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcAogTmV0d29ya1Byb2Nlc3Mvd2VicnRjL05l
dHdvcmtSVENNb25pdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggN2U3NDA4ZTVhZmMwMmM4
MmVlNjk0Y2U1Mzc0Y2NlNmM5YzhmYzM4OC4uYmU5MmE0NWRkNmI4MDUzNTVkMmEzMmQ1OWRlNzAy
ZmRiZjBhMTMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC00Miw3ICs0Miw2IEBAIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3Bw
Ci1OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKIE5l
dHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRl
eCA5N2ZlZGQ0NDA5Y2ViY2IwNGZiOTU1OWVkYmY3MWJhNzY0MjhhMWNkLi5lYmEwM2M4OGJjNGQ5
NDU3NWY3YTM1MmMzY2Y2MmU3N2Q3MzY5MjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAgLTQyLDcg
KzQyLDYgQEAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAogTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtTZXNzaW9uU291cC5jcHAKLU5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHRTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJbnB1dFN0
cmVhbS5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuY3BwCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCmluZGV4IDU3ZGU4YjFmNjU4NjZmYjFmY2Y3YmQxOGJiYjY4ZDIwYzE1YWU5ZmMu
LmVhN2YxYzUwNTI2NWI2NTM5ZWY2Y2UwNTU3NWQ4NTg1YzVhYzgzODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cApAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjphZGRTZXNz
aW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlLCBTZW5kUGFyYW1ldGVyc1RvTmUKICAgICAgICAg
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUgeyBzdG9y
ZS5wYXJhbWV0ZXJzKCkgfSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVu
V2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAgIGF1dG8gc2Vzc2lvbklEID0gc3RvcmUuc2Vz
c2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgY3Jl
YXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3RvcmUucmVz
b2x2ZWRJbmRleGVkREJEaXJlY3RvcnkoKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94
eTo6cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcAppbmRleCAxYzdkMTJkYjMyZTUxNzc5ZmVlNWFjODQ1ODhkOTE2NTI2OTE1MDdm
Li4zMjU4YzU0MTA0YzU5YTNhOWNiN2YxOTAzZTQ4ZGQyOTA1MzRjMmUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcApAQCAtMTg0Myw1NSArMTg0Myw1MSBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICNpZiAhSEFWRShOU1VSTFNFU1NJT05fV0VC
U09DS0VUKQogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRBY2NlcHRJbnNlY3Vy
ZUNlcnRpZmljYXRlc0ZvcldlYlNvY2tldHMgPSBtX2NvbmZpZ3VyYXRpb24tPnNob3VsZEFjY2Vw
dEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cygpOwogI2VuZGlmCi0KLSAgICBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzKTsKLQotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0g
cmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgPSBtX2NvbmZpZ3VyYXRpb24t
PnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocygpOworICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAg
ICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90
YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICAKKyAgICBpZiAoYXV0
byBkaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOyAhZGlyZWN0b3J5
LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAgICAvLyBGSVhNRTogU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5IHJlc29sdmVzIHRoZSBkaXJl
Y3RvcnksIGJ1dCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gUmVtb3ZlIHRoaXMgZHVwbGlj
YXRlIHdvcmsuCi0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAgICAgICBpZiAoYXV0
byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkoZGlyZWN0b3J5KSkKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VBbGxEaXJl
Y3RvcmllcyhkaXJlY3RvcnkpOworICAgICAgICBGaWxlU3lzdGVtOjpleGNsdWRlRnJvbUJhY2t1
cChkaXJlY3RvcnkpOworI2VuZGlmCiAgICAgfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQotICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IHJl
c29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlmICghcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LmlzRW1wdHkoKSkgewor
ICAgIGlmIChhdXRvIGRpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERCRGlyZWN0b3J5KCk7ICFk
aXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5p
bmRleGVkREJEaXJlY3RvcnkgPSBkaXJlY3Rvcnk7CiAgICAgICAgIC8vIEZJWE1FOiBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkgcmVzb2x2ZXMgdGhl
IGRpcmVjdG9yeSwgYnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBSZW1vdmUgdGhpcyBk
dXBsaWNhdGUgd29yay4KLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpo
YW5kbGUpOworICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBu
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5zZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKCk7Ci0jZW5kaWYKLQotICAgIGF1
dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7
CisgICAgCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGlmIChhdXRvIGRpcmVjdG9y
eSA9IHJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyAhZGlyZWN0
b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IGRpcmVjdG9yeTsKICAgICAgICAgLy8gRklY
TUU6IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeSBy
ZXNvbHZlcyB0aGUgZGlyZWN0b3J5LCBidXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuIFJl
bW92ZSB0aGlzIGR1cGxpY2F0ZSB3b3JrLgotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9y
YWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9jYWxTdG9y
YWdlRGlyZWN0b3J5KTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9j
YWxTdG9yYWdlRGlyZWN0b3J5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIGF1dG8gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFj
YWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICBpZiAo
YXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsK
KyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQotCisgICAgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSBt
X2NvbmZpZ3VyYXRpb24tPnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgCiAgICAgaWYgKGF1dG8gZGlyZWN0b3J5ID0gZ2Vu
ZXJhbFN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICAgICAg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0
b3J5OwogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwor
ICAgICAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0
b3J5SGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zaG91
bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgPSBjb25maWd1cmF0aW9uKCkuc2hvdWxkVXNlQ3VzdG9t
U3RvcmFnZVBhdGhzKCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9
IHBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAg
ICBpZiAoYXV0byBkaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9y
eSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKKyAgICB9CiAKKyAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElP
TikKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZDsKICNlbmRpZgpAQCAtMTkwMCw3ICsxODk2LDcgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQ
ZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7
CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMudXNlTmV0d29ya0xvYWRl
ciA9IHVzZU5ldHdvcmtMb2FkZXIoKTsKICNlbmRpZgotICAgIAorCiAgICAgcmV0dXJuIHBhcmFt
ZXRlcnM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBjZmNlNWNlNDRiNmQ1NjVjMDI5YzI1OTlmMmJm
NzhmNGZmNDRlZjQ0Li43Y2U0NzUzN2I1YzdmYmI3MjdmNzgyYjYxMjMxOTA5M2YxMzZlYzJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCkBAIC0yNTQsNyArMjU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmlu
ZyYgcmVzb2x2ZWREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRD
b25maWd1cmF0aW9uLT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3Ry
aW5nJiByZXNvbHZlZEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmphdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5KCk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkQ29va2llU3RvcmFnZUZpbGUo
KSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+Y29va2llU3RvcmFnZUZp
bGUoKTsgfQotICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+aW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkoKTsgfQorICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkREJE
aXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+aW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRTZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZl
ZENvbmZpZ3VyYXRpb24tPnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsgfQog
ICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkoKTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRIU1RTU3Rv
cmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5o
c3RzU3RvcmFnZURpcmVjdG9yeSgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453564</attachid>
            <date>2022-03-01 19:29:15 -0800</date>
            <delta_ts>2022-03-02 14:39:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237335-20220301192914.patch</filename>
            <type>text/plain</type>
            <size>69514</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDllNzhlNDYyNWM1NTllNjMx
ZDQ0NjQ3M2QzMDg3Nzg5Y2FlZjAzMGQuLmMzOWU5ZThjMmYwNTdhMGQzZjY0YmM0YjY2MjBiYjFm
MjU2MGFmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjItMDMtMDEgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAocjI4OTQ3NCk6
IGNhY2hlU3RvcmFnZVBhdGggaXMgZW1wdHkgaW4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzczMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6c3RvcmFnZVBhdGggcmV0dXJucyBl
bXB0eVN0cmluZyBpZiBzYWx0IGZpbGUgdW5kZXIgcm9vdERpcmVjdG9yeSBjYW5ub3QgYmUgcmVh
ZCBvcgorICAgICAgICB3cml0dGVuLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzYW5kYm94IGV4
dGVuc2lvbiBmb3Igcm9vdERpcmVjdG9yeSBpcyBjb25zdW1lZCBiZWZvcmUgY2FsbGluZyBzdG9y
YWdlUGF0aAorICAgICAgICAoaW4gY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIG9mIE5ldHdv
cmtTZXNzaW9uKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIGNvZGUgYWJv
dXQgYWRkaW5nIHNlc3Npb24gaW4gbmV0d29yayBwcm9jZXNzLiBOb3cgd2Ugd291bGQgY3JlYXRl
IAorICAgICAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgd2hlbiBOZXR3b3JrU2Vzc2lvbiBpcyBj
cmVhdGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9y
YXJ5RmlsZXNGb3JJbmRleGVkREIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OmFkZFN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
aGFzTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNo
V2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vi
c2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZUFuZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpjbGVhclN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGlk
SW5jcmVhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5hbWVP
cmlnaW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVp
UHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVO
ZXR3b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6
TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxp
ZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpsb3dNZW1v
cnlIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246
OmFkZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246
OnN0b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQubW06IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICog
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpyZXNvbHZlZEluZGV4ZWREQkRpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IGNv
bnN0KTogRGVsZXRlZC4KKwogMjAyMi0wMy0wMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBmb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pIGRvZXMg
bm90IHByZXZlbnQgc2Nyb2xsaW5nIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApp
bmRleCBhMmEwOGZiNjkyZGEzNmQ1NTMwMzk2NjUyZjU4NzMwOGViNzQyMzQ2Li5hYWFlYTExZjUw
YTljYzI3ZWE2YThjOWU1MTYzOWZmM2U4ZGNjZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtNDA5LDEyICs0MDksOCBAQCBib29sIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZQogCiB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVz
YWdlRm9yVGVzdGluZyhjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBhdXRvKiBz
ZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpOwot
ICAgIGlmICghc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHN0b3Jh
Z2VNYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgc3RvcmFnZU1h
bmFnZXItPnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyhvcmlnaW4pOwor
ICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbV9uZXR3b3JrUHJvY2Vzcy0+bmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKCkpKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLnJlc2V0UXVv
dGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyhvcmlnaW4pOwogfQogCiB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCkBAIC0xMDAzLDEwICs5OTksOSBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25zdAogICAg
ICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlUmVmZXJlbmNlcykKICAgICAgICAgICAgIGZpbGUt
PnJldm9rZUZpbGVBY2Nlc3MoKTsKIAotICAgICAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdv
cmtTZXNzaW9uKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBzdG9yYWdlTWFuYWdlciA9IHNl
c3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICAgICAgc3RvcmFnZU1hbmFnZXIt
PnJlZ2lzdGVyVGVtcG9yYXJ5QmxvYkZpbGVQYXRocyhtX2Nvbm5lY3Rpb24sIGZpbGVQYXRocyk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigp
KQorICAgICAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5yZWdpc3RlclRlbXBvcmFy
eUJsb2JGaWxlUGF0aHMobV9jb25uZWN0aW9uLCBmaWxlUGF0aHMpOworCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoZmlsZVBhdGhzKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDIwZmE2NGM5
M2ZkZDlmMTdhZmE3OGEzZmQ3NjVkNDEyZmU2MmNlYWQuLmM5ODczNTE2YjI4OTI1M2U4NzkxMDQw
YTI4NDZkODc2ZTliYzZiZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUHJlY29ubmVjdFRhc2suaCIKICNpbmNsdWRlICJQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0b3JlLmgiCi0jaW5jbHVkZSAiUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXJT
ZXQuaCIKQEAgLTEwMiw2ICsxMDEsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5o
IgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiQ29va2llU3RvcmFnZVV0aWxzQ0Yu
aCIKICNpbmNsdWRlICJMYXVuY2hTZXJ2aWNlc0RhdGFiYXNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW5jbHVkZSA8d3RmL2NvY29hL0VudGl0bGVtZW50
cy5oPgpAQCAtMzgyLDEwICszODIsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhQcm9jZXNzSWRlbnRpZmllciBpZGVudAogCiAgICAg
Y29ubmVjdGlvbi5zZXRPbkxpbmVTdGF0ZShOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2luZ2xldG9u
KCkub25MaW5lKCkpOwogCi0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKSkKLSAgICAgICAgICAgIG1hbmFnZXItPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZy
b21Db25uZWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbigpKTsKLSAgICB9CisgICAgaWYgKGF1
dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzZXNzaW9u
LT5zdG9yYWdlTWFuYWdlcigpLnN0YXJ0UmVjZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKGNv
bm5lY3Rpb24uY29ubmVjdGlvbigpKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0zOTcsMTkgKzM5
NSw1NCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmFk
ZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJz
KQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSkK
IHsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRDsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICByZXR1cm47CiAKLSAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIHBhcmFtZXRlcnMpOworICAgIGlmIChz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pIHsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG5ld1Rlc3RpbmdTZXNzaW9uKHNlc3Npb25JRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Np
b25JRCkpIHsKLSAgICAgICAgc2Vzc2lvbi0+YWRkU3RvcmFnZU1hbmFnZXJTZXNzaW9uKHBhcmFt
ZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VE
aXJlY3RvcnlIYW5kbGUsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSwgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlLCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpOwor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiB1aVByb2Nlc3NDb29raWVTdG9yYWdlOworICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkgJiYgIXVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29va2llU3RvcmFnZVBh
dGhFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICB1aVByb2Nlc3NDb29raWVTdG9y
YWdlID0gY29va2llU3RvcmFnZUZyb21JZGVudGlmeWluZ0RhdGEodWlQcm9jZXNzQ29va2llU3Rv
cmFnZUlkZW50aWZpZXIpOworICAgIH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICAgICAgc2Vzc2lvbi0+YWRkU2VydmljZVdvcmtlclNlc3Npb24ocGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0jZW5kaWYKKyAgICBh
dXRvIGlkZW50aWZpZXJCYXNlID0gbWFrZVN0cmluZyh1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVy
KCksICcuJywgc2Vzc2lvbklELnRvVUludDY0KCkpOworICAgIFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiBzdG9yYWdlU2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNmSWRlbnRpZmllciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dz
aW5nLiIsIGNyZWF0ZVZlcnNpb240VVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOworICAg
IGlmIChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBj
cmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpLCBzdGQ6Om51bGxv
cHQsIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6U2hvdWxkRGlzYWJsZUNGVVJMQ2Fj
aGU6Olllcyk7CisgICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkpCisgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklk
ZW50aWZpZXIuZ2V0KCkpOworCisgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vz
c01heVVzZUNvb2tpZUFQSSgpKSB7CisgICAgICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdl
KFByb2Nlc3NQcml2aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKKyAgICAgICAgaWYgKCF1
aVByb2Nlc3NDb29raWVTdG9yYWdlICYmIHN0b3JhZ2VTZXNzaW9uKQorICAgICAgICAgICAgdWlQ
cm9jZXNzQ29va2llU3RvcmFnZSA9IGFkb3B0Q0YoX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q29v
a2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbi5nZXQoKSkpOwog
ICAgIH0KKworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBXVEZNb3ZlKHN0b3JhZ2VTZXNzaW9uKSwgV1RG
TW92ZSh1aVByb2Nlc3NDb29raWVTdG9yYWdlKSk7CisjZWxpZiBVU0UoQ1VSTCkgfHwgVVNFKFNP
VVApCisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlxdWU8TmV0d29ya1N0
b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQpOworI2VuZGlmCit9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJh
bWV0ZXJzKQoreworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuc2Vzc2lvbklEOworICAgIGFkZFN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdv
cmtTZXNzaW9uLCBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIGlmICht
X25ldHdvcmtTZXNzaW9ucy5jb250YWlucyhzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9uZXR3b3JrU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0
ZSgqdGhpcywgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKTsKKyAgICAKIH0K
IAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC00MzUsNDEgKzQ2OCw2IEBA
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IE5ldHdvcmtQ
cm9jZXNzOjpuZXdUZXN0aW5nU2Vzc2lvCiAjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXJCYXNlLCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4mJiBjb29r
aWVTdG9yYWdlKQotI2Vsc2UKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lv
biwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSkKLSNlbmRpZgotewotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9uZXR3b3JrU3RvcmFnZVNlc3Npb25zLmFkZChzZXNzaW9uSUQsIG51bGxwdHIp
OwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24pIHsKLSAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IG5ld1Rlc3RpbmdTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRy
PENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IHN0b3JhZ2VTZXNzaW9uOwotICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gbWFrZVN0cmluZyhpZGVudGlmaWVyQmFzZSwgIi5Q
cml2YXRlQnJvd3NpbmcuIiwgY3JlYXRlVmVyc2lvbjRVVUlEU3RyaW5nKCkpLmNyZWF0ZUNGU3Ry
aW5nKCk7Ci0gICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICBzdG9yYWdl
U2Vzc2lvbiA9IGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCks
IHN0ZDo6bnVsbG9wdCwgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpTaG91bGREaXNh
YmxlQ0ZVUkxDYWNoZTo6WWVzKTsKLSAgICBlbHNlIGlmIChzZXNzaW9uSUQgIT0gUEFMOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNyZWF0ZUNGU3RvcmFnZVNlc3Npb25Gb3JJZGVu
dGlmaWVyKGNmSWRlbnRpZmllci5nZXQoKSk7Ci0KLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpwcm9jZXNzTWF5VXNlQ29va2llQVBJKCkpIHsKLSAgICAgICAgQVNTRVJUKGhhc1Byb2Nl
c3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykpOwotICAg
ICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UgJiYgc3RvcmFnZVNlc3Npb24pCi0gICAgICAgICAgICBj
b29raWVTdG9yYWdlID0gYWRvcHRDRihfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNvcHlDb29raWVTdG9y
YWdlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHN0b3JhZ2VTZXNzaW9uLmdldCgpKSk7Ci0gICAgfQot
Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlxdWU8TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uPihzZXNzaW9uSUQsIFdURk1vdmUoc3RvcmFnZVNlc3Npb24pLCBXVEZNb3ZlKGNv
b2tpZVN0b3JhZ2UpKTsKLSNlbGlmIFVTRShDVVJMKSB8fCBVU0UoU09VUCkKLSAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNl
c3Npb25JRCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y29va2llQWNjZXB0
UG9saWN5Q2hhbmdlZChIVFRQQ29va2llQWNjZXB0UG9saWN5IG5ld1BvbGljeSkKIHsKICAgICBm
b3IgKGF1dG8mIGNvbm5lY3Rpb24gOiBtX3dlYlByb2Nlc3NDb25uZWN0aW9ucy52YWx1ZXMoKSkK
QEAgLTk5OSwxMSArOTk3LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyVXNlckludGVy
YWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0CiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpoYXNMb2NhbFN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vz
c2lvbihzZXNzaW9uSUQpOwotICAgIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi0+c3RvcmFnZU1h
bmFnZXIoKSkKKyAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcihmYWxzZSk7CiAKICAgICBhdXRvIHR5cGVzID0gT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZT4geyBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSB9OwotICAgIHNlc3Npb24tPnN0b3Jh
Z2VNYW5hZ2VyKCktPmZldGNoRGF0YSh0eXBlcywgW2RvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKKyAg
ICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmZldGNoRGF0YSh0eXBlcywgW2RvbWFpbiwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBlbnRyaWVz
KSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjphbnlPZihlbnRyaWVz
LCBbJmRvbWFpbl0oYXV0byYgZW50cnkpIHsKICAgICAgICAgICAgIHJldHVybiBkb21haW4ubWF0
Y2hlcyhlbnRyeS5vcmlnaW4pOwogICAgICAgICB9KSk7CkBAIC0xNDY0LDggKzE0NjIsOCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgT3B0aW9uU2V0PFdlYnNpdAogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKE5ldHdvcmtT
dG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lv
biAmJiBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKSB7Ci0gICAgICAgIHNlc3Npb24tPnN0b3Jh
Z2VNYW5hZ2VyKCktPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFn
ZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24pIHsKKyAgICAg
ICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5mZXRjaERhdGEod2Vic2l0ZURhdGFUeXBlcywg
W2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+bV93ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZFZlY3RvcihX
VEZNb3ZlKGVudHJpZXMpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTUyNyw4ICsxNTI1LDgg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICAgICAgc2Vzc2lvbi0+Y2xlYXJBbHRlcm5h
dGl2ZVNlcnZpY2VzKG1vZGlmaWVkU2luY2UpOwogI2VuZGlmCiAKLSAgICBpZiAoTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9u
ICYmIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VN
YW5hZ2VyKCktPmRlbGV0ZURhdGFNb2RpZmllZFNpbmNlKHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlm
aWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uKQor
ICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLmRlbGV0ZURhdGFNb2RpZmllZFNpbmNl
KHdlYnNpdGVEYXRhVHlwZXMsIG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlcl0geyB9
KTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYXJEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6
Q2FjaGUqIGNhY2hlLCBjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTYyMCw4
ICsxNjE4LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICB9CiAjZW5kaWYKIAotICAg
IGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlw
ZXMpICYmIHNlc3Npb24gJiYgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgc2Vz
c2lvbi0+c3RvcmFnZU1hbmFnZXIoKS0+ZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBvcmln
aW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOworICAgIGlmIChOZXR3b3JrU3RvcmFn
ZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24pCisg
ICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlRGF0YSh3ZWJzaXRlRGF0YVR5
cGVzLCBvcmlnaW5EYXRhcywgW2NsZWFyVGFza3NIYW5kbGVyXSB7IH0pOwogCiAgICAgaWYgKHNl
c3Npb24pIHsKICAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9t
YWluc1RvRGVsZXRlTmV0d29ya0RhdGFGb3I7CkBAIC0xODEyLDggKzE4MTAsOCBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpkZWxldGVBbmRSZXN0cmljdFdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVE
b21haW5zKFBBTDo6U2VzcwogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9u
ICYmIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpIHsKLSAgICAgICAgc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKS0+ZGVsZXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5
cGVzLCBkb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNr
QWdncmVnYXRvcl0oYXV0byYmIGRlbGV0ZWREb21haW5zKSBtdXRhYmxlIHsKKyAgICBpZiAoTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBz
ZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlRGF0YUZv
clJlZ2lzdHJhYmxlRG9tYWlucyh3ZWJzaXRlRGF0YVR5cGVzLCBkb21haW5zVG9EZWxldGVBbGxO
b25Db29raWVXZWJzaXRlRGF0YUZvciwgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIGRlbGV0
ZWREb21haW5zKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGZvciAoYXV0byBkb21haW4gOiBkZWxl
dGVkRG9tYWlucykKICAgICAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fZG9tYWlu
cy5hZGQoV1RGTW92ZShkb21haW4pKTsKICAgICAgICAgfSk7CkBAIC0xOTI5LDggKzE5MjcsOCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAo
c2Vzc2lvbiAmJiBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKSB7Ci0gICAgICAgIHNlc3Npb24t
PnN0b3JhZ2VNYW5hZ2VyKCktPmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yXShhdXRvIGVudHJpZXMpIG11dGFibGUgeworICAgIGlmIChzZXNzaW9uKSB7Cisg
ICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlw
ZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0
b3IoV1RGTW92ZShlbnRyaWVzKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTIwOTksOCArMjA5
Nyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3Bl
bnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRsCiAgICAgICAgIGlmIChhdXRvKiBzd1NlcnZl
ciA9IHNlc3Npb24uc3dTZXJ2ZXIoKSkKICAgICAgICAgICAgIHN3U2VydmVyLT5zdGFydFN1c3Bl
bnNpb24oW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbmRpZgotICAgICAgICBpZiAoYXV0
byogc3RvcmFnZU1hbmFnZXIgPSBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAg
ICBzdG9yYWdlTWFuYWdlci0+c3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworICAg
ICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkuc3VzcGVuZChbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7IH0pOwogICAgIH0pOwogCiAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV93ZWJQcm9j
ZXNzQ29ubmVjdGlvbnMudmFsdWVzKCkpCkBAIC0yMTM4LDggKzIxMzUsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpyZXN1bWUoKQogICAgICAgICBpZiAoYXV0byogc3dTZXJ2ZXIgPSBzZXNzaW9u
LnN3U2VydmVyKCkpCiAgICAgICAgICAgICBzd1NlcnZlci0+ZW5kU3VzcGVuc2lvbigpOwogI2Vu
ZGlmCi0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigp
KQotICAgICAgICAgICAgbWFuYWdlci0+cmVzdW1lKCk7CisgICAgICAgIHNlc3Npb24uc3RvcmFn
ZU1hbmFnZXIoKS5yZXN1bWUoKTsKICAgICB9KTsKIH0KIApAQCAtMjE3Miw0MSArMjE2OCwyOCBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZAogewogICAgIGF1dG8gYWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBm
b3JFYWNoTmV0d29ya1Nlc3Npb24oWyZdKGF1dG8mIHNlc3Npb24pIHsKLSAgICAgICAgaWYgKGF1
dG8qIG1hbmFnZXIgPSBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5h
Z2VyLT5zeW5jTG9jYWxTdG9yYWdlKFthZ2dyZWdhdG9yXSB7IH0pOworICAgICAgICBzZXNzaW9u
LnN0b3JhZ2VNYW5hZ2VyKCkuc3luY0xvY2FsU3RvcmFnZShbYWdncmVnYXRvcl0geyB9KTsKICAg
ICB9KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAg
ICBpZiAoIXNlc3Npb24pCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0g
ICAgYXV0byogc3RvcmFnZU1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpOwotICAg
IGlmICghc3RvcmFnZU1hbmFnZXIpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigp
OwotCi0gICAgc3RvcmFnZU1hbmFnZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9u
KHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkucmVzZXRRdW90
YUZvclRlc3RpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjbGVhclN0b3JhZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogc2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKGF1dG8qIG1hbmFnZXIg
PSBzZXNzaW9uID8gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSA6IG51bGxwdHIpCi0gICAgICAg
IG1hbmFnZXItPmNsZWFyU3RvcmFnZUZvclRlc3RpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkK
KyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5jbGVhclN0b3JhZ2VGb3JUZXN0aW5n
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBlbHNlCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEluY3JlYXNlUXVvdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgUXVv
dGFJbmNyZWFzZVJlcXVlc3RJZGVudGlmaWVyIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IG5ld1F1b3RhKQogewotICAgIGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihz
ZXNzaW9uSUQpOwotICAgIGlmICghc2Vzc2lvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF1dG8qIG1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKQotICAgICAgICBtYW5h
Z2VyLT5kaWRJbmNyZWFzZVF1b3RhKG9yaWdpbiwgaWRlbnRpZmllciwgbmV3UXVvdGEpOworICAg
IGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAg
c2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5kaWRJbmNyZWFzZVF1b3RhKG9yaWdpbiwgaWRlbnRp
ZmllciwgbmV3UXVvdGEpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW5hbWVPcmlnaW5J
bldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiBvbGROYW1l
LCBjb25zdCBVUkwmIG5ld05hbWUsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBl
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjIx
OCw5ICsyMjAxLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3JpZ2luSW5XZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFUKICAgICBpZiAob2xkT3JpZ2lu
LmlzRW1wdHkoKSB8fCBuZXdPcmlnaW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBpZiAoYXV0
byogbWFuYWdlciA9IHNlc3Npb24gPyBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpIDogbnVsbHB0
cikKLSAgICAgICAgbWFuYWdlci0+bW92ZURhdGEoZGF0YVR5cGVzLCBvbGRPcmlnaW4sIG5ld09y
aWdpbiwgW2FnZ3JlZ2F0b3JdIHsgfSk7CisgICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3Jr
U2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLm1v
dmVEYXRhKGRhdGFUeXBlcywgb2xkT3JpZ2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0p
OwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtMjI5Nyw2ICsyMjc5LDExIEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtRmx1c2hDb29raWVzKFBBTDo6U2Vzc2lvbklE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAor
Y29uc3QgU3RyaW5nJiBOZXR3b3JrUHJvY2Vzczo6dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcigp
Cit7CisgICAgcmV0dXJuIG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKK30KKwogI2VuZGlm
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN0b3JlUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYm
IHByaXZhdGVDbGlja01lYXN1cmVtZW50KQpAQCAtMjQ3NCwxMCArMjQ2MSw4IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJiBs
b2FkZXIpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NDbG9z
ZWQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQp
CiB7Ci0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkK
LSAgICAgICAgICAgIG1hbmFnZXItPnN0b3BSZWNlaXZpbmdNZXNzYWdlRnJvbUNvbm5lY3Rpb24o
Y29ubmVjdGlvbik7Ci0gICAgfQorICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Np
b24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5zdG9wUmVj
ZWl2aW5nTWVzc2FnZUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24pOwogfQogCiBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyogTmV0d29ya1Byb2Nlc3M6OndlYlByb2Nlc3NDb25uZWN0aW9u
KFByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYTNlZjExMjg1NzExNmRmMTU4ODY5
YTk2NmI4NTljYWQxMzhmNDhhOC4uY2FiNGEzZDk5MDAwNTQ4Zjc1NzUyMTFiZmYwMjgzZWIwNTdj
NTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aApAQCAtMTY4LDExICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JFYWNoTmV0d29ya1N0
b3JhZ2VTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJik+Jik7CiAgICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdl
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCkgY29uc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4gbmV3VGVzdGluZ1Nlc3Npb24oUEFMOjpTZXNzaW9u
SUQpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgZW5zdXJlU2Vzc2lvbihQQUw6OlNl
c3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYpOwotI2Vs
c2UKLSAgICB2b2lkIGVuc3VyZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpOwotI2VuZGlm
CisgICAgdm9pZCBhZGRTdG9yYWdlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgYm9vbCBzaG91bGRV
c2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdWlQcm9jZXNz
Q29va2llU3RvcmFnZUlkZW50aWZpZXIsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYp
OwogCiAgICAgdm9pZCBwcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZ1N5bmMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHByZXBhcmVUb1N1c3BlbmQo
Ym9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
QEAgLTMwNCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJlbnRQcm9jZXNzSGFzU2Vy
dmljZVdvcmtlckVudGl0bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAK
LSAgICBjb25zdCBTdHJpbmcmIHVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVp
UHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIoKTsKIAogICAgIHZvaWQgcmVmKCkgY29uc3Qgb3ZlcnJp
ZGUgeyBUaHJlYWRTYWZlUmVmQ291bnRlZDxOZXR3b3JrUHJvY2Vzcz46OnJlZigpOyB9CiAgICAg
dm9pZCBkZXJlZigpIGNvbnN0IG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29y
a1Byb2Nlc3M+OjpkZXJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IDZkZGM3MjBmNzA3YTM3NjIxMDFkZjkyNmJlOTQzMDg2
M2Y1M2NiNGQuLmRkMDM4YTAzODJlYzA2M2UwMzJiNjViNjMwZTg0NmZhNzhmZTY5ZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0x
MTEsNiArMTExLDE4IEBAIHN0YXRpYyBVbmlxdWVSZWY8UENNOjpNYW5hZ2VySW50ZXJmYWNlPiBt
YW5hZ2VyT3JQcm94eShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1NlCiAgICAgcmV0dXJuIG1ha2VV
bmlxdWVSZWY8UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyPihtYWtlVW5pcXVlUmVmPFBD
TTo6Q2xpZW50SW1wbD4obmV0d29ya1Nlc3Npb24sIG5ldHdvcmtQcm9jZXNzKSwgcGNtU3RvcmVE
aXJlY3RvcnkobmV0d29ya1Nlc3Npb24sIHBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BhcmFtZXRlcnMuZGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
YXJhbWV0ZXJzLnByaXZhdGVDbGlja01lYXN1cmVtZW50U3RvcmFnZURpcmVjdG9yeSkpOwogfQog
CitzdGF0aWMgUmVmPE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gY3JlYXRlTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5pbmRleGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1h
bmVudGx5KHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpOworICAgIElQ
Qzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEOworICAgIGlmIChjb25uZWN0aW9u
KQorICAgICAgICBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLT51bmlxdWVJRCgpOworICAgIHJl
dHVybiBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShwYXJhbWV0ZXJzLnNlc3Npb25JRCwg
Y29ubmVjdGlvbklELCBwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkREJEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBw
YXJhbWV0ZXJzLnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Cit9CisKIE5ldHdvcmtTZXNz
aW9uOjpOZXR3b3JrU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0
IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIDogbV9z
ZXNzaW9uSUQocGFyYW1ldGVycy5zZXNzaW9uSUQpCiAgICAgLCBtX25ldHdvcmtQcm9jZXNzKG5l
dHdvcmtQcm9jZXNzKQpAQCAtMTMxLDYgKzE0Myw3IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3Jr
U2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IE5ldHdvcmtTZXNz
CiAgICAgLCBtX3Rlc3RTcGVlZE11bHRpcGxpZXIocGFyYW1ldGVycy50ZXN0U3BlZWRNdWx0aXBs
aWVyKQogICAgICwgbV9hbGxvd3NTZXJ2ZXJQcmVjb25uZWN0KHBhcmFtZXRlcnMuYWxsb3dzU2Vy
dmVyUHJlY29ubmVjdCkKICAgICAsIG1fc2hvdWxkUnVuU2VydmljZVdvcmtlcnNPbk1haW5UaHJl
YWRGb3JUZXN0aW5nKHBhcmFtZXRlcnMuc2hvdWxkUnVuU2VydmljZVdvcmtlcnNPbk1haW5UaHJl
YWRGb3JUZXN0aW5nKQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihjcmVhdGVOZXR3b3JrU3RvcmFn
ZU1hbmFnZXIobmV0d29ya1Byb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSwgcGFyYW1l
dGVycykpCiAjaWYgRU5BQkxFKEJVSUxUX0lOX05PVElGSUNBVElPTlMpCiAgICAgLCBtX25vdGlm
aWNhdGlvbk1hbmFnZXIoKnRoaXMsIHBhcmFtZXRlcnMud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSkK
ICNlbmRpZgpAQCAtMTY5LDYgKzE4MiwxNCBAQCBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Np
b24oTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBjb25zdCBOZXR3b3JrU2VzcwogICAg
IHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnMuZW5hYmxlZCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBtX3NlcnZpY2VXb3JrZXJJbmZvID0gU2VydmljZVdvcmtlckluZm8geworICAgICAg
ICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnksCisgICAgICAg
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAor
ICAgIH07CisjZW5kaWYKKwogI2lmIEVOQUJMRShCVUlMVF9JTl9OT1RJRklDQVRJT05TKQogICAg
IG1fbmV0d29ya1Byb2Nlc3MtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Tm90aWZpY2F0
aW9uTWFuYWdlck1lc3NhZ2VIYW5kbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fc2Vzc2lv
bklELnRvVUludDY0KCksIG1fbm90aWZpY2F0aW9uTWFuYWdlcik7CiAjZW5kaWYKQEAgLTIwNiw4
ICsyMjcsNyBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKICAg
ICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKQogICAgICAgICBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MtPmludmFsaWRhdGVBbmRDYW5jZWwoKTsKICNlbmRpZgotICAgIGlmIChhdXRvIG1h
bmFnZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc3RvcmFnZU1hbmFnZXIsIG51bGxwdHIpKQotICAgICAg
ICBtYW5hZ2VyLT5jbG9zZSgpOworICAgIG1fc3RvcmFnZU1hbmFnZXItPmNsb3NlKCk7CiAgICAg
bV9jYWNoZUVuZ2luZSA9IG51bGxwdHI7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBtX2lzSW52
YWxpZGF0ZWQgPSB0cnVlOwpAQCAtNTY4LDggKzU4OCw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246
Omxvd01lbW9yeUhhbmRsZXIoQ3JpdGljYWwpCiAgICAgaWYgKG1fc3dTZXJ2ZXIpCiAgICAgICAg
IG1fc3dTZXJ2ZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKICNlbmRpZgotICAgIGlmICht
X3N0b3JhZ2VNYW5hZ2VyKQotICAgICAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5oYW5kbGVMb3dNZW1v
cnlXYXJuaW5nKCk7CisgICAgbV9zdG9yYWdlTWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2Fybmlu
ZygpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNjM1LDE3ICs2NTQsNiBA
QCBTV1NlcnZlciYgTmV0d29ya1Nlc3Npb246OmVuc3VyZVNXU2VydmVyKCkKICAgICByZXR1cm4g
Km1fc3dTZXJ2ZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VXb3JrZXJT
ZXNzaW9uKGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBTdHJpbmcmJiBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmIGhhbmRsZSkKLXsKLSAgICBib29sIGhhZFNlcnZpY2VXb3JrZXJJbmZvID0gISFtX3Nl
cnZpY2VXb3JrZXJJbmZvOwotICAgIG1fc2VydmljZVdvcmtlckluZm8gPSBTZXJ2aWNlV29ya2Vy
SW5mbyB7Ci0gICAgICAgIFdURk1vdmUoc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSksCi0gICAgICAgIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAotICAgIH07Ci0gICAg
aWYgKCFoYWRTZXJ2aWNlV29ya2VySW5mbykKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7Ci19Ci0KIGJvb2wgTmV0d29ya1Nlc3Npb246Omhhc1Nl
cnZpY2VXb3JrZXJEYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlcnZpY2VX
b3JrZXJJbmZvICYmICFtX3NlcnZpY2VXb3JrZXJJbmZvLT5kYXRhYmFzZVBhdGguaXNFbXB0eSgp
OwpAQCAtNjYwLDIwICs2NjgsNiBAQCBXZWJTaGFyZWRXb3JrZXJTZXJ2ZXImIE5ldHdvcmtTZXNz
aW9uOjplbnN1cmVTaGFyZWRXb3JrZXJTZXJ2ZXIoKQogICAgIHJldHVybiAqbV9zaGFyZWRXb3Jr
ZXJTZXJ2ZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmFkZFN0b3JhZ2VNYW5hZ2VyU2Vz
c2lvbihjb25zdCBTdHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJiBnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9y
YWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxl
LCBjb25zdCBTdHJpbmcmIGlkYlN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IGlkYlN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGNhY2hlU3RvcmFnZVBhdGgsIHVp
bnQ2NF90IGRlZmF1bHRPcmlnaW5RdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90
YSwgYm9vbCBzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpCi17Ci0gICAgaWYgKG1fc3RvcmFn
ZU1hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShnZW5lcmFsU3RvcmFnZVBhdGhIYW5kbGUpOwotICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlKTsKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaWRiU3RvcmFnZVBhdGhIYW5kbGUp
OwotICAgIElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChh
dXRvKiBjb25uZWN0aW9uID0gbmV0d29ya1Byb2Nlc3MoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpKQotICAgICAgICBjb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uLT51bmlxdWVJRCgpOwotICAg
IG1fc3RvcmFnZU1hbmFnZXIgPSBOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShzZXNzaW9u
SUQoKSwgY29ubmVjdGlvbklELCBnZW5lcmFsU3RvcmFnZVBhdGgsIGxvY2FsU3RvcmFnZVBhdGgs
IGlkYlN0b3JhZ2VQYXRoLCBjYWNoZVN0b3JhZ2VQYXRoLCBkZWZhdWx0T3JpZ2luUXVvdGEsIGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGEsIHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Ci19Ci0K
IHZvaWQgTmV0d29ya1Nlc3Npb246OmVuc3VyZUNhY2hlRW5naW5lKEZ1bmN0aW9uPHZvaWQoQ2Fj
aGVTdG9yYWdlOjpFbmdpbmUmKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9jYWNoZUVuZ2lu
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRl
eCA4NWM3Y2JkNjkwMzRkOWNiYTdmNDQ1ZGE5ZGU0NzVhMWQ3YjM1MTE4Li41OTgwNmJkZmI0YmUy
YjE0MDRmNDE5M2M3MDg5ODk2OWYzNDE2MDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC0yMDcsMTYgKzIwNywxMiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1bnJlZ2lzdGVyU1dTZXJ2ZXJDb25uZWN0aW9uKFdlYlNXU2VydmVyQ29ubmVjdGlv
biYpOwogCiAgICAgYm9vbCBoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKGJvb2wgcHJvY2Vzc1Rlcm1pbmF0aW9u
RGVsYXlFbmFibGVkLCBTdHJpbmcmJiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNlbmRpZgogCiAgICAgV2ViU2hh
cmVkV29ya2VyU2VydmVyKiBzaGFyZWRXb3JrZXJTZXJ2ZXIoKSB7IHJldHVybiBtX3NoYXJlZFdv
cmtlclNlcnZlci5nZXQoKTsgfQogICAgIFdlYlNoYXJlZFdvcmtlclNlcnZlciYgZW5zdXJlU2hh
cmVkV29ya2VyU2VydmVyKCk7CiAKLSAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VN
YW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsgfQotICAgIHZvaWQgYWRk
U3RvcmFnZU1hbmFnZXJTZXNzaW9uKGNvbnN0IFN0cmluZyYgZ2VuZXJhbFN0b3JhZ2VQYXRoLCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGdlbmVyYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBsb2NhbFN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGxvY2Fs
U3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgaWRiU3RvcmFnZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgaWRiU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgY2Fj
aGVTdG9yYWdlUGF0aCwgdWludDY0X3QgZGVmYXVsdE9yaWdpblF1b3RhLCB1aW50NjRfdCBkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhLCBib29sIHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyk7Ci0K
KyAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXImIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9z
dG9yYWdlTWFuYWdlci5nZXQoKTsgfQogICAgIENhY2hlU3RvcmFnZTo6RW5naW5lKiBjYWNoZUVu
Z2luZSgpIHsgcmV0dXJuIG1fY2FjaGVFbmdpbmUuZ2V0KCk7IH0KICAgICB2b2lkIGVuc3VyZUNh
Y2hlRW5naW5lKEZ1bmN0aW9uPHZvaWQoQ2FjaGVTdG9yYWdlOjpFbmdpbmUmKT4mJik7CiAgICAg
dm9pZCBjbGVhckNhY2hlRW5naW5lKCk7CkBAIC0zMTgsNyArMzE0LDcgQEAgcHJvdGVjdGVkOgog
I2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlNoYXJlZFdvcmtlclNlcnZlcj4gbV9zaGFy
ZWRXb3JrZXJTZXJ2ZXI7CiAKLSAgICBSZWZQdHI8TmV0d29ya1N0b3JhZ2VNYW5hZ2VyPiBtX3N0
b3JhZ2VNYW5hZ2VyOworICAgIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+IG1fc3RvcmFnZU1h
bmFnZXI7CiAgICAgUmVmUHRyPENhY2hlU3RvcmFnZTo6RW5naW5lPiBtX2NhY2hlRW5naW5lOwog
ICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKENhY2hlU3RvcmFnZTo6RW5naW5lJik+PiBtX2NhY2hl
U3RvcmFnZVBhcmFtZXRlcnNDYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
cy5jcHAKaW5kZXggMmYwOWE1ZThkM2FlMTZhMWNmNGQxZTc0MTFhNDA2MGNkZDhkZjcxNS4uYTkz
YTFlMWU1ODVmNjg0ZTQ2NDUxNjdmNDJlMjM0NjhkMmY2ODU5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycy5jcHAKQEAgLTk1LDYgKzk1LDE2IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAj
aWYgIUhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKICAgICBlbmNvZGVyIDw8IHNob3VsZEFj
Y2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0czsKICNlbmRpZgorCisgICAgZW5j
b2RlciA8PCBzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHM7CisgICAgZW5jb2RlciA8PCBwZXJP
cmlnaW5TdG9yYWdlUXVvdGEgPDwgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKKyAg
ICBlbmNvZGVyIDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7CisgICAgZW5jb2RlciA8PCBpbmRleGVkREJEaXJlY3RvcnkgPDwg
aW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGVuY29kZXIgPDwgY2FjaGVT
dG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KyAgICBlbmNvZGVyIDw8IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGdlbmVyYWxTdG9yYWdl
RGlyZWN0b3J5SGFuZGxlOworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBlbmNvZGVy
IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkOworI2VuZGlmCiAgICAgZW5jb2RlciA8PCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVyczsKIH0KIApAQCAtMzM0LDYgKzM0NCw3OCBAQCBzdGQ6
Om9wdGlvbmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzPiBOZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogI2VuZGlm
CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsK
KyAgICBkZWNvZGVyID4+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKKyAgICBpZiAoIXNo
b3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKKyAg
ICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKKyAgICBpZiAoIXBlck9yaWdpblN0
b3JhZ2VRdW90YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZGVj
b2RlciA+PiBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOworICAgIGlmICghcGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAg
ZGVjb2RlciA+PiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOworICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IGluZGV4ZWREQkRpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGluZGV4ZWREQkRpcmVjdG9yeTsK
KyAgICBpZiAoIWluZGV4ZWREQkRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaW5k
ZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gaW5kZXhlZERC
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghaW5kZXhlZERCRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Cisg
ICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAg
aWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZ2VuZXJhbFN0b3Jh
Z2VEaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsKKyAg
ICBpZiAoIWdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGdlbmVy
YWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOworICAgIGRlY29kZXIgPj4gZ2VuZXJhbFN0b3JhZ2VE
aXJlY3RvcnlIYW5kbGU7CisgICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnk7CisgICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXlFbmFibGVkOworICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZDsKKyAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWlu
YXRpb25EZWxheUVuYWJsZWQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYK
KwogICAgIHN0ZDo6b3B0aW9uYWw8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnM+IHJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzOwogICAgIGRlY29kZXIgPj4gcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnM7CiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGFyYW1ldGVycykKQEAgLTM5NCw2ICs0NzYsMjIgQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrU2Vz
c2lvbkNyZWF0aW9uUGFyYW1ldGVycz4gTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMK
ICAgICAgICAgLCBXVEZNb3ZlKCplbmFibGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnTW9k
ZSkKICNpZiAhSEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQogICAgICAgICAsIFdURk1vdmUo
KnNob3VsZEFjY2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cykKKyNlbmRpZgor
ICAgICAgICAsIFdURk1vdmUoKnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocykKKyAgICAgICAg
LCBXVEZNb3ZlKCpwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAgICwgV1RGTW92ZSgqcGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSkKKyAgICAgICAgLCBXVEZNb3ZlKCpsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICAsIFdURk1vdmUoKmluZGV4ZWREQkRpcmVjdG9yeSkK
KyAgICAgICAgLCBXVEZNb3ZlKCppbmRleGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisg
ICAgICAgICwgV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICAsIFdURk1v
dmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCBXVEZN
b3ZlKCpnZW5lcmFsU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAgLCBXVEZNb3ZlKCpnZW5lcmFs
U3RvcmFnZURpcmVjdG9yeUhhbmRsZSkKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAg
ICAgICwgV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKKyAgICAg
ICAgLCBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKQorICAgICAgICAsIFdURk1vdmUoKnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRp
b25EZWxheUVuYWJsZWQpCiAjZW5kaWYKICAgICAgICAgLCBXVEZNb3ZlKCpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGFyYW1ldGVycykKICAgICB9fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMu
aAppbmRleCAzNDBiNDM0ODFkMjU3N2E2MjMzNzUzYmY0ZDY0MWMwNTE2Zjg1ZTVkLi4xMjU1NTU5
Y2UzMGI4NmU4MzEyNmFmZmZkZTRhMmU4MDllZDkxMjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycy5oCkBAIC0xMTIsNiArMTEyLDIzIEBAIHN0cnVjdCBOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycyB7CiAgICAgYm9vbCBzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRl
c0ZvcldlYlNvY2tldHMgeyBmYWxzZSB9OwogI2VuZGlmCiAKKyAgICBib29sIHNob3VsZFVzZUN1
c3RvbVN0b3JhZ2VQYXRocyB7IGZhbHNlIH07CisgICAgdWludDY0X3QgcGVyT3JpZ2luU3RvcmFn
ZVF1b3RhOworICAgIHVpbnQ2NF90IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7Cisg
ICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIFN0cmluZyBp
bmRleGVkREJEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWRE
QkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBTdHJpbmcgY2FjaGVTdG9yYWdlRGlyZWN0
b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7CisgICAgU3RyaW5nIGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OworICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsK
KyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgU3RyaW5nIHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgYm9vbCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkIHsgdHJ1ZSB9OworI2VuZGlm
CisKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycyByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGFyYW1ldGVyczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjA1NmY0ZjZlYjYwN2I0ZDc5Y2ViODJhNWYzYjk0NGQ2M2Y0ZGE5MS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBOZXR3b3JrUHJvY2VzczsKLXN0cnVjdCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVyczsKLQotY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQgewotcHVi
bGljOgotICAgIC8vIEZJWE1FOiBSZW1vdmUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KLSAgICBz
dGF0aWMgdm9pZCBlbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYs
IGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7Ci19OwotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZS5jcHAKaW5kZXggYmRhYjE4Zjk0MjkwNWFjYzJjODY2ZWRhODMzMDk2NTgyOGNiNjBkZS4uNWY2
YzA0MTg2YjM0NjZhYjI3YThmZGFhNDE2ZTQ2YzhmOWZlYjhkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNw
cApAQCAtMjQ1LDExICsyNDUsNyBAQCB2b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcQogICAgIGlmICgh
c2Vzc2lvbikKICAgICAgICAgY2FsbGJhY2soZmFsc2UpOwogCi0gICAgYXV0byogc3RvcmFnZU1h
bmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpOwotICAgIGlmICghc3RvcmFnZU1hbmFn
ZXIpCi0gICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKLQotICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXF1
ZXN0U3BhY2Uob3JpZ2luLCBzcGFjZVJlcXVlc3RlZCwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkucmVxdWVzdFNwYWNlKG9yaWdpbiwgc3BhY2VSZXF1
ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogRW5naW5lOjpFbmdpbmUoTmV0d29ya1Nl
c3Npb24mIG5ldHdvcmtTZXNzaW9uLCBTdHJpbmcmJiByb290UGF0aCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bQppbmRleCA0NGFlODQyNGUwYjU0N2RkZWI0NTBjM2I5MjQ4ZTNmODhlMjc0OTg4Li5kMWRkODQ4
ZjRhYWRiZmViNDIwZWUyMWU3NDc0YWRhMTZjNmRhNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBA
IC0yNTUsNCArMjU1LDEyIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Om5vdGlmeVByZWZlcmVuY2Vz
Q2hhbmdlZChjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nCiB9CiAjZW5kaWYKIAor
Y29uc3QgU3RyaW5nJiBOZXR3b3JrUHJvY2Vzczo6dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcigp
Cit7CisgICAgaWYgKG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAg
ICAgIG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0cmluZyhbW05TQnVuZGxlIG1haW5C
dW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKKworICAgIHJldHVybiBtX3VpUHJvY2Vzc0J1bmRs
ZUlkZW50aWZpZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3Vy
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHRDdXJsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwNDkwYjZh
NWU4NTJiNGM2Mjk0M2Q5NzlkMDcwZjk3NDJlMDNhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2N1cmwv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgot
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKE5l
dHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7Ci0gICAgaWYgKG5ldHdvcmtQcm9jZXNz
LnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5ldHdv
cmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIFN0cmluZzo6bnVt
YmVyKHNlc3Npb25JRC50b1VJbnQ2NCgpKSk7Ci0gICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lv
bihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZTJmMGZjNmI1ZmE4NjhkOGQx
ZjYwY2E3MTZhZDY1YWY0NTIyNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5o
IgotCi0jaW1wb3J0ICJDb29raWVTdG9yYWdlVXRpbHNDRi5oIgotI2ltcG9ydCAiTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmgiCi0jaW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgotI2ltcG9y
dCAiTmV0d29ya1Nlc3Npb24uaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCi0jaW1wb3J0ICJXZWJFcnJvcnMuaCIKLSNpbXBvcnQgIldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmgiCi0jaW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Ci0jaW1wb3J0IDxwYWwvU2Vzc2lv
bklELmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3
b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzcy5z
dG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
YmFzZSA9IG5ldHdvcmtQcm9jZXNzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIoKTsKLSAgICBp
ZiAoYmFzZS5pc051bGwoKSkKLSAgICAgICAgYmFzZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl07Ci0KLSAgICBpZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5j
b29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKLSAgICBpZiAoIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpICYmICFwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJ
ZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zZXNzaW9uSUQgIT0gUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkKLSAgICAg
ICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdE
YXRhKHBhcmFtZXRlcnMudWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZpZXIpOwotCi0gICAg
bmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgbWFrZVN0
cmluZyhiYXNlLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKSwgV1RGTW92ZSh1aVByb2Nlc3ND
b29raWVTdG9yYWdlKSk7Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRT
b3VwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjODJiZjhhMzAwODE4NGYy
YjRjOGRjM2FmZTUzOWZkNzUzMjAxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0
d29ya2luZ0NvbnRleHRTb3VwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
LmgiCi0KLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1By
b2Nlc3MsIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewot
ICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklEOwotICAgIGlmIChuZXR3b3JrUHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9u
SUQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9u
KHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNl
VGVzdGluZ05ldHdvcmtTZXNzaW9uLCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQudG9VSW50NjQo
KSkpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycykpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UK
aW5kZXggOGI3NmI2MDY1M2IxYjMxYWQzYjhjOWU3ZDdiMzY3ZDlmMmZjYTY2OS4uOWEyYWUyYzFh
ZTc0YzJkNTI3ZGFhNWY5YmNiOTE3ODYwYWVmNDdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1Q
bGF5U3RhdGlvbi5jbWFrZQpAQCAtNDgsNyArNDgsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09V
UkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Byb2Nlc3NNYWluQ3VybC5jcHAKICAgICBOZXR3
b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtTZXNzaW9uQ3VybC5jcHAKLSAgICBOZXR3b3JrUHJvY2Vz
cy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKIAogICAgIFBsYXRmb3JtL0lQ
Qy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAogICAgIFBsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rp
b25Vbml4LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMjRiZDg0MjY3MmFhODEwMWQx
YzFlYjZkYjQzMzVmMWU1ZjBiODQwZC4uYmE0MWNjNGI4ZDNjNDhlOTZlODBhMmZkMTZhYmNiODMz
MjgzMGJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC0xNzYsNyArMTc2LDYgQEAgaWYg
KCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlST30pCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwv
TmV0d29ya0RhdGFUYXNrQ3VybC5jcHAKICAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3
b3JrUHJvY2Vzc0N1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0d29ya1Nl
c3Npb25DdXJsLmNwcAotICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Q3VybC5jcHAKIAogICAgICAgICBTaGFyZWQvQVBJL2MvY2Fpcm8vV0tJbWFnZUNh
aXJvLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHAKaW5kZXggMTIwMzdmYzhmYmM2OTliNThkMDA5ZjQ3NTUyMzk4ZGExYzQ4
M2M0MC4uODYwYTA3ZGVlMjllNjc2ZTY3YzNhOTRkMzJkMTYwZTg5YjQyODJhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApA
QCAtMzEsMjkgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKCkKLXsKLX0KK1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjp+V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoKSA9IGRl
ZmF1bHQ7CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBuZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnM7CiAgICAgZW5jb2RlciA8PCB1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
cjsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwotICAg
IGVuY29kZXIgPDwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IDw8IGluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCBzZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkOwotI2VuZGlmCi0KLSAgICBlbmNvZGVy
IDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7Ci0gICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPDwgY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgZ2VuZXJhbFN0
b3JhZ2VEaXJlY3RvcnkgPDwgZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGU7Ci0KLSAgICBl
bmNvZGVyIDw8IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICBlbmNvZGVyIDw8IHBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7Ci0KLSAgICBlbmNvZGVyIDw8IHNob3VsZFVzZUN1c3Rv
bVN0b3JhZ2VQYXRoczsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIpCkBAIC03OCw5MiArNjIsNiBAQCBzdGQ6Om9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQwogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwotICAgIGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwotICAgIGlmICghaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gV1RGTW92ZSgqaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KTsKLSAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZT4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAg
IGRlY29kZXIgPj4gaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAg
IGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBk
ZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAgaWYgKCFz
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA9IFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpOwotICAgIAot
ICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRlY29kZXIgPj4gc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBpZiAo
IXNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgCi0gICAgc3RkOjpv
cHRpb25hbDxib29sPiBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
OwotICAgIGRlY29kZXIgPj4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5h
YmxlZDsKLSAgICBpZiAoIXNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gV1RGTW92ZSgqc2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCk7Ci0jZW5kaWYKLQotICAgIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgZGVjb2RlciA+PiBs
b2NhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnkgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOwotCi0gICAgc3RkOjpv
cHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmxvY2FsU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY2FjaGVT
dG9yYWdlRGlyZWN0b3J5OwotICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5Owot
ICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5KTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVj
b2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFj
YWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAg
IGRlY29kZXIgPj4gZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgaWYgKCFnZW5lcmFsU3Rv
cmFnZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0
ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJl
Y3RvcnkpOwotCi0gICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGdl
bmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOwotICAgIGRlY29kZXIgPj4gZ2VuZXJhbFN0b3Jh
Z2VEaXJlY3RvcnlIYW5kbGU7Ci0gICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5SGFuZGxlID0gV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlI
YW5kbGUpOwotCi0gICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGVyT3JpZ2luU3RvcmFnZVF1
b3RhOwotICAgIGRlY29kZXIgPj4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwotICAgIGlmICghcGVy
T3JpZ2luU3RvcmFnZVF1b3RhKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBh
cmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gKnBlck9yaWdpblN0b3JhZ2VRdW90YTsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGE7Ci0gICAgZGVjb2RlciA+PiBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwot
ICAgIGlmICghcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGEgPSAqcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Ym9vbD4gc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhzOwotICAgIGRlY29kZXIgPj4g
c2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhzOwotICAgIGlmICghc2hvdWxkVXNlQ3VzdG9tU3Rv
cmFnZVBhdGhzKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMu
c2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhzID0gKnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRo
czsKLSAgICAKICAgICByZXR1cm4gcGFyYW1ldGVyczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggMzdjOTdmMTMwMzA3
NzVkY2U1ZTNkMTAwMjAzNWYyMWU3MzU0MGU5OC4uNTkxOTlmNGNlYzBhNTUzOTYyNDUzNTdhMmQy
NDUxNmE5ZDFkM2M2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCkBAIC01MiwyOSArNTIsNiBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMgewogICAgIFZlY3Rvcjx1aW50OF90PiB1aVByb2Nlc3NDb29raWVTdG9y
YWdlSWRlbnRpZmllcjsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY29va2llU3RvcmFn
ZVBhdGhFeHRlbnNpb25IYW5kbGU7CiAgICAgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnMgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOwotCi0gICAgU3RyaW5nIGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQot
ICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlOwotICAgIGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5RW5hYmxlZCB7IHRydWUgfTsKLSNlbmRpZgotCi0gICAgU3RyaW5nIGxvY2FsU3RvcmFnZURp
cmVjdG9yeTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwotCi0gICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotCi0gICAgU3RyaW5nIGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKLQot
ICAgIHVpbnQ2NF90IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICB1aW50NjRfdCBwZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwotCi0gICAgYm9vbCBzaG91bGRVc2VDdXN0b21TdG9y
YWdlUGF0aHMgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKaW5kZXggMzlmZWE5MWNlNTYxNzU4MTYwYWQ5MjE4OTg5NDUzZTU4M2VkNjQ2
MS4uZmI4MzcyMzE4Nzk5MzExNDhjNzJhMTQyODIwYzhjZDBkMjQyNWRkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dApAQCAtNTMsNyArNTMsNiBAQCBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NJT1MubW0KIE5ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJv
Y2Vzc0lPUy5tbQogCiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KLU5l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQogCiBOZXR3b3JrUHJv
Y2Vzcy93ZWJydGMvTGliV2ViUlRDU29ja2V0Q2xpZW50LmNwcAogTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL05ldHdvcmtSVENNb25pdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggN2U3NDA4ZTVh
ZmMwMmM4MmVlNjk0Y2U1Mzc0Y2NlNmM5YzhmYzM4OC4uYmU5MmE0NWRkNmI4MDUzNTVkMmEzMmQ1
OWRlNzAyZmRiZjBhMTMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC00Miw3ICs0Miw2IEBAIE5l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKIE5ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNv
dXAuY3BwCi1OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5j
cHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5SW5wdXRTdHJlYW0uY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4
dAppbmRleCA5N2ZlZGQ0NDA5Y2ViY2IwNGZiOTU1OWVkYmY3MWJhNzY0MjhhMWNkLi5lYmEwM2M4
OGJjNGQ5NDU3NWY3YTM1MmMzY2Y2MmU3N2Q3MzY5MjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKQEAg
LTQyLDcgKzQyLDYgQEAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNw
cAogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAogTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtTZXNzaW9uU291cC5jcHAKLU5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHRTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJLaXREaXJlY3RvcnlJ
bnB1dFN0cmVhbS5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuY3Bw
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCmluZGV4IDU3ZGU4YjFmNjU4NjZmYjFmY2Y3YmQxOGJiYjY4ZDIwYzE1
YWU5ZmMuLmVhN2YxYzUwNTI2NWI2NTM5ZWY2Y2UwNTU3NWQ4NTg1YzVhYzgzODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcApAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojph
ZGRTZXNzaW9uKFdlYnNpdGVEYXRhU3RvcmUmIHN0b3JlLCBTZW5kUGFyYW1ldGVyc1RvTmUKICAg
ICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFkZFdlYnNpdGVEYXRhU3RvcmUg
eyBzdG9yZS5wYXJhbWV0ZXJzKCkgfSwgMCwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3Nh
Z2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAgIGF1dG8gc2Vzc2lvbklEID0gc3Rv
cmUuc2Vzc2lvbklEKCk7CiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAgICAg
ICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCkpOworICAgICAgICBjcmVhdGVTeW1MaW5rRm9yRmlsZVVwZ3JhZGUoc3Rv
cmUucmVzb2x2ZWRJbmRleGVkREJEaXJlY3RvcnkoKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3Jl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCAxYzdkMTJkYjMyZTUxNzc5ZmVlNWFjODQ1ODhkOTE2NTI2
OTE1MDdmLi4zMjU4YzU0MTA0YzU5YTNhOWNiN2YxOTAzZTQ4ZGQyOTA1MzRjMmUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMTg0Myw1NSArMTg0Myw1MSBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICNpZiAhSEFWRShOU1VSTFNFU1NJ
T05fV0VCU09DS0VUKQogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRBY2NlcHRJ
bnNlY3VyZUNlcnRpZmljYXRlc0ZvcldlYlNvY2tldHMgPSBtX2NvbmZpZ3VyYXRpb24tPnNob3Vs
ZEFjY2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cygpOwogI2VuZGlmCi0KLSAg
ICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzKTsKLQotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgIG5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgPSBtX2NvbmZpZ3Vy
YXRpb24tPnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocygpOworICAgIG5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKKyAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICAKKyAgICBp
ZiAoYXV0byBkaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9yeSgpOyAhZGly
ZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAgICAvLyBGSVhNRTogU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5IHJlc29sdmVzIHRo
ZSBkaXJlY3RvcnksIGJ1dCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gUmVtb3ZlIHRoaXMg
ZHVwbGljYXRlIHdvcmsuCi0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAgICAgICBp
ZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5k
bGUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIEZpbGVTeXN0ZW06Om1ha2VB
bGxEaXJlY3RvcmllcyhkaXJlY3RvcnkpOworICAgICAgICBGaWxlU3lzdGVtOjpleGNsdWRlRnJv
bUJhY2t1cChkaXJlY3RvcnkpOworI2VuZGlmCiAgICAgfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQotICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSA9IHJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOwotICAgIGlm
ICghcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LmlzRW1wdHko
KSkgeworICAgIGlmIChhdXRvIGRpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERCRGlyZWN0b3J5
KCk7ICFkaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5pbmRleGVkREJEaXJlY3RvcnkgPSBkaXJlY3Rvcnk7CiAgICAgICAgIC8vIEZJWE1FOiBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkgcmVzb2x2
ZXMgdGhlIGRpcmVjdG9yeSwgYnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBSZW1vdmUg
dGhpcyBkdXBsaWNhdGUgd29yay4KLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCpoYW5kbGUpOworICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAg
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNl
V29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5z
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKCk7Ci0jZW5kaWYKLQot
ICAgIGF1dG8gbG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGlmIChhdXRvIGRp
cmVjdG9yeSA9IHJlc29sdmVkU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyAh
ZGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA9IGRpcmVjdG9yeTsKICAgICAgICAg
Ly8gRklYTUU6IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVj
dG9yeSByZXNvbHZlcyB0aGUgZGlyZWN0b3J5LCBidXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRv
bmUuIFJlbW92ZSB0aGlzIGR1cGxpY2F0ZSB3b3JrLgotICAgICAgICBpZiAoYXV0byBoYW5kbGUg
PSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9j
YWxTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9j
YWxTdG9yYWdlRGlyZWN0b3J5KTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNr
dXAobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIGF1dG8gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAg
aWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OwotICAgICAg
ICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFu
ZGxlKTsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQotCisgICAgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJs
ZWQgPSBtX2NvbmZpZ3VyYXRpb24tPnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eUVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgCiAgICAgaWYgKGF1dG8gZGlyZWN0b3J5
ID0gZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAg
ICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0g
ZGlyZWN0b3J5OwogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUgPSBXVEZNb3ZlKCpoYW5k
bGUpOworICAgICAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdl
RGlyZWN0b3J5SGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVy
cy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgPSBjb25maWd1cmF0aW9uKCkuc2hvdWxkVXNl
Q3VzdG9tU3RvcmFnZVBhdGhzKCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VR
dW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwotICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQ
YXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEo
KTsKKyAgICBpZiAoYXV0byBkaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRp
cmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxl
ID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRp
cmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKKyAgICB9CiAK
KyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJF
VkVOVElPTikKICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZDsKICNlbmRpZgpAQCAtMTkwMCw3ICsxODk2LDcgQEAgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJh
Y2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNz
aW9uKCk7CiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMudXNlTmV0d29y
a0xvYWRlciA9IHVzZU5ldHdvcmtMb2FkZXIoKTsKICNlbmRpZgotICAgIAorCiAgICAgcmV0dXJu
IHBhcmFtZXRlcnM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBjZmNlNWNlNDRiNmQ1NjVjMDI5YzI1
OTlmMmJmNzhmNGZmNDRlZjQ0Li43Y2U0NzUzN2I1YzdmYmI3MjdmNzgyYjYxMjMxOTA5M2YxMzZl
YzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
V2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yNTQsNyArMjU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFN0cmluZyYgcmVzb2x2ZWREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x2ZWRDb25maWd1cmF0aW9uLT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOyB9CiAgICAgY29u
c3QgU3RyaW5nJiByZXNvbHZlZEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmphdmFTY3JpcHRDb25maWd1cmF0
aW9uRGlyZWN0b3J5KCk7IH0KICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkQ29va2llU3RvcmFn
ZUZpbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+Y29va2llU3Rv
cmFnZUZpbGUoKTsgfQotICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+aW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsgfQorICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRl
eGVkREJEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+
aW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2
ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHZlZENvbmZpZ3VyYXRpb24tPnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnko
KTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPnJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsgfQogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRI
U1RTU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0
aW9uLT5oc3RzU3RvcmFnZURpcmVjdG9yeSgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453661</attachid>
            <date>2022-03-02 14:39:50 -0800</date>
            <delta_ts>2022-03-02 16:06:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237335-20220302143949.patch</filename>
            <type>text/plain</type>
            <size>69903</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYxMzA2NTAyMzhjZTY5NTVk
YmY4YjViNjEzZWZlMWQ0NDhjNjA1ZDkuLjBkNGU2NmIyYTE2OTJiYjlhNTVjYThkYzA5NmVkM2Ex
YzQ1ODhjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjItMDMtMDIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAocjI4OTQ3NCk6
IGNhY2hlU3RvcmFnZVBhdGggaXMgZW1wdHkgaW4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzczMzUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4K
KworICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6c3RvcmFnZVBhdGggcmV0dXJucyBlbXB0
eVN0cmluZyBpZiBzYWx0IGZpbGUgdW5kZXIgcm9vdERpcmVjdG9yeSBjYW5ub3QgYmUgcmVhZCBv
cgorICAgICAgICB3cml0dGVuLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzYW5kYm94IGV4dGVu
c2lvbiBmb3Igcm9vdERpcmVjdG9yeSBpcyBjb25zdW1lZCBiZWZvcmUgY2FsbGluZyBzdG9yYWdl
UGF0aAorICAgICAgICAoaW4gY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIG9mIE5ldHdvcmtT
ZXNzaW9uKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIGNvZGUgYWJvdXQg
YWRkaW5nIHNlc3Npb24gaW4gbmV0d29yayBwcm9jZXNzLiBOb3cgd2Ugd291bGQgY3JlYXRlIAor
ICAgICAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgd2hlbiBOZXR3b3JrU2Vzc2lvbiBpcyBjcmVh
dGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5
RmlsZXNGb3JJbmRleGVkREIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmFkZFN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFk
ZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFz
TG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vi
c2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFu
ZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpjbGVhclN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGlkSW5j
cmVhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJv
Y2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dWlQ
cm9jZXNzQnVuZGxlSWRlbnRpZmllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVOZXR3
b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6TmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0
ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpsb3dNZW1vcnlI
YW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VXb3Jr
ZXJTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFk
ZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW06IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dFNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3JtUGxheVN0
YXRpb24uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoK
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZXNvbHZlZEluZGV4ZWREQkRpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IGNvbnN0
KTogRGVsZXRlZC4KKwogMjAyMi0wMy0wMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVuYW1lIE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlSW1hZ2VTYW1w
bGUgdG8gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGVGcm9tUGl4ZWxCdWZmZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODZmM2Y5MTlmYjY1YTJkMGQxNDVkNjNmMDlmMDgxZjJh
YTNiYTkwNS4uMDE5MGQ4NDZkYmQ5NWUwNzM3YWVlNWMzMjU4YWYzNWE5NzljZTczNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTQwOSwxMiArNDA5LDggQEAgYm9vbCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmUKIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dXBkYXRl
UXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4pCiB7Ci0gICAgYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nlc3MtPm5ldHdvcmtTZXNz
aW9uKHNlc3Npb25JRCgpKTsKLSAgICBpZiAoIXNlc3Npb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChhdXRvKiBzdG9yYWdlTWFuYWdlciA9IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkp
Ci0gICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZv
clRlc3Rpbmcob3JpZ2luKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nl
c3MtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCgpKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKS5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3Rpbmcob3JpZ2lu
KTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTAwMywxMCArOTk5LDkgQEAgdm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXNGb3JJ
bmRleGVkREIoY29uc3QKICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZVJlZmVyZW5jZXMp
CiAgICAgICAgICAgICBmaWxlLT5yZXZva2VGaWxlQWNjZXNzKCk7CiAKLSAgICAgICAgaWYgKGF1
dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
c3RvcmFnZU1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKQotICAgICAgICAgICAg
ICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZWdpc3RlclRlbXBvcmFyeUJsb2JGaWxlUGF0aHMobV9jb25u
ZWN0aW9uLCBmaWxlUGF0aHMpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2Vy
KCkucmVnaXN0ZXJUZW1wb3JhcnlCbG9iRmlsZVBhdGhzKG1fY29ubmVjdGlvbiwgZmlsZVBhdGhz
KTsKKwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGZpbGVQYXRocykpOwogICAg
IH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAppbmRleCA5OTBlYzdmYjgyZjYzNTRiYTAxZTRiZTdiYmRjYzA2NDhiMzBmZTk0Li40ODU4
NGVkZDhkNGZkYjM2MjY0ZWU3ZDBhZjZiYTc4NGU2YWRhMjA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNTEsNyArNTEsNiBAQAog
I2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIlByZWNvbm5lY3RU
YXNrLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdG9yZS5oIgotI2luY2x1
ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0LmgiCkBAIC0xMDIsNiArMTAxLDcgQEAKICNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVDb2RlcnMuaCIKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkNv
b2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW5jbHVkZSAiTGF1bmNoU2VydmljZXNEYXRhYmFzZU9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2luY2x1ZGUgPHd0
Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KQEAgLTM4MiwxMCArMzgyLDggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lkZW50
aWZpZXIgaWRlbnQKIAogICAgIGNvbm5lY3Rpb24uc2V0T25MaW5lU3RhdGUoTmV0d29ya1N0YXRl
Tm90aWZpZXI6OnNpbmdsZXRvbigpLm9uTGluZSgpKTsKIAotICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAoYXV0byogbWFuYWdl
ciA9IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zdGFy
dFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7
Ci0gICAgfQorICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklE
KSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5zdGFydFJlY2VpdmluZ01lc3Nh
Z2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQpAQCAtMzk3LDE5ICszOTUsNTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNo
ZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgfQogfQogCi12b2lk
IE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzJiYgcGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3JhZ2VTZXNz
aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXIsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY29va2llU3RvcmFnZVBh
dGhFeHRlbnNpb25IYW5kbGUpCiB7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7CisgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBwYXJh
bWV0ZXJzKTsKKyAgICBpZiAoc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKSB7CisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXdUZXN0aW5nU2Vzc2lvbihzZXNzaW9u
SUQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF1dG8qIHNlc3Npb24gPSBu
ZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAgICAgIHNlc3Npb24tPmFkZFN0b3JhZ2VN
YW5hZ2VyU2Vzc2lvbihwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlLCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSwgcGFyYW1ldGVycy5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJz
LnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuc2hvdWxkVXNlQ3Vz
dG9tU3RvcmFnZVBhdGhzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKKyAgICBpZiAoIXNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICF1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmll
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgaWYgKHNlc3Np
b25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICAgICAg
dWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlpbmdEYXRh
KHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCi0gICAgICAgIHNlc3Npb24tPmFkZFNlcnZpY2VXb3JrZXJTZXNzaW9u
KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwg
V1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwotI2VuZGlmCisgICAgYXV0byBpZGVudGlmaWVyQmFzZSA9IG1ha2VTdHJpbmcodWlQcm9j
ZXNzQnVuZGxlSWRlbnRpZmllcigpLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc3RvcmFnZVNlc3Npb247CisgICAgYXV0
byBjZklkZW50aWZpZXIgPSBtYWtlU3RyaW5nKGlkZW50aWZpZXJCYXNlLCAiLlByaXZhdGVCcm93
c2luZy4iLCBjcmVhdGVWZXJzaW9uNFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAg
ICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgIHN0b3JhZ2VTZXNzaW9uID0g
Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwgc3RkOjpudWxs
b3B0LCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OlNob3VsZERpc2FibGVDRlVSTENh
Y2hlOjpZZXMpOworICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpKQorICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZpZXIoY2ZJ
ZGVudGlmaWVyLmdldCgpKTsKKworICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246OnByb2Nl
c3NNYXlVc2VDb29raWVBUEkoKSkgeworICAgICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVn
ZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisgICAgICAgIGlmICgh
dWlQcm9jZXNzQ29va2llU3RvcmFnZSAmJiBzdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgICAgIHVp
UHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNv
b2tpZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RvcmFnZVNlc3Npb24uZ2V0KCkpKTsK
ICAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1ZTxOZXR3
b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lvbiksIFdU
Rk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOworI2VsaWYgVVNFKENVUkwpIHx8IFVTRShT
T1VQKQorICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklEKTsKKyNlbmRpZgorfQorCit2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycykKK3sKKyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKKyAgICBhZGRTdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3
b3JrU2Vzc2lvbiwgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRpZmllciwg
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBtX25l
dHdvcmtTZXNzaW9ucy5lbnN1cmUoc2Vzc2lvbklELCBbJl0oKSB7CisgICAgICAgIHJldHVybiBO
ZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycyk7CisgICAgfSk7CisgICAgCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVh
Y2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBm
dW5jdG9yKQpAQCAtNDM1LDQxICs0NjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6bmV3VGVzdGluZ1Nlc3NpbwogI2Vu
ZGlmCiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmVuc3Vy
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRlc3RpbmdO
ZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSwgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYgY29va2llU3RvcmFnZSkKLSNlbHNlCi12b2lkIE5ldHdv
cmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBz
aG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllckJh
c2UpCi0jZW5kaWYKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3JhZ2VTZXNz
aW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtT
ZXNzaW9uKSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXdUZXN0aW5n
U2Vzc2lvbihzZXNzaW9uSUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBzdG9y
YWdlU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IG1h
a2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0ZVZlcnNp
b240VVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwotICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBjcmVhdGVQcml2YXRlU3RvcmFn
ZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpLCBzdGQ6Om51bGxvcHQsIFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6U2hvdWxkRGlzYWJsZUNGVVJMQ2FjaGU6Olllcyk7Ci0gICAgZWxz
ZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0g
ICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
cmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0KCkpOwot
Ci0gICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tpZUFQSSgp
KSB7Ci0gICAgICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2aWxlZ2U6
OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAgICAgICAgaWYgKCFjb29raWVTdG9yYWdlICYmIHN0
b3JhZ2VTZXNzaW9uKQotICAgICAgICAgICAgY29va2llU3RvcmFnZSA9IGFkb3B0Q0YoX0NGVVJM
U3RvcmFnZVNlc3Npb25Db3B5Q29va2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9y
YWdlU2Vzc2lvbi5nZXQoKSkpOwotICAgIH0KLQotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBtYWtlVW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBXVEZNb3Zl
KHN0b3JhZ2VTZXNzaW9uKSwgV1RGTW92ZShjb29raWVTdG9yYWdlKSk7Ci0jZWxpZiBVU0UoQ1VS
TCkgfHwgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1ha2VVbmlx
dWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQpOwotI2VuZGlmCi19Ci0KIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQoSFRUUENvb2tpZUFjY2Vw
dFBvbGljeSBuZXdQb2xpY3kpCiB7CiAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDogbV93ZWJQ
cm9jZXNzQ29ubmVjdGlvbnMudmFsdWVzKCkpCkBAIC05OTksMTEgKzk5NywxMSBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpjbGVhclVzZXJJbnRlcmFjdGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IFJlZ2lzdAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9yYWdlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBpZiAoIXNl
c3Npb24gfHwgIXNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgaWYgKCFzZXNzaW9uKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCiAgICAgYXV0byB0eXBl
cyA9IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0
b3JhZ2UgfTsKLSAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRjaERhdGEodHlwZXMs
IFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5m
ZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5dKGF1dG8mIGVudHJ5KSB7CiAg
ICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnkub3JpZ2luKTsKICAgICAgICAg
fSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0Y2hXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQKICAgICB9
CiAjZW5kaWYKIAotICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRsZVR5cGVz
KHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24gJiYgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIo
KSkgewotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRjaERhdGEod2Vic2l0
ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRhYmxlIHsK
KyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0
YVR5cGVzKSAmJiBzZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCku
ZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8gZW50
cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1fd2Vic2l0
ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7CiAgICAgICAgIH0p
OwogICAgIH0KQEAgLTE1MjcsOCArMTUyNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0
ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAg
ICAgICAgIHNlc3Npb24tPmNsZWFyQWx0ZXJuYXRpdmVTZXJ2aWNlcyhtb2RpZmllZFNpbmNlKTsK
ICNlbmRpZgogCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMo
d2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbiAmJiBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigp
KQotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5kZWxldGVEYXRhTW9kaWZpZWRT
aW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJd
IHsgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMod2Vi
c2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbikKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFn
ZXIoKS5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmllZFNp
bmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyRGlz
a0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNhY2hlKiBjYWNoZSwgY29uc3QgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MjAsOCArMTYxOCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IE9wdGlvCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
YW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uICYmIHNlc3Npb24tPnN0
b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCktPmRlbGV0
ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFuZGxlcl0g
eyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJz
aXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdl
cigpLmRlbGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tz
SGFuZGxlcl0geyB9KTsKIAogICAgIGlmIChzZXNzaW9uKSB7CiAgICAgICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRhRm9yOwpA
QCAtMTgxMiw4ICsxODEwLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5kUmVzdHJp
Y3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAgICAgfSk7
CiAgICAgfQogCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlwZXMo
d2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbiAmJiBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigp
KSB7Ci0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCktPmRlbGV0ZURhdGFGb3JSZWdp
c3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29v
a2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBkZWxldGVkRG9t
YWlucykgbXV0YWJsZSB7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLT5z
dG9yYWdlTWFuYWdlcigpLmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURh
dGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxs
YmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCiAgICAgICAgICAgICAgICAg
Y2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7CiAgICAg
ICAgIH0pOwpAQCAtMTkyOSw4ICsxOTI3LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVnaXN0
cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICAg
ICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi0+c3RvcmFnZU1h
bmFnZXIoKSkgewotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRjaERhdGEo
d2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRh
YmxlIHsKKyAgICBpZiAoc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdl
cigpLmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRv
IGVudHJpZXMpIG11dGFibGUgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX3dl
YnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZW50cmllcykpOwogICAgICAg
ICB9KTsKICAgICB9CkBAIC0yMTAyLDggKzIxMDAsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpw
cmVwYXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5k
bAogICAgICAgICBpZiAoYXV0byogc3dTZXJ2ZXIgPSBzZXNzaW9uLnN3U2VydmVyKCkpCiAgICAg
ICAgICAgICBzd1NlcnZlci0+c3RhcnRTdXNwZW5zaW9uKFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsg
fSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gc2Vzc2lvbi5z
dG9yYWdlTWFuYWdlcigpKQotICAgICAgICAgICAgc3RvcmFnZU1hbmFnZXItPnN1c3BlbmQoW2Nh
bGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigp
LnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsKIAogICAgIGZvciAo
YXV0byYgY29ubmVjdGlvbiA6IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygpKQpAQCAt
MjE0MSw4ICsyMTM4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAgICAgICAg
aWYgKGF1dG8qIHN3U2VydmVyID0gc2Vzc2lvbi5zd1NlcnZlcigpKQogICAgICAgICAgICAgc3dT
ZXJ2ZXItPmVuZFN1c3BlbnNpb24oKTsKICNlbmRpZgotICAgICAgICBpZiAoYXV0byogbWFuYWdl
ciA9IHNlc3Npb24uc3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgICAgIG1hbmFnZXItPnJlc3Vt
ZSgpOworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CiAgICAgfSk7
CiB9CiAKQEAgLTIxNzUsNDEgKzIxNzEsMzAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xv
Y2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmQKIHsK
ICAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsmXShhdXRv
JiBzZXNzaW9uKSB7Ci0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi5zdG9yYWdl
TWFuYWdlcigpKQotICAgICAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZShbYWdncmVn
YXRvcl0geyB9KTsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpLnN5bmNMb2NhbFN0
b3JhZ2UoW2FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogc2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFzZXNzaW9uKQotICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gc2Vz
c2lvbi0+c3RvcmFnZU1hbmFnZXIoKTsKLSAgICBpZiAoIXN0b3JhZ2VNYW5hZ2VyKQotICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5l
dHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHJldHVybiBzZXNzaW9uLT5zdG9yYWdl
TWFuYWdlcigpLnJlc2V0UXVvdGFGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKIAotICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXNldFF1b3RhRm9yVGVzdGluZyhXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGF1dG8q
IHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGlmIChhdXRvKiBtYW5h
Z2VyID0gc2Vzc2lvbiA/IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkgOiBudWxscHRyKQotICAg
ICAgICBtYW5hZ2VyLT5jbGVhclN0b3JhZ2VGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25J
RCkpCisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuY2xlYXJTdG9yYWdlRm9yVGVz
dGluZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgZWxzZQogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkaWRJbmNyZWFzZVF1
b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4s
IFF1b3RhSW5jcmVhc2VSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Np
b24oc2Vzc2lvbklEKTsKLSAgICBpZiAoIXNlc3Npb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAg
bWFuYWdlci0+ZGlkSW5jcmVhc2VRdW90YShvcmlnaW4sIGlkZW50aWZpZXIsIG5ld1F1b3RhKTsK
KyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAg
ICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlkSW5jcmVhc2VRdW90YShvcmlnaW4sIGlk
ZW50aWZpZXIsIG5ld1F1b3RhKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVuYW1lT3Jp
Z2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgb2xk
TmFtZSwgY29uc3QgVVJMJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAg
LTIyMjEsOSArMjIwNiw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdpbkluV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVCiAgICAgaWYgKG9sZE9y
aWdpbi5pc0VtcHR5KCkgfHwgbmV3T3JpZ2luLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYg
KGF1dG8qIG1hbmFnZXIgPSBzZXNzaW9uID8gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSA6IG51
bGxwdHIpCi0gICAgICAgIG1hbmFnZXItPm1vdmVEYXRhKGRhdGFUeXBlcywgb2xkT3JpZ2luLCBu
ZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOworICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0
d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIo
KS5tb3ZlRGF0YShkYXRhVHlwZXMsIG9sZE9yaWdpbiwgbmV3T3JpZ2luLCBbYWdncmVnYXRvcl0g
eyB9KTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTI0NzcsMTAgKzI0NjEs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNv
dXJjZUxvYWRlciYgbG9hZGVyKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb25uZWN0aW9uVG9X
ZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogewotICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkgewotICAgICAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlc3Npb24tPnN0b3Jh
Z2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zdG9wUmVjZWl2aW5nTWVzc2FnZUZy
b21Db25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgIH0KKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9
IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5h
Z2VyKCkuc3RvcFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIH0K
IAogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIE5ldHdvcmtQcm9jZXNzOjp3ZWJQcm9j
ZXNzQ29ubmVjdGlvbihQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDY4OWJmOTdl
ZGVkZDk1ZTM3YzYyOTBjYjZjZmFlOTViZDZiNDEwOWUuLmExZjJjNzc0YTkxNjE4MzQ0NDc1MmZk
NzA3MWYxYTQyYmE5MWVhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKQEAgLTE2OSwxMSArMTY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9y
RWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiogc3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIGVuc3VyZVNl
c3Npb24oUEFMOjpTZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiYmKTsKLSNlbHNlCi0gICAgdm9pZCBlbnN1cmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklELCBi
b29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKTsKLSNlbmRpZgorICAgIHZvaWQgYWRkU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQs
IGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLCBjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmKTsKIAogICAgIHZvaWQgcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZv
clRlc3RpbmdTeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBwcmVw
YXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CkBAIC0zMDUsNyArMzAxLDcgQEAgcHVibGljOgogICAgIGJvb2wgcGFyZW50
UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICNlbmRpZgogCi0gICAgY29uc3QgU3RyaW5nJiB1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV91aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyOyB9CisgICAgY29u
c3QgU3RyaW5nJiB1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICB2b2lk
IHJlZigpIGNvbnN0IG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29ya1Byb2Nl
c3M+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSBjb25zdCBvdmVycmlkZSB7IFRocmVhZFNh
ZmVSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzPjo6ZGVyZWYoKTsgfQpAQCAtNDgzLDcgKzQ3OSw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1NldENhY2hlTW9kZWwgeyBmYWxzZSB9OwogICAg
IENhY2hlTW9kZWwgbV9jYWNoZU1vZGVsIHsgQ2FjaGVNb2RlbDo6RG9jdW1lbnRWaWV3ZXIgfTsK
ICAgICBib29sIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwotICAg
IFN0cmluZyBtX3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7CisgICAgbXV0YWJsZSBTdHJpbmcg
bV91aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyOwogICAgIERvd25sb2FkTWFuYWdlciBtX2Rvd25s
b2FkTWFuYWdlcjsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hhcio+PiBO
ZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXA7CkBAIC01MjgsNCArNTI0LDExIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2Z0cEVuYWJsZWQgeyBmYWxzZSB9OwogfTsKIAorI2lmICFQTEFURk9STShD
T0NPQSkKK2lubGluZSBjb25zdCBTdHJpbmcmIE5ldHdvcmtQcm9jZXNzOjp1aVByb2Nlc3NCdW5k
bGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91aVByb2Nlc3NCdW5kbGVJZGVu
dGlmaWVyOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAppbmRleCA3NDA5NTE2Zjll
OTFmNWE0NmM2ZWEyNGNiMTEyMGZhMWVhNGI0M2MwLi44NTgyNTFhODk2YmYxZjgxNjRkNzkyZWVk
NzNjOTU2MTcxMzNkMjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcApAQCAtMTExLDYgKzExMSwxOCBAQCBzdGF0aWMgVW5pcXVlUmVmPFBD
TTo6TWFuYWdlckludGVyZmFjZT4gbWFuYWdlck9yUHJveHkoTmV0d29ya1Nlc3Npb24mIG5ldHdv
cmtTZQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlcj4obWFrZVVuaXF1ZVJlZjxQQ006OkNsaWVudEltcGw+KG5ldHdvcmtTZXNzaW9uLCBuZXR3
b3JrUHJvY2VzcyksIHBjbVN0b3JlRGlyZWN0b3J5KG5ldHdvcmtTZXNzaW9uLCBwYXJhbWV0ZXJz
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeSwgcGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5wcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0
b3JhZ2VEaXJlY3RvcnkpKTsKIH0KIAorc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1hbmFnZXI+
IGNyZWF0ZU5ldHdvcmtTdG9yYWdlTWFuYWdlcihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IGNvbnN0IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorewor
ICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmxvY2Fs
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5SGFuZGxlKTsKKyAgICBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb25J
RDsKKyAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgY29ubmVjdGlvbklEID0gY29ubmVjdGlv
bi0+dW5pcXVlSUQoKTsKKyAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUo
cGFyYW1ldGVycy5zZXNzaW9uSUQsIGNvbm5lY3Rpb25JRCwgcGFyYW1ldGVycy5nZW5lcmFsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMuaW5kZXhlZERCRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0
aHMpOworfQorCiBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3Mm
IG5ldHdvcmtQcm9jZXNzLCBjb25zdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKICAgICA6IG1fc2Vzc2lvbklEKHBhcmFtZXRlcnMuc2Vzc2lvbklEKQogICAg
ICwgbV9uZXR3b3JrUHJvY2VzcyhuZXR3b3JrUHJvY2VzcykKQEAgLTEzMSw2ICsxNDMsNyBAQCBO
ZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9j
ZXNzLCBjb25zdCBOZXR3b3JrU2VzcwogICAgICwgbV90ZXN0U3BlZWRNdWx0aXBsaWVyKHBhcmFt
ZXRlcnMudGVzdFNwZWVkTXVsdGlwbGllcikKICAgICAsIG1fYWxsb3dzU2VydmVyUHJlY29ubmVj
dChwYXJhbWV0ZXJzLmFsbG93c1NlcnZlclByZWNvbm5lY3QpCiAgICAgLCBtX3Nob3VsZFJ1blNl
cnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZyhwYXJhbWV0ZXJzLnNob3VsZFJ1blNl
cnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZykKKyAgICAsIG1fc3RvcmFnZU1hbmFn
ZXIoY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKG5ldHdvcmtQcm9jZXNzLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCksIHBhcmFtZXRlcnMpKQogI2lmIEVOQUJMRShCVUlMVF9JTl9OT1RJRklD
QVRJT05TKQogICAgICwgbV9ub3RpZmljYXRpb25NYW5hZ2VyKCp0aGlzLCBwYXJhbWV0ZXJzLndl
YlB1c2hNYWNoU2VydmljZU5hbWUpCiAjZW5kaWYKQEAgLTE2OSw2ICsxODIsMTQgQEAgTmV0d29y
a1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2Vzcywg
Y29uc3QgTmV0d29ya1Nlc3MKICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChw
YXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQpOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgbV9zZXJ2aWNlV29ya2VySW5mbyA9IFNlcnZp
Y2VXb3JrZXJJbmZvIHsKKyAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5LAorICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheUVuYWJsZWQKKyAgICB9OworI2VuZGlmCisKICNpZiBFTkFCTEUoQlVJTFRf
SU5fTk9USUZJQ0FUSU9OUykKICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6Ok5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3Nlc3Npb25JRC50b1VJbnQ2NCgpLCBtX25vdGlmaWNhdGlvbk1hbmFn
ZXIpOwogI2VuZGlmCkBAIC0yMDYsOCArMjI3LDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52
YWxpZGF0ZUFuZENhbmNlbCgpCiAgICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljcykKICAg
ICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5pbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAj
ZW5kaWYKLSAgICBpZiAoYXV0byBtYW5hZ2VyID0gc3RkOjpleGNoYW5nZShtX3N0b3JhZ2VNYW5h
Z2VyLCBudWxscHRyKSkKLSAgICAgICAgbWFuYWdlci0+Y2xvc2UoKTsKKyAgICBtX3N0b3JhZ2VN
YW5hZ2VyLT5jbG9zZSgpOwogICAgIG1fY2FjaGVFbmdpbmUgPSBudWxscHRyOwogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgbV9pc0ludmFsaWRhdGVkID0gdHJ1ZTsKQEAgLTU2OCw4ICs1ODgsNyBA
QCB2b2lkIE5ldHdvcmtTZXNzaW9uOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsKQogICAgIGlm
IChtX3N3U2VydmVyKQogICAgICAgICBtX3N3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlXYXJuaW5n
KCk7CiAjZW5kaWYKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikKLSAgICAgICAgbV9zdG9yYWdl
TWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIG1fc3RvcmFnZU1hbmFnZXIt
PmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktF
UikKQEAgLTYzNSwxNyArNjU0LDYgQEAgU1dTZXJ2ZXImIE5ldHdvcmtTZXNzaW9uOjplbnN1cmVT
V1NlcnZlcigpCiAgICAgcmV0dXJuICptX3N3U2VydmVyOwogfQogCi12b2lkIE5ldHdvcmtTZXNz
aW9uOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgYm9vbCBoYWRTZXJ2
aWNlV29ya2VySW5mbyA9ICEhbV9zZXJ2aWNlV29ya2VySW5mbzsKLSAgICBtX3NlcnZpY2VXb3Jr
ZXJJbmZvID0gU2VydmljZVdvcmtlckluZm8gewotICAgICAgICBXVEZNb3ZlKHNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLAotICAgICAgICBwcm9jZXNzVGVybWluYXRpb25EZWxh
eUVuYWJsZWQKLSAgICB9OwotICAgIGlmICghaGFkU2VydmljZVdvcmtlckluZm8pCi0gICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwotfQotCiBib29s
IE5ldHdvcmtTZXNzaW9uOjpoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zZXJ2aWNlV29ya2VySW5mbyAmJiAhbV9zZXJ2aWNlV29ya2VySW5mby0+
ZGF0YWJhc2VQYXRoLmlzRW1wdHkoKTsKQEAgLTY2MCwyMCArNjY4LDYgQEAgV2ViU2hhcmVkV29y
a2VyU2VydmVyJiBOZXR3b3JrU2Vzc2lvbjo6ZW5zdXJlU2hhcmVkV29ya2VyU2VydmVyKCkKICAg
ICByZXR1cm4gKm1fc2hhcmVkV29ya2VyU2VydmVyOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9u
OjphZGRTdG9yYWdlTWFuYWdlclNlc3Npb24oY29uc3QgU3RyaW5nJiBnZW5lcmFsU3RvcmFnZVBh
dGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFuZGxlLCBj
b25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYg
bG9jYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5nJiBpZGJTdG9yYWdlUGF0aCwgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBpZGJTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBjYWNoZVN0b3JhZ2VQYXRoLCB1aW50NjRfdCBkZWZhdWx0T3JpZ2luUXVvdGEsIHVpbnQ2NF90
IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGJvb2wgc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhz
KQotewotICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZ2VuZXJhbFN0b3JhZ2VQYXRoSGFu
ZGxlKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkobG9jYWxTdG9y
YWdlUGF0aEhhbmRsZSk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KGlkYlN0b3JhZ2VQYXRoSGFuZGxlKTsKLSAgICBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNv
bm5lY3Rpb25JRDsKLSAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IG5ldHdvcmtQcm9jZXNzKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAgY29ubmVjdGlvbklEID0gY29ubmVj
dGlvbi0+dW5pcXVlSUQoKTsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyID0gTmV0d29ya1N0b3JhZ2VN
YW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklEKCksIGNvbm5lY3Rpb25JRCwgZ2VuZXJhbFN0b3JhZ2VQ
YXRoLCBsb2NhbFN0b3JhZ2VQYXRoLCBpZGJTdG9yYWdlUGF0aCwgY2FjaGVTdG9yYWdlUGF0aCwg
ZGVmYXVsdE9yaWdpblF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBzaG91bGRVc2VDdXN0
b21TdG9yYWdlUGF0aHMpOwotfQotCiB2b2lkIE5ldHdvcmtTZXNzaW9uOjplbnN1cmVDYWNoZUVu
Z2luZShGdW5jdGlvbjx2b2lkKENhY2hlU3RvcmFnZTo6RW5naW5lJik+JiYgY2FsbGJhY2spCiB7
CiAgICAgaWYgKG1fY2FjaGVFbmdpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmgKaW5kZXggMzAzYTUwMTFhNmJkMGJjNjI4NGU1NmEwNWMxYjU0Y2Jm
ODI5YzFlMC4uOWI0MzlhODE5NGU1NWI3ZWZiYTA4ZmQ5YTI4ODdlMDZiM2YwYThjZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAtMjA4LDE2
ICsyMDgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlclNXU2VydmVyQ29ubmVjdGlv
bihXZWJTV1NlcnZlckNvbm5lY3Rpb24mKTsKIAogICAgIGJvb2wgaGFzU2VydmljZVdvcmtlckRh
dGFiYXNlUGF0aCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihi
b29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7
CiAjZW5kaWYKIAogICAgIFdlYlNoYXJlZFdvcmtlclNlcnZlciogc2hhcmVkV29ya2VyU2VydmVy
KCkgeyByZXR1cm4gbV9zaGFyZWRXb3JrZXJTZXJ2ZXIuZ2V0KCk7IH0KICAgICBXZWJTaGFyZWRX
b3JrZXJTZXJ2ZXImIGVuc3VyZVNoYXJlZFdvcmtlclNlcnZlcigpOwogCi0gICAgTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIu
Z2V0KCk7IH0KLSAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbihjb25zdCBTdHJpbmcm
IGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5lcmFsU3Rv
cmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGlk
YlN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGlkYlN0b3JhZ2VQYXRoSGFu
ZGxlLCBjb25zdCBTdHJpbmcmIGNhY2hlU3RvcmFnZVBhdGgsIHVpbnQ2NF90IGRlZmF1bHRPcmln
aW5RdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgYm9vbCBzaG91bGRVc2VD
dXN0b21TdG9yYWdlUGF0aHMpOwotCisgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyJiBzdG9yYWdl
TWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KICAgICBDYWNoZVN0
b3JhZ2U6OkVuZ2luZSogY2FjaGVFbmdpbmUoKSB7IHJldHVybiBtX2NhY2hlRW5naW5lLmdldCgp
OyB9CiAgICAgdm9pZCBlbnN1cmVDYWNoZUVuZ2luZShGdW5jdGlvbjx2b2lkKENhY2hlU3RvcmFn
ZTo6RW5naW5lJik+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZUVuZ2luZSgpOwpAQCAtMzIwLDcg
KzMxNiw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJTaGFy
ZWRXb3JrZXJTZXJ2ZXI+IG1fc2hhcmVkV29ya2VyU2VydmVyOwogCi0gICAgUmVmUHRyPE5ldHdv
cmtTdG9yYWdlTWFuYWdlcj4gbV9zdG9yYWdlTWFuYWdlcjsKKyAgICBSZWY8TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOwogICAgIFJlZlB0cjxDYWNoZVN0b3JhZ2U6OkVu
Z2luZT4gbV9jYWNoZUVuZ2luZTsKICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZChDYWNoZVN0b3Jh
Z2U6OkVuZ2luZSYpPj4gbV9jYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzQ2FsbGJhY2tzOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDJmMDlhNWU4ZDNhZTE2YTFjZjRkMWU3
NDExYTQwNjBjZGQ4ZGY3MTUuLjM5ZDYzNTNiZGJiZWE1MTdkZDQzNzg0ODRmY2ZhYzQ0YWUyMmFh
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Np
b25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05NSw2ICs5NSwxNiBA
QCB2b2lkIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogI2lmICFIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCiAg
ICAgZW5jb2RlciA8PCBzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0ZvcldlYlNvY2tl
dHM7CiAjZW5kaWYKKworICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhz
OworICAgIGVuY29kZXIgPDwgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIDw8IHBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnkg
PDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGVuY29kZXIgPDwg
aW5kZXhlZERCRGlyZWN0b3J5IDw8IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZW5jb2RlciA8PCBnZW5lcmFsU3RvcmFnZURpcmVj
dG9yeSA8PCBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKKyNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCisgICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PDwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKKyNlbmRpZgog
ICAgIGVuY29kZXIgPDwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnM7CiB9CiAKQEAg
LTMzNCw2ICszNDQsNzggQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycz4gTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgogCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRV
c2VDdXN0b21TdG9yYWdlUGF0aHM7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VDdXN0b21TdG9y
YWdlUGF0aHM7CisgICAgaWYgKCFzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwZXJP
cmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZGVjb2RlciA+PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7
CisgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhOworICAgIGRlY29kZXIgPj4gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YTsKKyAgICBpZiAoIXBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxT
dG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5Owor
ICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkREJEaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+
PiBpbmRleGVkREJEaXJlY3Rvcnk7CisgICAgaWYgKCFpbmRleGVkREJEaXJlY3RvcnkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAg
ICBkZWNvZGVyID4+IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAo
IWluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnk7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gZ2VuZXJh
bFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9yeSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlPiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKKyAgICBkZWNv
ZGVyID4+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOworICAgIGlmICghZ2VuZXJhbFN0
b3JhZ2VEaXJlY3RvcnlIYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBzZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OworICAgIGlmICghc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBz
dGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IHNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2Vydmlj
ZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKKyAgICBkZWNvZGVyID4+IHNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQ7CisgICAgaWYgKCFzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworI2VuZGlmCisKICAgICBzdGQ6Om9wdGlvbmFsPFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQYXJhbWV0ZXJzPiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVyczsKICAg
ICBkZWNvZGVyID4+IHJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzOwogICAgIGlmICgh
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMpCkBAIC0zOTQsNiArNDc2LDIyIEBAIHN0
ZDo6b3B0aW9uYWw8TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM+IE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzCiAgICAgICAgICwgV1RGTW92ZSgqZW5hYmxlUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnREZWJ1Z01vZGUpCiAjaWYgIUhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tF
VCkKICAgICAgICAgLCBXVEZNb3ZlKCpzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0Zv
cldlYlNvY2tldHMpCisjZW5kaWYKKyAgICAgICAgLCAqc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBh
dGhzCisgICAgICAgICwgV1RGTW92ZSgqcGVyT3JpZ2luU3RvcmFnZVF1b3RhKQorICAgICAgICAs
IFdURk1vdmUoKnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAgICwgV1RG
TW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICAsIFdURk1vdmUoKmxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCBXVEZNb3ZlKCppbmRleGVk
REJEaXJlY3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKQorICAgICAgICAsIFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAg
ICAgICAgLCBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisg
ICAgICAgICwgV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgICwgV1RG
TW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpCisjaWYgRU5BQkxFKFNFUlZJQ0Vf
V09SS0VSKQorICAgICAgICAsIFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCAqc2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZAogI2VuZGlmCiAgICAgICAgICwgV1RGTW92ZSgqcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMpCiAgICAgfX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzLmgKaW5kZXggMzQwYjQzNDgxZDI1NzdhNjIzMzc1M2JmNGQ2NDFjMDUxNmY4NWU1ZC4uMTI1
NTU1OWNlMzBiODZlODMxMjZhZmZmZGU0YTJlODA5ZWQ5MTI1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnMuaApAQCAtMTEyLDYgKzExMiwyMyBAQCBzdHJ1Y3QgTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc2hvdWxkQWNjZXB0SW5zZWN1cmVDZXJ0aWZp
Y2F0ZXNGb3JXZWJTb2NrZXRzIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBzaG91bGRV
c2VDdXN0b21TdG9yYWdlUGF0aHMgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90IHBlck9yaWdpblN0
b3JhZ2VRdW90YTsKKyAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
OworICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBTdHJp
bmcgaW5kZXhlZERCRGlyZWN0b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBpbmRl
eGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgU3RyaW5nIGNhY2hlU3RvcmFnZURp
cmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIFN0cmluZyBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsK
KyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5k
bGU7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIFN0cmluZyBzZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uRGlyZWN0b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGJvb2wg
c2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCB7IHRydWUgfTsKKyNl
bmRpZgorCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1BhcmFtZXRlcnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIwNTZmNGY2ZWI2MDdiNGQ3OWNlYjgyYTVmM2I5NDRkNjNmNGRhOTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1Byb2Nlc3M7Ci1zdHJ1Y3QgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM7Ci0KLWNsYXNzIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0IHsK
LXB1YmxpYzoKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUuCi0g
ICAgc3RhdGljIHZvaWQgZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oTmV0d29ya1Byb2Nl
c3MmLCBjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYpOwotfTsKLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmUuY3BwCmluZGV4IGJkYWIxOGY5NDI5MDVhY2MyYzg2NmVkYTgzMzA5NjU4MjhjYjYwZGUu
LjVmNmMwNDE4NmIzNDY2YWIyN2E4ZmRhYTQxNmU0NmM4ZjlmZWI4ZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZS5jcHAKQEAgLTI0NSwxMSArMjQ1LDcgQEAgdm9pZCBFbmdpbmU6OnJlcXVlc3RTcGFjZShjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXEKICAgICBp
ZiAoIXNlc3Npb24pCiAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKIAotICAgIGF1dG8qIHN0b3Jh
Z2VNYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKTsKLSAgICBpZiAoIXN0b3JhZ2VN
YW5hZ2VyKQotICAgICAgICBjYWxsYmFjayhmYWxzZSk7Ci0KLSAgICBzdG9yYWdlTWFuYWdlci0+
cmVxdWVzdFNwYWNlKG9yaWdpbiwgc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLnJlcXVlc3RTcGFjZShvcmlnaW4sIHNwYWNl
UmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6RW5naW5lKE5ldHdv
cmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbiwgU3RyaW5nJiYgcm9vdFBhdGgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29j
b2EubW0KaW5kZXggNDRhZTg0MjRlMGI1NDdkZGViNDUwYzNiOTI0OGUzZjg4ZTI3NDk4OC4uNDg0
ODI5NGNiOTY2Mzk2OWRlZWU1YWFmMGNkZTllMjIxM2Q1YzdjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bQpAQCAtMjU1LDQgKzI1NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpub3RpZnlQcmVmZXJl
bmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZwogfQogI2VuZGlm
CiAKK2NvbnN0IFN0cmluZyYgTmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIGlmIChtX3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIuaXNOdWxs
KCkpCisgICAgICAgIG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisKKyAgICByZXR1cm4gbV91aVByb2Nlc3NCdW5k
bGVJZGVudGlmaWVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dEN1
cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Q3VybC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMDQ5MGI2
YTVlODUyYjRjNjI5NDNkOTc5ZDA3MGY5NzQyZTAzYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJs
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIK
LSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lk
IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbihO
ZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIGlmIChuZXR3b3JrUHJvY2Vz
cy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBuZXR3
b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBTdHJpbmc6Om51
bWJlcihzZXNzaW9uSUQudG9VSW50NjQoKSkpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNldFNlc3Np
b24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNzLCBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5t
bSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUyZjBmYzZiNWZhODY4ZDhk
MWY2MGNhNzE2YWQ2NWFmNDUyMjRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
aCIKLQotI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKLSNpbXBvcnQgIkxlZ2FjeUN1
c3RvbVByb3RvY29sTWFuYWdlci5oIgotI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbXBv
cnQgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFy
YW1ldGVycy5oIgotI2ltcG9ydCAiV2ViRXJyb3JzLmgiCi0jaW1wb3J0ICJXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oIgotI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24u
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2ltcG9ydCA8cGFsL1Nlc3Np
b25JRC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Mu
c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5n
IGJhc2UgPSBuZXR3b3JrUHJvY2Vzcy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKCk7Ci0gICAg
aWYgKGJhc2UuaXNOdWxsKCkpCi0gICAgICAgIGJhc2UgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IGJ1bmRsZUlkZW50aWZpZXJdOwotCi0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
Y29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2U7Ci0gICAgaWYgKCFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdl
SWRlbnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCi0gICAg
ICAgIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBjb29raWVTdG9yYWdlRnJvbUlkZW50aWZ5aW5n
RGF0YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKLQotICAg
IG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIG1ha2VT
dHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdURk1vdmUodWlQcm9jZXNz
Q29va2llU3RvcmFnZSkpOwotCi0gICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihzZXNzaW9u
SUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
U291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzgyYmY4YTMwMDgxODRm
MmI0YzhkYzNhZmU1MzlmZDc1MzIwMTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5l
dHdvcmtpbmdDb250ZXh0U291cC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCBJbmMuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5oIgotCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQ
cm9jZXNzLCBjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsK
LSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRDsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lv
bklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJlU2Vzc2lv
bihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnRvVUludDY0
KCkpKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBs
YXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtl
CmluZGV4IDhiNzZiNjA2NTNiMWIzMWFkM2I4YzllN2Q3YjM2N2Q5ZjJmY2E2NjkuLjlhMmFlMmMx
YWU3NGMyZDUyN2RhYTVmOWJjYjkxNzg2MGFlZjQ3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2UKQEAgLTQ4LDcgKzQ4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3BwCiAgICAgTmV0
d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCi0gICAgTmV0d29ya1Byb2Nl
c3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dEN1cmwuY3BwCiAKICAgICBQbGF0Zm9ybS9J
UEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDI0YmQ4NDI2NzJhYTgxMDFk
MWMxZWI2ZGI0MzM1ZjFlNWYwYjg0MGQuLmJhNDFjYzRiOGQzYzQ4ZTk2ZTgwYTJmZDE2YWJjYjgz
MzI4MzBiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTc2LDcgKzE3Niw2IEBAIGlm
ICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQogICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJs
L05ldHdvcmtEYXRhVGFza0N1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1cmwvTmV0
d29ya1Byb2Nlc3NDdXJsLmNwcAogICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtT
ZXNzaW9uQ3VybC5jcHAKLSAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dEN1cmwuY3BwCiAKICAgICAgICAgU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VD
YWlyby5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCmluZGV4IDEyMDM3ZmM4ZmJjNjk5YjU4ZDAwOWY0NzU1MjM5OGRhMWM0
ODNjNDAuLjg2MGEwN2RlZTI5ZTY3NmU2N2MzYTk0ZDMyZDE2MGU4OWI0MjgyYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAK
QEAgLTMxLDI5ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM6On5XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycygpCi17Ci19CitXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKCkgPSBk
ZWZhdWx0OwogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlkZW50aWZp
ZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0g
ICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2VydmljZVdv
cmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKLSNlbmRpZgotCi0gICAgZW5jb2Rl
ciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGdlbmVyYWxT
dG9yYWdlRGlyZWN0b3J5IDw8IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOwotCi0gICAg
ZW5jb2RlciA8PCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7Ci0gICAgZW5jb2RlciA8PCBwZXJUaGly
ZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwotCi0gICAgZW5jb2RlciA8PCBzaG91bGRVc2VDdXN0
b21TdG9yYWdlUGF0aHM7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQpAQCAtNzgsOTIgKzYyLDYgQEAgc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEMKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXRo
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5k
bGUpOwogCi0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICBpZiAoIWlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdURk1vdmUoKmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgCi0gICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAg
ICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7Ci0gICAg
ZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAgIGlmICgh
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KTsKLSAgICAK
LSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVyID4+IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYg
KCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIAotICAgIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxl
ZDsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVu
YWJsZWQ7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFi
bGVkKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IFdURk1vdmUoKnNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQpOwotI2VuZGlmCi0KLSAgICBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGRlY29kZXIgPj4g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5ID0gV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGU7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGNhY2hl
U3RvcmFnZURpcmVjdG9yeTsKLSAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsK
LSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoKmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGRl
Y29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICgh
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsKLSAg
ICBkZWNvZGVyID4+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGlmICghZ2VuZXJhbFN0
b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1l
dGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoKmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5KTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBn
ZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGdlbmVyYWxTdG9y
YWdlRGlyZWN0b3J5SGFuZGxlOwotICAgIGlmICghZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5k
bGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5nZW5lcmFs
U3RvcmFnZURpcmVjdG9yeUhhbmRsZSA9IFdURk1vdmUoKmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5
SGFuZGxlKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VR
dW90YTsKLSAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICBpZiAoIXBl
ck9yaWdpblN0b3JhZ2VRdW90YSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBw
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9ICpwZXJPcmlnaW5TdG9yYWdlUXVvdGE7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhOwotICAgIGRlY29kZXIgPj4gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsK
LSAgICBpZiAoIXBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gKnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPGJvb2w+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKLSAgICBkZWNvZGVyID4+
IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKLSAgICBpZiAoIXNob3VsZFVzZUN1c3RvbVN0
b3JhZ2VQYXRocykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJz
LnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyA9ICpzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0
aHM7Ci0gICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDM3Yzk3ZjEzMDMw
Nzc1ZGNlNWUzZDEwMDIwMzVmMjFlNzM1NDBlOTguLjU5MTk5ZjRjZWMwYTU1Mzk2MjQ1MzU3YTJk
MjQ1MTZhOWQxZDNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTIsMjkgKzUyLDYgQEAgc3RydWN0IFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29va2llU3Rv
cmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLQotICAgIFN0cmluZyBpbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
LSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQgeyB0cnVlIH07Ci0jZW5kaWYKLQotICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VE
aXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKLQotICAgIFN0cmluZyBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7
Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKLQotICAgIFN0cmluZyBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGU7Ci0K
LSAgICB1aW50NjRfdCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7Ci0gICAgdWludDY0X3QgcGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKLQotICAgIGJvb2wgc2hvdWxkVXNlQ3VzdG9tU3Rv
cmFnZVBhdGhzIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IDI1YjExM2I1YTY1M2Y0MTMzYzY5MDQ4YWFlMTI5YTdkYmNkYjU4
ZTUuLjAxNDM4NGY4ZTU4YzVjZWRkMDgxNGNkM2Y0MmViOTY0MjNkNjNmMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDYgQEAgTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzSU9TLm1tCiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1By
b2Nlc3NJT1MubW0KIAogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCi1O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KIAogTmV0d29ya1By
b2Nlc3Mvd2VicnRjL0xpYldlYlJUQ1NvY2tldENsaWVudC5jcHAKIE5ldHdvcmtQcm9jZXNzL3dl
YnJ0Yy9OZXR3b3JrUlRDTW9uaXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDdlNzQwOGU1
YWZjMDJjODJlZTY5NGNlNTM3NGNjZTZjOWM4ZmMzODguLmJlOTJhNDVkZDZiODA1MzU1ZDJhMzJk
NTlkZTcwMmZkYmYwYTEzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtNDIsNyArNDIsNiBAQCBO
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtQcm9jZXNzU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmNwcAotTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFtLmNwcAog
TmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNrU291cC5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50
eHQKaW5kZXggOTdmZWRkNDQwOWNlYmNiMDRmYjk1NTllZGJmNzFiYTc2NDI4YTFjZC4uZWJhMDNj
ODhiYzRkOTQ1NzVmN2EzNTJjM2NmNjJlNzdkNzM2OTIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBA
IC00Miw3ICs0Miw2IEBAIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5j
cHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAKIE5ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCi1OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0U291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGlyZWN0b3J5
SW5wdXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1Zjg2NWI2ZWUxODBkZmJlOGQ1ZmQyNWI3MmYxOTlhMDE1
YTE0MTNmLi4yYTYxZDc2MGNlZGQwYTc0ZDAzMjQ4OWU5YTJhNTljZDM5MjEwYWU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAKQEAgLTE0MTEsNyArMTQxMSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6
YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSwgU2VuZFBhcmFtZXRlcnNUb05lCiAg
ICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3Jl
IHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICBhdXRvIHNlc3Npb25JRCA9IHN0
b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAg
ICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSgpKTsKKyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdyYWRlKHN0
b3JlLnJlc29sdmVkSW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiB3ZWJzaXRl
RGF0YVN0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCAxYzdkMTJkYjMyZTUxNzc5ZmVlNWFjODQ1
ODhkOTE2NTI2OTE1MDdmLi41MWM4MzJlOTI1ZWMyYWE5ZTA2YjBlYzZiZDA0OWUwODlhZWI1MzIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTg0Myw1NSArMTg0Myw1MiBAQCBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICNpZiAhSEFWRShO
U1VSTFNFU1NJT05fV0VCU09DS0VUKQogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91
bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0ZvcldlYlNvY2tldHMgPSBtX2NvbmZpZ3VyYXRp
b24tPnNob3VsZEFjY2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cygpOwogI2Vu
ZGlmCi0KLSAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUo
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKTsKLQotICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKLSAgICBp
ZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAg
IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgPSBt
X2NvbmZpZ3VyYXRpb24tPnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocygpOworICAgIG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKKyAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAg
ICAKKyAgICBpZiAoYXV0byBkaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpOyAhZGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAgICAvLyBGSVhN
RTogU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5IHJl
c29sdmVzIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gUmVt
b3ZlIHRoaXMgZHVwbGljYXRlIHdvcmsuCi0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwor
ICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKKyAgICAgICAgICAgIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCpoYW5kbGUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgbW92ZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIHRvIGJhY2tncm91bmQgdGhy
ZWFkLgorICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoZGlyZWN0b3J5KTsK
KyAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAoZGlyZWN0b3J5KTsKKyNlbmRp
ZgogICAgIH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSByZXNvbHZlZFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoYXV0byBkaXJlY3Rv
cnkgPSByZXNvbHZlZEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7ICFkaXJlY3RvcnkuaXNF
bXB0eSgpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5pbmRleGVkREJEaXJl
Y3RvcnkgPSBkaXJlY3Rvcnk7CiAgICAgICAgIC8vIEZJWE1FOiBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkgcmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSwg
YnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBSZW1vdmUgdGhpcyBkdXBsaWNhdGUgd29y
ay4KLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAg
ICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
aGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5zZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKCk7Ci0jZW5kaWYKLQotICAgIGF1dG8gbG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgCisjaWYg
RU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGlmIChhdXRvIGRpcmVjdG9yeSA9IHJlc29sdmVk
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyAhZGlyZWN0b3J5LmlzRW1wdHko
KSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSA9IGRpcmVjdG9yeTsKICAgICAgICAgLy8gRklYTUU6IFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeSByZXNvbHZlcyB0aGUg
ZGlyZWN0b3J5LCBidXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuIFJlbW92ZSB0aGlzIGR1
cGxpY2F0ZSB3b3JrLgotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5
KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9jYWxTdG9yYWdlRGlyZWN0b3J5
KTsKLSAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9yYWdlRGly
ZWN0b3J5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VE
aXJlY3RvcnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICBpZiAoYXV0byBoYW5kbGUg
PSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKKyAgICAgICAgaWYg
KGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKmhhbmRsZSk7CiAgICAgfQotCisgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQgPSBtX2NvbmZpZ3VyYXRp
b24tPnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQoKTsKKyNlbmRp
ZgorICAgICAgICAgICAgCiAgICAgaWYgKGF1dG8gZGlyZWN0b3J5ID0gZ2VuZXJhbFN0b3JhZ2VE
aXJlY3RvcnkoKTsgIWRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5n
ZW5lcmFsU3RvcmFnZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAg
ICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZ2VuZXJh
bFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAgICAgICAgICAg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlID0g
V1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21T
dG9yYWdlUGF0aHMgPSBjb25maWd1cmF0aW9uKCkuc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhz
KCk7CiAKLSAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0
b3JhZ2VRdW90YSgpOwotICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICBpZiAoYXV0byBk
aXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRpcmVjdG9yeS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IGRpcmVjdG9yeTsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAg
ICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKKyAgICB9CiAKKyAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
KTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKICAgICBwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFy
YW1ldGVycy5lbmFibGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRp
ZgpAQCAtMTkwMCw3ICsxODk3LDcgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0
ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuYXBwSGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0g
aGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiAgICAgcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMudXNlTmV0d29ya0xvYWRlciA9IHVzZU5ldHdv
cmtMb2FkZXIoKTsKICNlbmRpZgotICAgIAorCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAppbmRleCBjZmNlNWNlNDRiNmQ1NjVjMDI5YzI1OTlmMmJmNzhmNGZmNDRlZjQ0
Li4wYThkNTZhNjA4YWI1ZWMzMDQzY2FjZGZmMzQ0ZmE3NWVlNGRhMzhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
CkBAIC0yNTQsNyArMjU0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRE
YXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9u
LT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZl
ZEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
bHZlZENvbmZpZ3VyYXRpb24tPmphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCk7IH0K
ICAgICBjb25zdCBTdHJpbmcmIHJlc29sdmVkQ29va2llU3RvcmFnZUZpbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+Y29va2llU3RvcmFnZUZpbGUoKTsgfQotICAg
IGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+aW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rv
cnkoKTsgfQorICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkREJEYXRhYmFzZURpcmVj
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5pbmRleGVkREJE
YXRhYmFzZURpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZFNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29u
ZmlndXJhdGlvbi0+c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyB9CiAgICAg
Y29uc3QgU3RyaW5nJiByZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSBj
b25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZEhTVFNTdG9yYWdl
RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmhzdHNT
dG9yYWdlRGlyZWN0b3J5KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453672</attachid>
            <date>2022-03-02 16:06:46 -0800</date>
            <delta_ts>2022-03-02 21:09:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237335-20220302160644.patch</filename>
            <type>text/plain</type>
            <size>69891</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIwZmZmYzdmODk0MTcwNWRm
YmMxMTRiNTc3M2VjODliYmY3MTRkNTIuLjcxZTg3OTlhMGViMWI0ZjJhZGNkZDUxZGRkZGJhYTY1
ZWJmNmM2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMjItMDMtMDIgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAocjI4OTQ3NCk6
IGNhY2hlU3RvcmFnZVBhdGggaXMgZW1wdHkgaW4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpsb2Nh
bE9yaWdpblN0b3JhZ2VNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzczMzUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4K
KworICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6c3RvcmFnZVBhdGggcmV0dXJucyBlbXB0
eVN0cmluZyBpZiBzYWx0IGZpbGUgdW5kZXIgcm9vdERpcmVjdG9yeSBjYW5ub3QgYmUgcmVhZCBv
cgorICAgICAgICB3cml0dGVuLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBzYW5kYm94IGV4dGVu
c2lvbiBmb3Igcm9vdERpcmVjdG9yeSBpcyBjb25zdW1lZCBiZWZvcmUgY2FsbGluZyBzdG9yYWdl
UGF0aAorICAgICAgICAoaW4gY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyIG9mIE5ldHdvcmtT
ZXNzaW9uKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIGNvZGUgYWJvdXQg
YWRkaW5nIHNlc3Npb24gaW4gbmV0d29yayBwcm9jZXNzLiBOb3cgd2Ugd291bGQgY3JlYXRlIAor
ICAgICAgICBOZXR3b3JrU3RvcmFnZU1hbmFnZXIgd2hlbiBOZXR3b3JrU2Vzc2lvbiBpcyBjcmVh
dGVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5
RmlsZXNGb3JJbmRleGVkREIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmFkZFN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFk
ZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aGFz
TG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZldGNoV2Vi
c2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0
ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZUFu
ZFJlc3RyaWN0V2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpjbGVhclN0b3JhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGlkSW5j
cmVhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJv
Y2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Nsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjplbnN1cmVTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dWlQ
cm9jZXNzQnVuZGxlSWRlbnRpZmllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVOZXR3
b3JrU3RvcmFnZU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6TmV0
d29ya1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0
ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpsb3dNZW1vcnlI
YW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFkZFNlcnZpY2VXb3Jr
ZXJTZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmFk
ZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnN0
b3JhZ2VNYW5hZ2VyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2N1cmwvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRDdXJsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW06IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dFNvdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3JtUGxheVN0
YXRpb24uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoK
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6YWRkU2Vzc2lvbik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlOjpyZXNvbHZlZEluZGV4ZWREQkRpcmVjdG9yeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5IGNvbnN0
KTogRGVsZXRlZC4KKwogMjAyMi0wMy0wMiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5dIENvbXBsZXRpb24gaGFuZGxlciBpcyBub3QgY2Fs
bGVkIHdoZW4gV2ViQXV0aG4gaW52b2tlZCB3aXRob3V0IHByb3BlciBlbnRpdGxlbWVudHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODZmM2Y5MTlmYjY1YTJkMGQxNDVkNjNmMDlm
MDgxZjJhYTNiYTkwNS4uMDE5MGQ4NDZkYmQ5NWUwNzM3YWVlNWMzMjU4YWYzNWE5NzljZTczNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTQwOSwxMiArNDA5LDggQEAgYm9vbCBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmUKIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCiB7Ci0gICAgYXV0byogc2Vzc2lvbiA9IG1fbmV0d29ya1Byb2Nlc3MtPm5ldHdv
cmtTZXNzaW9uKHNlc3Npb25JRCgpKTsKLSAgICBpZiAoIXNlc3Npb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChhdXRvKiBzdG9yYWdlTWFuYWdlciA9IHNlc3Npb24tPnN0b3JhZ2VNYW5h
Z2VyKCkpCi0gICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25V
c2FnZUZvclRlc3Rpbmcob3JpZ2luKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG1fbmV0d29y
a1Byb2Nlc3MtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCgpKSkKKyAgICAgICAgc2Vzc2lvbi0+
c3RvcmFnZU1hbmFnZXIoKS5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3Rpbmco
b3JpZ2luKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtMTAwMywxMCArOTk5LDkgQEAgdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5Rmls
ZXNGb3JJbmRleGVkREIoY29uc3QKICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZVJlZmVy
ZW5jZXMpCiAgICAgICAgICAgICBmaWxlLT5yZXZva2VGaWxlQWNjZXNzKCk7CiAKLSAgICAgICAg
aWYgKGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbigpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byogc3RvcmFnZU1hbmFnZXIgPSBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpKQotICAgICAg
ICAgICAgICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZWdpc3RlclRlbXBvcmFyeUJsb2JGaWxlUGF0aHMo
bV9jb25uZWN0aW9uLCBmaWxlUGF0aHMpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBz
ZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VN
YW5hZ2VyKCkucmVnaXN0ZXJUZW1wb3JhcnlCbG9iRmlsZVBhdGhzKG1fY29ubmVjdGlvbiwgZmls
ZVBhdGhzKTsKKwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGZpbGVQYXRocykp
OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAppbmRleCA5OTBlYzdmYjgyZjYzNTRiYTAxZTRiZTdiYmRjYzA2NDhiMzBmZTk0
Li40ODU4NGVkZDhkNGZkYjM2MjY0ZWU3ZDBhZjZiYTc4NGU2YWRhMjA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNTEsNyArNTEs
NiBAQAogI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIlByZWNv
bm5lY3RUYXNrLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdG9yZS5oIgot
I2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyU2V0LmgiCkBAIC0xMDIsNiArMTAxLDcgQEAKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1
ZGUgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW5jbHVkZSAiTGF1bmNoU2VydmljZXNEYXRh
YmFzZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2luY2x1
ZGUgPHd0Zi9jb2NvYS9FbnRpdGxlbWVudHMuaD4KQEAgLTM4MiwxMCArMzgyLDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vz
c0lkZW50aWZpZXIgaWRlbnQKIAogICAgIGNvbm5lY3Rpb24uc2V0T25MaW5lU3RhdGUoTmV0d29y
a1N0YXRlTm90aWZpZXI6OnNpbmdsZXRvbigpLm9uTGluZSgpKTsKIAotICAgIGlmIChhdXRvKiBz
ZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAoYXV0byog
bWFuYWdlciA9IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5hZ2Vy
LT5zdGFydFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rp
b24oKSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vz
c2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKS5zdGFydFJlY2Vpdmlu
Z01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uLmNvbm5lY3Rpb24oKSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQpAQCAtMzk3LDE5ICszOTUsNTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgfQogfQog
Ci12b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFN0b3Jh
Z2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCBzaG91bGRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdWlQcm9jZXNzQ29va2llU3Rv
cmFnZUlkZW50aWZpZXIsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY29va2llU3Rv
cmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpCiB7Ci0gICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtX25ldHdvcmtTdG9yYWdlU2Vzc2lvbnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7Cisg
ICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlz
LCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKSB7
CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXdUZXN0aW5nU2Vzc2lvbihz
ZXNzaW9uSUQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGF1dG8qIHNlc3Np
b24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAgICAgIHNlc3Npb24tPmFkZFN0
b3JhZ2VNYW5hZ2VyU2Vzc2lvbihwYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlLCBwYXJhbWV0ZXJzLmxvY2Fs
U3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSwgcGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuc2hvdWxk
VXNlQ3VzdG9tU3RvcmFnZVBhdGhzKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gdWlQcm9jZXNzQ29va2llU3RvcmFnZTsKKyAgICBp
ZiAoIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpICYmICF1aVByb2Nlc3NDb29raWVTdG9yYWdlSWRl
bnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGNvb2tpZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgaWYg
KHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAg
ICAgICAgdWlQcm9jZXNzQ29va2llU3RvcmFnZSA9IGNvb2tpZVN0b3JhZ2VGcm9tSWRlbnRpZnlp
bmdEYXRhKHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsKKyAgICB9CiAKLSNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAgICAgIHNlc3Npb24tPmFkZFNlcnZpY2VXb3JrZXJT
ZXNzaW9uKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5h
YmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwotI2VuZGlmCisgICAgYXV0byBpZGVudGlmaWVyQmFzZSA9IG1ha2VTdHJpbmco
dWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcigpLCAnLicsIHNlc3Npb25JRC50b1VJbnQ2NCgpKTsK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc3RvcmFnZVNlc3Npb247Cisg
ICAgYXV0byBjZklkZW50aWZpZXIgPSBtYWtlU3RyaW5nKGlkZW50aWZpZXJCYXNlLCAiLlByaXZh
dGVCcm93c2luZy4iLCBjcmVhdGVWZXJzaW9uNFVVSURTdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmco
KTsKKyAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCisgICAgICAgIHN0b3JhZ2VTZXNz
aW9uID0gY3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwgc3Rk
OjpudWxsb3B0LCBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OlNob3VsZERpc2FibGVD
RlVSTENhY2hlOjpZZXMpOworICAgIGVsc2UgaWYgKHNlc3Npb25JRCAhPSBQQUw6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKQorICAgICAgICBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y3JlYXRlQ0ZTdG9yYWdlU2Vzc2lvbkZvcklkZW50aWZp
ZXIoY2ZJZGVudGlmaWVyLmdldCgpKTsKKworICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246
OnByb2Nlc3NNYXlVc2VDb29raWVBUEkoKSkgeworICAgICAgICBBU1NFUlQoaGFzUHJvY2Vzc1By
aXZpbGVnZShQcm9jZXNzUHJpdmlsZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSk7CisgICAgICAg
IGlmICghdWlQcm9jZXNzQ29va2llU3RvcmFnZSAmJiBzdG9yYWdlU2Vzc2lvbikKKyAgICAgICAg
ICAgIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKF9DRlVSTFN0b3JhZ2VTZXNzaW9u
Q29weUNvb2tpZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RvcmFnZVNlc3Npb24uZ2V0
KCkpKTsKICAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1
ZTxOZXR3b3JrU3RvcmFnZVNlc3Npb24+KHNlc3Npb25JRCwgV1RGTW92ZShzdG9yYWdlU2Vzc2lv
biksIFdURk1vdmUodWlQcm9jZXNzQ29va2llU3RvcmFnZSkpOworI2VsaWYgVVNFKENVUkwpIHx8
IFVTRShTT1VQKQorICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklEKTsKKyNlbmRpZgorfQorCit2b2lkIE5ldHdv
cmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
JiYgcGFyYW1ldGVycykKK3sKKyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29y
a1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKKyAgICBhZGRTdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbiwgcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVTdG9yYWdlSWRlbnRp
ZmllciwgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CisKKyAg
ICBtX25ldHdvcmtTZXNzaW9ucy5lbnN1cmUoc2Vzc2lvbklELCBbJl0oKSB7CisgICAgICAgIHJl
dHVybiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycyk7CisgICAgfSk7CisgICAgCiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9u
Jik+JiBmdW5jdG9yKQpAQCAtNDM1LDQxICs0NjgsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uPiBOZXR3b3JrUHJvY2Vzczo6bmV3VGVzdGluZ1Nlc3Np
bwogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXZvaWQgTmV0d29ya1Byb2Nlc3M6
OmVuc3VyZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHNob3VsZFVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyQmFzZSwgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+JiYgY29va2llU3RvcmFnZSkKLSNlbHNlCi12b2lk
IE5ldHdvcmtQcm9jZXNzOjplbnN1cmVTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Ym9vbCBzaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24sIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllckJhc2UpCi0jZW5kaWYKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmV0d29ya1N0b3Jh
Z2VTZXNzaW9ucy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKLSAgICBpZiAoIWFkZFJlc3VsdC5p
c05ld0VudHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uKSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXdU
ZXN0aW5nU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
PiBzdG9yYWdlU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmll
ciA9IG1ha2VTdHJpbmcoaWRlbnRpZmllckJhc2UsICIuUHJpdmF0ZUJyb3dzaW5nLiIsIGNyZWF0
ZVZlcnNpb240VVVJRFN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpOwotICAgIGlmIChzZXNzaW9u
SUQuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgc3RvcmFnZVNlc3Npb24gPSBjcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpLCBzdGQ6Om51bGxvcHQsIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6U2hvdWxkRGlzYWJsZUNGVVJMQ2FjaGU6Olllcyk7Ci0g
ICAgZWxzZSBpZiAoc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpCi0gICAgICAgIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpjcmVhdGVDRlN0b3JhZ2VTZXNzaW9uRm9ySWRlbnRpZmllcihjZklkZW50aWZpZXIuZ2V0
KCkpOwotCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cHJvY2Vzc01heVVzZUNvb2tp
ZUFQSSgpKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQcm9jZXNzUHJpdmlsZWdlKFByb2Nlc3NQcml2
aWxlZ2U6OkNhbkFjY2Vzc1Jhd0Nvb2tpZXMpKTsKLSAgICAgICAgaWYgKCFjb29raWVTdG9yYWdl
ICYmIHN0b3JhZ2VTZXNzaW9uKQotICAgICAgICAgICAgY29va2llU3RvcmFnZSA9IGFkb3B0Q0Yo
X0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q29va2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBzdG9yYWdlU2Vzc2lvbi5nZXQoKSkpOwotICAgIH0KLQotICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBtYWtlVW5pcXVlPE5ldHdvcmtTdG9yYWdlU2Vzc2lvbj4oc2Vzc2lvbklELCBX
VEZNb3ZlKHN0b3JhZ2VTZXNzaW9uKSwgV1RGTW92ZShjb29raWVTdG9yYWdlKSk7Ci0jZWxpZiBV
U0UoQ1VSTCkgfHwgVVNFKFNPVVApCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1h
a2VVbmlxdWU8TmV0d29ya1N0b3JhZ2VTZXNzaW9uPihzZXNzaW9uSUQpOwotI2VuZGlmCi19Ci0K
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvb2tpZUFjY2VwdFBvbGljeUNoYW5nZWQoSFRUUENvb2tp
ZUFjY2VwdFBvbGljeSBuZXdQb2xpY3kpCiB7CiAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uIDog
bV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMudmFsdWVzKCkpCkBAIC05OTksMTEgKzk5NywxMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhclVzZXJJbnRlcmFjdGlvbihQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzTG9jYWxTdG9y
YWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBp
ZiAoIXNlc3Npb24gfHwgIXNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkpCisgICAgaWYgKCFzZXNz
aW9uKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCiAgICAgYXV0
byB0eXBlcyA9IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHsgV2Vic2l0ZURhdGFUeXBlOjpM
b2NhbFN0b3JhZ2UgfTsKLSAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRjaERhdGEo
dHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CisgICAgc2Vzc2lvbi0+c3RvcmFnZU1hbmFn
ZXIoKS5mZXRjaERhdGEodHlwZXMsIFtkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURjo6YW55T2YoZW50cmllcywgWyZkb21haW5dKGF1dG8mIGVudHJ5
KSB7CiAgICAgICAgICAgICByZXR1cm4gZG9tYWluLm1hdGNoZXMoZW50cnkub3JpZ2luKTsKICAg
ICAgICAgfSkpOwpAQCAtMTQ2NCw4ICsxNDYyLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmV0
Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXQK
ICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OmNhbkhhbmRs
ZVR5cGVzKHdlYnNpdGVEYXRhVHlwZXMpICYmIHNlc3Npb24gJiYgc2Vzc2lvbi0+c3RvcmFnZU1h
bmFnZXIoKSkgewotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRjaERhdGEo
d2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVzKSBtdXRh
YmxlIHsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJz
aXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uKSB7CisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5h
Z2VyKCkuZmV0Y2hEYXRhKHdlYnNpdGVEYXRhVHlwZXMsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1
dG8gZW50cmllcykgbXV0YWJsZSB7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPm1f
d2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShlbnRyaWVzKSk7CiAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTE1MjcsOCArMTUyNSw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpCiAgICAgICAgIHNlc3Npb24tPmNsZWFyQWx0ZXJuYXRpdmVTZXJ2aWNlcyhtb2RpZmllZFNp
bmNlKTsKICNlbmRpZgogCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbiAmJiBzZXNzaW9uLT5zdG9yYWdlTWFu
YWdlcigpKQotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5kZWxldGVEYXRhTW9k
aWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hh
bmRsZXJdIHsgfSk7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxlVHlw
ZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbikKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFn
ZU1hbmFnZXIoKS5kZWxldGVEYXRhTW9kaWZpZWRTaW5jZSh3ZWJzaXRlRGF0YVR5cGVzLCBtb2Rp
ZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXJdIHsgfSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNs
ZWFyRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNhY2hlKiBjYWNoZSwgY29uc3QgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2MjAsOCArMTYxOCw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIE9wdGlvCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpjYW5IYW5kbGVUeXBlcyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uICYmIHNlc3Np
b24tPnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkt
PmRlbGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVhclRhc2tzSGFu
ZGxlcl0geyB9KTsKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpjYW5IYW5kbGVUeXBl
cyh3ZWJzaXRlRGF0YVR5cGVzKSAmJiBzZXNzaW9uKQorICAgICAgICBzZXNzaW9uLT5zdG9yYWdl
TWFuYWdlcigpLmRlbGV0ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgb3JpZ2luRGF0YXMsIFtjbGVh
clRhc2tzSGFuZGxlcl0geyB9KTsKIAogICAgIGlmIChzZXNzaW9uKSB7CiAgICAgICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0RlbGV0ZU5ldHdvcmtEYXRh
Rm9yOwpAQCAtMTgxMiw4ICsxODEwLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlQW5k
UmVzdHJpY3RXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3MKICAgICAg
ICAgfSk7CiAgICAgfQogCi0gICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2FuSGFuZGxl
VHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbiAmJiBzZXNzaW9uLT5zdG9yYWdlTWFu
YWdlcigpKSB7Ci0gICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCktPmRlbGV0ZURhdGFG
b3JSZWdpc3RyYWJsZURvbWFpbnMod2Vic2l0ZURhdGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxs
Tm9uQ29va2llV2Vic2l0ZURhdGFGb3IsIFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBkZWxl
dGVkRG9tYWlucykgbXV0YWJsZSB7CisgICAgaWYgKE5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6Y2Fu
SGFuZGxlVHlwZXMod2Vic2l0ZURhdGFUeXBlcykgJiYgc2Vzc2lvbikgeworICAgICAgICBzZXNz
aW9uLT5zdG9yYWdlTWFuYWdlcigpLmRlbGV0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnMod2Vi
c2l0ZURhdGFUeXBlcywgZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Is
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBkZWxldGVkRG9tYWlucykgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8gZG9tYWluIDogZGVsZXRlZERvbWFpbnMpCiAgICAgICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5tX2RvbWFpbnMuYWRkKFdURk1vdmUoZG9tYWluKSk7
CiAgICAgICAgIH0pOwpAQCAtMTkyOSw4ICsxOTI3LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi0+c3Rv
cmFnZU1hbmFnZXIoKSkgewotICAgICAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLT5mZXRj
aERhdGEod2Vic2l0ZURhdGFUeXBlcywgW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byBlbnRyaWVz
KSBtdXRhYmxlIHsKKyAgICBpZiAoc2Vzc2lvbikgeworICAgICAgICBzZXNzaW9uLT5zdG9yYWdl
TWFuYWdlcigpLmZldGNoRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XShhdXRvIGVudHJpZXMpIG11dGFibGUgewogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5tX3dlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZW50cmllcykpOwog
ICAgICAgICB9KTsKICAgICB9CkBAIC0yMTAyLDggKzIxMDAsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpwcmVwYXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRp
b25IYW5kbAogICAgICAgICBpZiAoYXV0byogc3dTZXJ2ZXIgPSBzZXNzaW9uLnN3U2VydmVyKCkp
CiAgICAgICAgICAgICBzd1NlcnZlci0+c3RhcnRTdXNwZW5zaW9uKFtjYWxsYmFja0FnZ3JlZ2F0
b3JdIHsgfSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKGF1dG8qIHN0b3JhZ2VNYW5hZ2VyID0gc2Vz
c2lvbi5zdG9yYWdlTWFuYWdlcigpKQotICAgICAgICAgICAgc3RvcmFnZU1hbmFnZXItPnN1c3Bl
bmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFu
YWdlcigpLnN1c3BlbmQoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICAgICB9KTsKIAogICAg
IGZvciAoYXV0byYgY29ubmVjdGlvbiA6IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zLnZhbHVlcygp
KQpAQCAtMjE0MSw4ICsyMTM4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzdW1lKCkKICAg
ICAgICAgaWYgKGF1dG8qIHN3U2VydmVyID0gc2Vzc2lvbi5zd1NlcnZlcigpKQogICAgICAgICAg
ICAgc3dTZXJ2ZXItPmVuZFN1c3BlbnNpb24oKTsKICNlbmRpZgotICAgICAgICBpZiAoYXV0byog
bWFuYWdlciA9IHNlc3Npb24uc3RvcmFnZU1hbmFnZXIoKSkKLSAgICAgICAgICAgIG1hbmFnZXIt
PnJlc3VtZSgpOworICAgICAgICBzZXNzaW9uLnN0b3JhZ2VNYW5hZ2VyKCkucmVzdW1lKCk7CiAg
ICAgfSk7CiB9CiAKQEAgLTIxNzUsNDEgKzIxNzEsMzAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmQKIHsKICAgICBhdXRvIGFnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgZm9yRWFjaE5ldHdvcmtTZXNzaW9uKFsm
XShhdXRvJiBzZXNzaW9uKSB7Ci0gICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi5z
dG9yYWdlTWFuYWdlcigpKQotICAgICAgICAgICAgbWFuYWdlci0+c3luY0xvY2FsU3RvcmFnZShb
YWdncmVnYXRvcl0geyB9KTsKKyAgICAgICAgc2Vzc2lvbi5zdG9yYWdlTWFuYWdlcigpLnN5bmNM
b2NhbFN0b3JhZ2UoW2FnZ3JlZ2F0b3JdIHsgfSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byogc2Vzc2lv
biA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0gICAgaWYgKCFzZXNzaW9uKQotICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKLQotICAgIGF1dG8qIHN0b3JhZ2VNYW5hZ2Vy
ID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKTsKLSAgICBpZiAoIXN0b3JhZ2VNYW5hZ2VyKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBpZiAoYXV0byogc2Vzc2lv
biA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHJldHVybiBzZXNzaW9uLT5z
dG9yYWdlTWFuYWdlcigpLnJlc2V0UXVvdGFGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIAotICAgIHN0b3JhZ2VNYW5hZ2VyLT5yZXNldFF1b3RhRm9yVGVzdGluZyhXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8qIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOwotICAgIGlmIChhdXRv
KiBtYW5hZ2VyID0gc2Vzc2lvbiA/IHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkgOiBudWxscHRy
KQotICAgICAgICBtYW5hZ2VyLT5jbGVhclN0b3JhZ2VGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNl
c3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuY2xlYXJTdG9yYWdl
Rm9yVGVzdGluZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgZWxzZQogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkaWRJbmNy
ZWFzZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIFF1b3RhSW5jcmVhc2VSZXF1ZXN0SWRlbnRpZmllciBpZGVudGlmaWVyLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKLSAgICBhdXRvKiBzZXNzaW9uID0gbmV0d29y
a1Nlc3Npb24oc2Vzc2lvbklEKTsKLSAgICBpZiAoIXNlc3Npb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKSkKLSAg
ICAgICAgbWFuYWdlci0+ZGlkSW5jcmVhc2VRdW90YShvcmlnaW4sIGlkZW50aWZpZXIsIG5ld1F1
b3RhKTsKKyAgICBpZiAoYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkp
CisgICAgICAgIHNlc3Npb24tPnN0b3JhZ2VNYW5hZ2VyKCkuZGlkSW5jcmVhc2VRdW90YShvcmln
aW4sIGlkZW50aWZpZXIsIG5ld1F1b3RhKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVu
YW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVS
TCYgb2xkTmFtZSwgY29uc3QgVVJMJiBuZXdOYW1lLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKQEAgLTIyMjEsOSArMjIwNiw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVCiAgICAgaWYg
KG9sZE9yaWdpbi5pc0VtcHR5KCkgfHwgbmV3T3JpZ2luLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byogc2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCk7Ci0g
ICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZXNzaW9uID8gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIo
KSA6IG51bGxwdHIpCi0gICAgICAgIG1hbmFnZXItPm1vdmVEYXRhKGRhdGFUeXBlcywgb2xkT3Jp
Z2luLCBuZXdPcmlnaW4sIFthZ2dyZWdhdG9yXSB7IH0pOworICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc2Vzc2lvbi0+c3RvcmFnZU1h
bmFnZXIoKS5tb3ZlRGF0YShkYXRhVHlwZXMsIG9sZE9yaWdpbiwgbmV3T3JpZ2luLCBbYWdncmVn
YXRvcl0geyB9KTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTI0NzcsMTAg
KzI0NjEsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciYgbG9hZGVyKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjb25uZWN0
aW9uVG9XZWJQcm9jZXNzQ2xvc2VkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogewotICAgIGlmIChhdXRvKiBzZXNzaW9uID0gbmV0d29ya1Nl
c3Npb24oc2Vzc2lvbklEKSkgewotICAgICAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlc3Npb24t
PnN0b3JhZ2VNYW5hZ2VyKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLT5zdG9wUmVjZWl2aW5nTWVz
c2FnZUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgIH0KKyAgICBpZiAoYXV0byogc2Vz
c2lvbiA9IG5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCisgICAgICAgIHNlc3Npb24tPnN0b3Jh
Z2VNYW5hZ2VyKCkuc3RvcFJlY2VpdmluZ01lc3NhZ2VGcm9tQ29ubmVjdGlvbihjb25uZWN0aW9u
KTsKIH0KIAogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIE5ldHdvcmtQcm9jZXNzOjp3
ZWJQcm9jZXNzQ29ubmVjdGlvbihQcm9jZXNzSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDY4
OWJmOTdlZGVkZDk1ZTM3YzYyOTBjYjZjZmFlOTViZDZiNDEwOWUuLmExZjJjNzc0YTkxNjE4MzQ0
NDc1MmZkNzA3MWYxYTQyYmE5MWVhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTE2OSwxMSArMTY5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZm9yRWFjaE5ldHdvcmtTdG9yYWdlU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYpPiYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24+IG5ld1Rlc3RpbmdT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIGVu
c3VyZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtT
ZXNzaW9uLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiYmKTsKLSNlbHNlCi0gICAgdm9pZCBlbnN1cmVTZXNzaW9uKFBBTDo6U2Vzc2lv
bklELCBib29sIHNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyKTsKLSNlbmRpZgorICAgIHZvaWQgYWRkU3RvcmFnZVNlc3Npb24oUEFMOjpTZXNz
aW9uSUQsIGJvb2wgc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmKTsKIAogICAgIHZvaWQgcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5l
bnRseUZvclRlc3RpbmdTeW5jKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBwcmVwYXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CkBAIC0zMDUsNyArMzAxLDcgQEAgcHVibGljOgogICAgIGJvb2wg
cGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICNlbmRpZgogCi0gICAgY29uc3QgU3RyaW5nJiB1aVByb2Nlc3NCdW5kbGVJZGVu
dGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV91aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiB1aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHJlZigpIGNvbnN0IG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV0d29y
a1Byb2Nlc3M+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSBjb25zdCBvdmVycmlkZSB7IFRo
cmVhZFNhZmVSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzPjo6ZGVyZWYoKTsgfQpAQCAtNDgzLDcg
KzQ3OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1NldENhY2hlTW9kZWwgeyBmYWxzZSB9
OwogICAgIENhY2hlTW9kZWwgbV9jYWNoZU1vZGVsIHsgQ2FjaGVNb2RlbDo6RG9jdW1lbnRWaWV3
ZXIgfTsKICAgICBib29sIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9
OwotICAgIFN0cmluZyBtX3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXI7CisgICAgbXV0YWJsZSBT
dHJpbmcgbV91aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyOwogICAgIERvd25sb2FkTWFuYWdlciBt
X2Rvd25sb2FkTWFuYWdlcjsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwgc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3QgY2hh
cio+PiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXA7CkBAIC01MjgsNCArNTI0LDExIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2Z0cEVuYWJsZWQgeyBmYWxzZSB9OwogfTsKIAorI2lmICFQTEFU
Rk9STShDT0NPQSkKK2lubGluZSBjb25zdCBTdHJpbmcmIE5ldHdvcmtQcm9jZXNzOjp1aVByb2Nl
c3NCdW5kbGVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91aVByb2Nlc3NCdW5k
bGVJZGVudGlmaWVyOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAppbmRleCA3NDA5
NTE2ZjllOTFmNWE0NmM2ZWEyNGNiMTEyMGZhMWVhNGI0M2MwLi44NTgyNTFhODk2YmYxZjgxNjRk
NzkyZWVkNzNjOTU2MTcxMzNkMjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmNwcApAQCAtMTExLDYgKzExMSwxOCBAQCBzdGF0aWMgVW5pcXVl
UmVmPFBDTTo6TWFuYWdlckludGVyZmFjZT4gbWFuYWdlck9yUHJveHkoTmV0d29ya1Nlc3Npb24m
IG5ldHdvcmtTZQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFByaXZhdGVDbGlja01lYXN1cmVt
ZW50TWFuYWdlcj4obWFrZVVuaXF1ZVJlZjxQQ006OkNsaWVudEltcGw+KG5ldHdvcmtTZXNzaW9u
LCBuZXR3b3JrUHJvY2VzcyksIHBjbVN0b3JlRGlyZWN0b3J5KG5ldHdvcmtTZXNzaW9uLCBwYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmRpcmVjdG9yeSwgcGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5wcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0b3JhZ2VEaXJlY3RvcnkpKTsKIH0KIAorc3RhdGljIFJlZjxOZXR3b3JrU3RvcmFnZU1h
bmFnZXI+IGNyZWF0ZU5ldHdvcmtTdG9yYWdlTWFuYWdlcihJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQoreworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmdlbmVyYWxTdG9y
YWdlRGlyZWN0b3J5SGFuZGxlKTsKKyAgICBJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5l
Y3Rpb25JRDsKKyAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgY29ubmVjdGlvbklEID0gY29u
bmVjdGlvbi0+dW5pcXVlSUQoKTsKKyAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpj
cmVhdGUocGFyYW1ldGVycy5zZXNzaW9uSUQsIGNvbm5lY3Rpb25JRCwgcGFyYW1ldGVycy5nZW5l
cmFsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9y
YWdlUGF0aHMpOworfQorCiBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0d29ya1By
b2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBjb25zdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKICAgICA6IG1fc2Vzc2lvbklEKHBhcmFtZXRlcnMuc2Vzc2lvbklE
KQogICAgICwgbV9uZXR3b3JrUHJvY2VzcyhuZXR3b3JrUHJvY2VzcykKQEAgLTEzMSw2ICsxNDMs
NyBAQCBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oTmV0d29ya1Byb2Nlc3MmIG5ldHdv
cmtQcm9jZXNzLCBjb25zdCBOZXR3b3JrU2VzcwogICAgICwgbV90ZXN0U3BlZWRNdWx0aXBsaWVy
KHBhcmFtZXRlcnMudGVzdFNwZWVkTXVsdGlwbGllcikKICAgICAsIG1fYWxsb3dzU2VydmVyUHJl
Y29ubmVjdChwYXJhbWV0ZXJzLmFsbG93c1NlcnZlclByZWNvbm5lY3QpCiAgICAgLCBtX3Nob3Vs
ZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZyhwYXJhbWV0ZXJzLnNob3Vs
ZFJ1blNlcnZpY2VXb3JrZXJzT25NYWluVGhyZWFkRm9yVGVzdGluZykKKyAgICAsIG1fc3RvcmFn
ZU1hbmFnZXIoY3JlYXRlTmV0d29ya1N0b3JhZ2VNYW5hZ2VyKG5ldHdvcmtQcm9jZXNzLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCksIHBhcmFtZXRlcnMpKQogI2lmIEVOQUJMRShCVUlMVF9JTl9O
T1RJRklDQVRJT05TKQogICAgICwgbV9ub3RpZmljYXRpb25NYW5hZ2VyKCp0aGlzLCBwYXJhbWV0
ZXJzLndlYlB1c2hNYWNoU2VydmljZU5hbWUpCiAjZW5kaWYKQEAgLTE2OSw2ICsxODIsMTQgQEAg
TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJv
Y2VzcywgY29uc3QgTmV0d29ya1Nlc3MKICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZChwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmVuYWJsZWQp
OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgbV9zZXJ2aWNlV29ya2VySW5mbyA9
IFNlcnZpY2VXb3JrZXJJbmZvIHsKKyAgICAgICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5LAorICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9j
ZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQKKyAgICB9OworI2VuZGlmCisKICNpZiBFTkFCTEUo
QlVJTFRfSU5fTk9USUZJQ0FUSU9OUykKICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6Ok5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Nlc3Npb25JRC50b1VJbnQ2NCgpLCBtX25vdGlmaWNhdGlv
bk1hbmFnZXIpOwogI2VuZGlmCkBAIC0yMDYsOCArMjI3LDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lv
bjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiAgICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cykKICAgICAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLT5pbnZhbGlkYXRlQW5kQ2FuY2Vs
KCk7CiAjZW5kaWYKLSAgICBpZiAoYXV0byBtYW5hZ2VyID0gc3RkOjpleGNoYW5nZShtX3N0b3Jh
Z2VNYW5hZ2VyLCBudWxscHRyKSkKLSAgICAgICAgbWFuYWdlci0+Y2xvc2UoKTsKKyAgICBtX3N0
b3JhZ2VNYW5hZ2VyLT5jbG9zZSgpOwogICAgIG1fY2FjaGVFbmdpbmUgPSBudWxscHRyOwogI2lm
IEFTU0VSVF9FTkFCTEVECiAgICAgbV9pc0ludmFsaWRhdGVkID0gdHJ1ZTsKQEAgLTU2OCw4ICs1
ODgsNyBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uOjpsb3dNZW1vcnlIYW5kbGVyKENyaXRpY2FsKQog
ICAgIGlmIChtX3N3U2VydmVyKQogICAgICAgICBtX3N3U2VydmVyLT5oYW5kbGVMb3dNZW1vcnlX
YXJuaW5nKCk7CiAjZW5kaWYKLSAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikKLSAgICAgICAgbV9z
dG9yYWdlTWFuYWdlci0+aGFuZGxlTG93TWVtb3J5V2FybmluZygpOworICAgIG1fc3RvcmFnZU1h
bmFnZXItPmhhbmRsZUxvd01lbW9yeVdhcm5pbmcoKTsKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNF
X1dPUktFUikKQEAgLTYzNSwxNyArNjU0LDYgQEAgU1dTZXJ2ZXImIE5ldHdvcmtTZXNzaW9uOjpl
bnN1cmVTV1NlcnZlcigpCiAgICAgcmV0dXJuICptX3N3U2VydmVyOwogfQogCi12b2lkIE5ldHdv
cmtTZXNzaW9uOjphZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihib29sIHByb2Nlc3NUZXJtaW5hdGlv
bkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgYm9vbCBo
YWRTZXJ2aWNlV29ya2VySW5mbyA9ICEhbV9zZXJ2aWNlV29ya2VySW5mbzsKLSAgICBtX3NlcnZp
Y2VXb3JrZXJJbmZvID0gU2VydmljZVdvcmtlckluZm8gewotICAgICAgICBXVEZNb3ZlKHNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLAotICAgICAgICBwcm9jZXNzVGVybWluYXRp
b25EZWxheUVuYWJsZWQKLSAgICB9OwotICAgIGlmICghaGFkU2VydmljZVdvcmtlckluZm8pCi0g
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwotfQot
CiBib29sIE5ldHdvcmtTZXNzaW9uOjpoYXNTZXJ2aWNlV29ya2VyRGF0YWJhc2VQYXRoKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9zZXJ2aWNlV29ya2VySW5mbyAmJiAhbV9zZXJ2aWNlV29ya2Vy
SW5mby0+ZGF0YWJhc2VQYXRoLmlzRW1wdHkoKTsKQEAgLTY2MCwyMCArNjY4LDYgQEAgV2ViU2hh
cmVkV29ya2VyU2VydmVyJiBOZXR3b3JrU2Vzc2lvbjo6ZW5zdXJlU2hhcmVkV29ya2VyU2VydmVy
KCkKICAgICByZXR1cm4gKm1fc2hhcmVkV29ya2VyU2VydmVyOwogfQogCi12b2lkIE5ldHdvcmtT
ZXNzaW9uOjphZGRTdG9yYWdlTWFuYWdlclNlc3Npb24oY29uc3QgU3RyaW5nJiBnZW5lcmFsU3Rv
cmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgZ2VuZXJhbFN0b3JhZ2VQYXRoSGFu
ZGxlLCBjb25zdCBTdHJpbmcmIGxvY2FsU3RvcmFnZVBhdGgsIFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZSYgbG9jYWxTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3QgU3RyaW5nJiBpZGJTdG9yYWdlUGF0
aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBpZGJTdG9yYWdlUGF0aEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBjYWNoZVN0b3JhZ2VQYXRoLCB1aW50NjRfdCBkZWZhdWx0T3JpZ2luUXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGJvb2wgc2hvdWxkVXNlQ3VzdG9tU3RvcmFn
ZVBhdGhzKQotewotICAgIGlmIChtX3N0b3JhZ2VNYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoZ2VuZXJhbFN0b3JhZ2VQ
YXRoSGFuZGxlKTsKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkobG9j
YWxTdG9yYWdlUGF0aEhhbmRsZSk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1h
bmVudGx5KGlkYlN0b3JhZ2VQYXRoSGFuZGxlKTsKLSAgICBJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIGNvbm5lY3Rpb25JRDsKLSAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IG5ldHdvcmtQcm9j
ZXNzKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSkKLSAgICAgICAgY29ubmVjdGlvbklEID0g
Y29ubmVjdGlvbi0+dW5pcXVlSUQoKTsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyID0gTmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoc2Vzc2lvbklEKCksIGNvbm5lY3Rpb25JRCwgZ2VuZXJhbFN0
b3JhZ2VQYXRoLCBsb2NhbFN0b3JhZ2VQYXRoLCBpZGJTdG9yYWdlUGF0aCwgY2FjaGVTdG9yYWdl
UGF0aCwgZGVmYXVsdE9yaWdpblF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBzaG91bGRV
c2VDdXN0b21TdG9yYWdlUGF0aHMpOwotfQotCiB2b2lkIE5ldHdvcmtTZXNzaW9uOjplbnN1cmVD
YWNoZUVuZ2luZShGdW5jdGlvbjx2b2lkKENhY2hlU3RvcmFnZTo6RW5naW5lJik+JiYgY2FsbGJh
Y2spCiB7CiAgICAgaWYgKG1fY2FjaGVFbmdpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKaW5kZXggMzAzYTUwMTFhNmJkMGJjNjI4NGU1NmEwNWMx
YjU0Y2JmODI5YzFlMC4uOWI0MzlhODE5NGU1NWI3ZWZiYTA4ZmQ5YTI4ODdlMDZiM2YwYThjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAt
MjA4LDE2ICsyMDgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlclNXU2VydmVyQ29u
bmVjdGlvbihXZWJTV1NlcnZlckNvbm5lY3Rpb24mKTsKIAogICAgIGJvb2wgaGFzU2VydmljZVdv
cmtlckRhdGFiYXNlUGF0aCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRTZXJ2aWNlV29ya2VyU2Vz
c2lvbihib29sIHByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgU3RyaW5nJiYgc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJik7CiAjZW5kaWYKIAogICAgIFdlYlNoYXJlZFdvcmtlclNlcnZlciogc2hhcmVkV29ya2Vy
U2VydmVyKCkgeyByZXR1cm4gbV9zaGFyZWRXb3JrZXJTZXJ2ZXIuZ2V0KCk7IH0KICAgICBXZWJT
aGFyZWRXb3JrZXJTZXJ2ZXImIGVuc3VyZVNoYXJlZFdvcmtlclNlcnZlcigpOwogCi0gICAgTmV0
d29ya1N0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1h
bmFnZXIuZ2V0KCk7IH0KLSAgICB2b2lkIGFkZFN0b3JhZ2VNYW5hZ2VyU2Vzc2lvbihjb25zdCBT
dHJpbmcmIGdlbmVyYWxTdG9yYWdlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBnZW5l
cmFsU3RvcmFnZVBhdGhIYW5kbGUsIGNvbnN0IFN0cmluZyYgbG9jYWxTdG9yYWdlUGF0aCwgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBsb2NhbFN0b3JhZ2VQYXRoSGFuZGxlLCBjb25zdCBTdHJp
bmcmIGlkYlN0b3JhZ2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGlkYlN0b3JhZ2VQ
YXRoSGFuZGxlLCBjb25zdCBTdHJpbmcmIGNhY2hlU3RvcmFnZVBhdGgsIHVpbnQ2NF90IGRlZmF1
bHRPcmlnaW5RdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgYm9vbCBzaG91
bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpOwotCisgICAgTmV0d29ya1N0b3JhZ2VNYW5hZ2VyJiBz
dG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KICAgICBD
YWNoZVN0b3JhZ2U6OkVuZ2luZSogY2FjaGVFbmdpbmUoKSB7IHJldHVybiBtX2NhY2hlRW5naW5l
LmdldCgpOyB9CiAgICAgdm9pZCBlbnN1cmVDYWNoZUVuZ2luZShGdW5jdGlvbjx2b2lkKENhY2hl
U3RvcmFnZTo6RW5naW5lJik+JiYpOwogICAgIHZvaWQgY2xlYXJDYWNoZUVuZ2luZSgpOwpAQCAt
MzIwLDcgKzMxNiw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJTaGFyZWRXb3JrZXJTZXJ2ZXI+IG1fc2hhcmVkV29ya2VyU2VydmVyOwogCi0gICAgUmVmUHRy
PE5ldHdvcmtTdG9yYWdlTWFuYWdlcj4gbV9zdG9yYWdlTWFuYWdlcjsKKyAgICBSZWY8TmV0d29y
a1N0b3JhZ2VNYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2VyOwogICAgIFJlZlB0cjxDYWNoZVN0b3Jh
Z2U6OkVuZ2luZT4gbV9jYWNoZUVuZ2luZTsKICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZChDYWNo
ZVN0b3JhZ2U6OkVuZ2luZSYpPj4gbV9jYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzQ2FsbGJhY2tzOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDJmMDlhNWU4ZDNhZTE2YTFj
ZjRkMWU3NDExYTQwNjBjZGQ4ZGY3MTUuLjM5ZDYzNTNiZGJiZWE1MTdkZDQzNzg0ODRmY2ZhYzQ0
YWUyMmFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05NSw2ICs5
NSwxNiBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogI2lmICFIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NL
RVQpCiAgICAgZW5jb2RlciA8PCBzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0Zvcldl
YlNvY2tldHM7CiAjZW5kaWYKKworICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlQ3VzdG9tU3RvcmFn
ZVBhdGhzOworICAgIGVuY29kZXIgPDwgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIDw8IHBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGVuY29k
ZXIgPDwgaW5kZXhlZERCRGlyZWN0b3J5IDw8IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKKyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZW5jb2RlciA8PCBnZW5lcmFsU3RvcmFn
ZURpcmVjdG9yeSA8PCBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKKyNpZiBFTkFCTEUo
U0VSVklDRV9XT1JLRVIpCisgICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUgPDwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKKyNl
bmRpZgogICAgIGVuY29kZXIgPDwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnM7CiB9
CiAKQEAgLTMzNCw2ICszNDQsNzggQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycz4gTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICNlbmRpZgogCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBz
aG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHM7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VDdXN0
b21TdG9yYWdlUGF0aHM7CisgICAgaWYgKCFzaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CisgICAgZGVjb2RlciA+PiBwZXJPcmlnaW5TdG9yYWdl
UXVvdGE7CisgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwZXJUaGlyZFBhcnR5
T3JpZ2luU3RvcmFnZVF1b3RhOworICAgIGRlY29kZXIgPj4gcGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YTsKKyAgICBpZiAoIXBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gbG9jYWxTdG9yYWdlRGlyZWN0
b3J5OworICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+
IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IGxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIWxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBpbmRleGVkREJEaXJlY3Rvcnk7CisgICAgZGVj
b2RlciA+PiBpbmRleGVkREJEaXJlY3Rvcnk7CisgICAgaWYgKCFpbmRleGVkREJEaXJlY3Rvcnkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgc3RkOjpvcHRpb25hbDxT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKKyAgICBkZWNvZGVyID4+IGluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAg
ICBpZiAoIWluZGV4ZWREQkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VE
aXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYg
KCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxTdHJpbmc+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4g
Z2VuZXJhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFnZW5lcmFsU3RvcmFnZURpcmVjdG9y
eSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKKyAg
ICBkZWNvZGVyID4+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOworICAgIGlmICghZ2Vu
ZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBzZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OworICAgIGlmICghc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAK
KyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYg
KCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
c2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKKyAgICBkZWNvZGVy
ID4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQ7CisgICAgaWYg
KCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworI2VuZGlmCisKICAgICBzdGQ6Om9wdGlvbmFsPFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzPiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVy
czsKICAgICBkZWNvZGVyID4+IHJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzOwogICAg
IGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMpCkBAIC0zOTQsNiArNDc2LDIy
IEBAIHN0ZDo6b3B0aW9uYWw8TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM+IE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzCiAgICAgICAgICwgV1RGTW92ZSgqZW5hYmxlUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnREZWJ1Z01vZGUpCiAjaWYgIUhBVkUoTlNVUkxTRVNTSU9OX1dF
QlNPQ0tFVCkKICAgICAgICAgLCBXVEZNb3ZlKCpzaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmlj
YXRlc0ZvcldlYlNvY2tldHMpCisjZW5kaWYKKyAgICAgICAgLCAqc2hvdWxkVXNlQ3VzdG9tU3Rv
cmFnZVBhdGhzCisgICAgICAgICwgV1RGTW92ZSgqcGVyT3JpZ2luU3RvcmFnZVF1b3RhKQorICAg
ICAgICAsIFdURk1vdmUoKnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCisgICAgICAg
ICwgV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICAsIFdURk1vdmUoKmxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCBXVEZNb3ZlKCpp
bmRleGVkREJEaXJlY3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqaW5kZXhlZERCRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICAsIFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9y
eSkKKyAgICAgICAgLCBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpCisgICAgICAgICwgV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAg
ICwgV1RGTW92ZSgqZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5kbGUpCisjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQorICAgICAgICAsIFdURk1vdmUoKnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnkpCisgICAgICAgICwgV1RGTW92ZSgqc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgLCAqc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZAogI2VuZGlmCiAgICAgICAgICwgV1RGTW92ZSgqcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMpCiAgICAgfX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKaW5kZXggMzQwYjQzNDgxZDI1NzdhNjIzMzc1M2JmNGQ2NDFjMDUxNmY4NWU1
ZC4uMTI1NTU1OWNlMzBiODZlODMxMjZhZmZmZGU0YTJlODA5ZWQ5MTI1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTEyLDYgKzExMiwyMyBAQCBzdHJ1Y3QgTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMgewogICAgIGJvb2wgc2hvdWxkQWNjZXB0SW5zZWN1cmVD
ZXJ0aWZpY2F0ZXNGb3JXZWJTb2NrZXRzIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBz
aG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90IHBlck9y
aWdpblN0b3JhZ2VRdW90YTsKKyAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhOworICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAg
ICBTdHJpbmcgaW5kZXhlZERCRGlyZWN0b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBpbmRleGVkREJEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgU3RyaW5nIGNhY2hlU3Rv
cmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIFN0cmluZyBnZW5lcmFsU3RvcmFnZURpcmVj
dG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rv
cnlIYW5kbGU7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIFN0cmluZyBzZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAg
IGJvb2wgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCB7IHRydWUg
fTsKKyNlbmRpZgorCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIwNTZmNGY2ZWI2MDdiNGQ3OWNlYjgyYTVmM2I5NDRkNjNmNGRh
OTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0
eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1Byb2Nlc3M7Ci1zdHJ1Y3Qg
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM7Ci0KLWNsYXNzIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0IHsKLXB1YmxpYzoKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHBsYXRmb3JtLXNwZWNpZmljIGNv
ZGUuCi0gICAgc3RhdGljIHZvaWQgZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oTmV0d29y
a1Byb2Nlc3MmLCBjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYpOwotfTsKLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuY3BwCmluZGV4IGJkYWIxOGY5NDI5MDVhY2MyYzg2NmVkYTgzMzA5NjU4Mjhj
YjYwZGUuLjVmNmMwNDE4NmIzNDY2YWIyN2E4ZmRhYTQxNmU0NmM4ZjlmZWI4ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZS5jcHAKQEAgLTI0NSwxMSArMjQ1LDcgQEAgdm9pZCBFbmdpbmU6OnJlcXVlc3RTcGFj
ZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXEK
ICAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKIAotICAgIGF1dG8q
IHN0b3JhZ2VNYW5hZ2VyID0gc2Vzc2lvbi0+c3RvcmFnZU1hbmFnZXIoKTsKLSAgICBpZiAoIXN0
b3JhZ2VNYW5hZ2VyKQotICAgICAgICBjYWxsYmFjayhmYWxzZSk7Ci0KLSAgICBzdG9yYWdlTWFu
YWdlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICBzZXNzaW9uLT5zdG9yYWdlTWFuYWdlcigpLnJlcXVlc3RTcGFjZShvcmlnaW4s
IHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6RW5naW5l
KE5ldHdvcmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbiwgU3RyaW5nJiYgcm9vdFBhdGgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW0KaW5kZXggNDRhZTg0MjRlMGI1NDdkZGViNDUwYzNiOTI0OGUzZjg4ZTI3NDk4
OC4uNDg0ODI5NGNiOTY2Mzk2OWRlZWU1YWFmMGNkZTllMjIxM2Q1YzdjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbQpAQCAtMjU1LDQgKzI1NSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpub3RpZnlQ
cmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZwogfQog
I2VuZGlmCiAKK2NvbnN0IFN0cmluZyYgTmV0d29ya1Byb2Nlc3M6OnVpUHJvY2Vzc0J1bmRsZUlk
ZW50aWZpZXIoKSBjb25zdAoreworICAgIGlmIChtX3VpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIu
aXNOdWxsKCkpCisgICAgICAgIG1fdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisKKyAgICByZXR1cm4gbV91aVByb2Nl
c3NCdW5kbGVJZGVudGlmaWVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dEN1cmwuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jdXJsL1JlbW90ZU5l
dHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNm
MDQ5MGI2YTVlODUyYjRjNjI5NDNkOTc5ZDA3MGY5NzQyZTAzYTQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jdXJsL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Q3VybC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vz
c2lvbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwotICAgIGlmIChuZXR3b3Jr
UHJvY2Vzcy5zdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBuZXR3b3JrUHJvY2Vzcy5lbnN1cmVTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uLCBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSUQudG9VSW50NjQoKSkpOwotICAgIG5ldHdvcmtQcm9jZXNzLnNl
dFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKG5ldHdvcmtQcm9jZXNz
LCBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGUyZjBmYzZiNWZh
ODY4ZDhkMWY2MGNhNzE2YWQ2NWFmNDUyMjRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQuaCIKLQotI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKLSNpbXBvcnQgIkxl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5oIgotI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIK
LSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbkNyZWF0
aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiV2ViRXJyb3JzLmgiCi0jaW1wb3J0ICJXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIgotI2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgotI2ltcG9ydCA8cGFs
L1Nlc3Npb25JRC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
dm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Np
b24oTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBjb25zdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKLSAgICBpZiAobmV0d29ya1By
b2Nlc3Muc3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U3RyaW5nIGJhc2UgPSBuZXR3b3JrUHJvY2Vzcy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKCk7
Ci0gICAgaWYgKGJhc2UuaXNOdWxsKCkpCi0gICAgICAgIGJhc2UgPSBbW05TQnVuZGxlIG1haW5C
dW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOwotCi0gICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFt
ZXRlcnMuY29va2llU3RvcmFnZVBhdGhFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2U7Ci0gICAgaWYg
KCFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSAmJiAhcGFyYW1ldGVycy51aVByb2Nlc3NDb29raWVT
dG9yYWdlSWRlbnRpZmllci5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBh
cmFtZXRlcnMuc2Vzc2lvbklEICE9IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkp
Ci0gICAgICAgIHVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2UgPSBjb29raWVTdG9yYWdlRnJvbUlkZW50
aWZ5aW5nRGF0YShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0Nvb2tpZVN0b3JhZ2VJZGVudGlmaWVyKTsK
LQotICAgIG5ldHdvcmtQcm9jZXNzLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24s
IG1ha2VTdHJpbmcoYmFzZSwgJy4nLCBzZXNzaW9uSUQudG9VSW50NjQoKSksIFdURk1vdmUodWlQ
cm9jZXNzQ29va2llU3RvcmFnZSkpOwotCi0gICAgbmV0d29ya1Byb2Nlc3Muc2V0U2Vzc2lvbihz
ZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUobmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzgyYmY4YTMw
MDgxODRmMmI0YzhkYzNhZmU1MzlmZDc1MzIwMTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1Jl
bW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCBJbmMuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oTmV0d29ya1Byb2Nlc3MmIG5l
dHdvcmtQcm9jZXNzLCBjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGFyYW1ldGVy
cykKLXsKLSAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJh
bWV0ZXJzLnNlc3Npb25JRDsKLSAgICBpZiAobmV0d29ya1Byb2Nlc3Muc3RvcmFnZVNlc3Npb24o
c2Vzc2lvbklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbmV0d29ya1Byb2Nlc3MuZW5zdXJl
U2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNo
b3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnRv
VUludDY0KCkpKTsKLSAgICBuZXR3b3JrUHJvY2Vzcy5zZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1Nlc3Npb246OmNyZWF0ZShuZXR3b3JrUHJvY2VzcywgcGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9u
LmNtYWtlCmluZGV4IDhiNzZiNjA2NTNiMWIzMWFkM2I4YzllN2Q3YjM2N2Q5ZjJmY2E2NjkuLjlh
MmFlMmMxYWU3NGMyZDUyN2RhYTVmOWJjYjkxNzg2MGFlZjQ3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTQ4LDcgKzQ4LDYgQEAgbGlzdChBUFBFTkQgV2Vi
S2l0X1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzQ3VybC5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05ldHdvcmtQcm9jZXNzTWFpbkN1cmwuY3BwCiAg
ICAgTmV0d29ya1Byb2Nlc3MvY3VybC9OZXR3b3JrU2Vzc2lvbkN1cmwuY3BwCi0gICAgTmV0d29y
a1Byb2Nlc3MvY3VybC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dEN1cmwuY3BwCiAKICAgICBQbGF0
Zm9ybS9JUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDI0YmQ4NDI2NzJh
YTgxMDFkMWMxZWI2ZGI0MzM1ZjFlNWYwYjg0MGQuLmJhNDFjYzRiOGQzYzQ4ZTk2ZTgwYTJmZDE2
YWJjYjgzMzI4MzBiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTc2LDcgKzE3Niw2
IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQogICAgICAgICBOZXR3b3JrUHJvY2Vz
cy9jdXJsL05ldHdvcmtEYXRhVGFza0N1cmwuY3BwCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzL2N1
cmwvTmV0d29ya1Byb2Nlc3NDdXJsLmNwcAogICAgICAgICBOZXR3b3JrUHJvY2Vzcy9jdXJsL05l
dHdvcmtTZXNzaW9uQ3VybC5jcHAKLSAgICAgICAgTmV0d29ya1Byb2Nlc3MvY3VybC9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dEN1cmwuY3BwCiAKICAgICAgICAgU2hhcmVkL0FQSS9jL2NhaXJvL1dL
SW1hZ2VDYWlyby5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IDEyMDM3ZmM4ZmJjNjk5YjU4ZDAwOWY0NzU1MjM5
OGRhMWM0ODNjNDAuLjg2MGEwN2RlZTI5ZTY3NmU2N2MzYTk0ZDMyZDE2MGU4OWI0MjgyYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cy5jcHAKQEAgLTMxLDI5ICszMSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6On5XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycygpCi17Ci19
CitXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6fldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
KCkgPSBkZWZhdWx0OwogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUo
SVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzOwogICAgIGVuY29kZXIgPDwgdWlQcm9jZXNzQ29va2llU3RvcmFnZUlk
ZW50aWZpZXI7CiAgICAgZW5jb2RlciA8PCBjb29raWVTdG9yYWdlUGF0aEV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBlbmNvZGVyIDw8IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA8PCBpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCi0gICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8
IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgc2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZDsKLSNlbmRpZgotCi0gICAg
ZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwotICAgIGVuY29kZXIgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5IDw8
IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBlbmNvZGVyIDw8IGdl
bmVyYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOwot
Ci0gICAgZW5jb2RlciA8PCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7Ci0gICAgZW5jb2RlciA8PCBw
ZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwotCi0gICAgZW5jb2RlciA8PCBzaG91bGRV
c2VDdXN0b21TdG9yYWdlUGF0aHM7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQpAQCAtNzgsOTIgKzYyLDYgQEAgc3RkOjpvcHRpb25hbDxXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEMK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY29va2llU3RvcmFnZVBhdGhFeHRlbnNp
b25IYW5kbGUpOwogCi0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKLSAgICBp
ZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IFdURk1vdmUoKmlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgCi0gICAgc3RkOjpvcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGU+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBkZWNvZGVyID4+IGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKLSAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCi0gICAg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnk7
Ci0gICAgZGVjb2RlciA+PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5OwotICAg
IGlmICghc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkgPSBXVEZNb3ZlKCpzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KTsK
LSAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBkZWNvZGVy
ID4+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0g
ICAgaWYgKCFzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotICAgIAotICAg
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZDsKLSAgICBkZWNvZGVyID4+IHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25E
ZWxheUVuYWJsZWQ7Ci0gICAgaWYgKCFzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXlFbmFibGVkKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMu
c2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCA9IFdURk1vdmUoKnNl
cnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQpOwotI2VuZGlmCi0KLSAg
ICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGRlY29k
ZXIgPj4gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGlmICghbG9jYWxTdG9yYWdlRGlyZWN0
b3J5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgZGVjb2RlciA+PiBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7Ci0gICAgaWYgKCFsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+
IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKLSAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVj
dG9yeTsKLSAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1v
dmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwot
ICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwotICAg
IGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBnZW5lcmFsU3RvcmFnZURpcmVjdG9y
eTsKLSAgICBkZWNvZGVyID4+IGdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGlmICghZ2Vu
ZXJhbFN0b3JhZ2VEaXJlY3RvcnkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
cGFyYW1ldGVycy5nZW5lcmFsU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoKmdlbmVyYWxTdG9y
YWdlRGlyZWN0b3J5KTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZTsKLSAgICBkZWNvZGVyID4+IGdlbmVy
YWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlOwotICAgIGlmICghZ2VuZXJhbFN0b3JhZ2VEaXJlY3Rv
cnlIYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5n
ZW5lcmFsU3RvcmFnZURpcmVjdG9yeUhhbmRsZSA9IFdURk1vdmUoKmdlbmVyYWxTdG9yYWdlRGly
ZWN0b3J5SGFuZGxlKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0
b3JhZ2VRdW90YTsKLSAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKLSAgICBp
ZiAoIXBlck9yaWdpblN0b3JhZ2VRdW90YSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9ICpwZXJPcmlnaW5TdG9yYWdl
UXVvdGE7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhOwotICAgIGRlY29kZXIgPj4gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YTsKLSAgICBpZiAoIXBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhID0gKnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKLSAgICBkZWNv
ZGVyID4+IHNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRoczsKLSAgICBpZiAoIXNob3VsZFVzZUN1
c3RvbVN0b3JhZ2VQYXRocykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBwYXJh
bWV0ZXJzLnNob3VsZFVzZUN1c3RvbVN0b3JhZ2VQYXRocyA9ICpzaG91bGRVc2VDdXN0b21TdG9y
YWdlUGF0aHM7Ci0gICAgCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDM3Yzk3
ZjEzMDMwNzc1ZGNlNWUzZDEwMDIwMzVmMjFlNzM1NDBlOTguLjU5MTk5ZjRjZWMwYTU1Mzk2MjQ1
MzU3YTJkMjQ1MTZhOWQxZDNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNTIsMjkgKzUyLDYgQEAgc3RydWN0IFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8dWludDhfdD4gdWlQcm9jZXNzQ29v
a2llU3RvcmFnZUlkZW50aWZpZXI7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNvb2tp
ZVN0b3JhZ2VQYXRoRXh0ZW5zaW9uSGFuZGxlOwogICAgIE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25Q
YXJhbWV0ZXJzIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsKLQotICAgIFN0cmluZyBpbmRleGVk
RGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKLSAgICBTdHJpbmcgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeTsKLSAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKLSAgICBib29sIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWlu
YXRpb25EZWxheUVuYWJsZWQgeyB0cnVlIH07Ci0jZW5kaWYKLQotICAgIFN0cmluZyBsb2NhbFN0
b3JhZ2VEaXJlY3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKLQotICAgIFN0cmluZyBjYWNoZVN0b3JhZ2VEaXJl
Y3Rvcnk7Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKLQotICAgIFN0cmluZyBnZW5lcmFsU3RvcmFnZURpcmVjdG9yeTsK
LSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZ2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnlIYW5k
bGU7Ci0KLSAgICB1aW50NjRfdCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7Ci0gICAgdWludDY0X3Qg
cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKLQotICAgIGJvb2wgc2hvdWxkVXNlQ3Vz
dG9tU3RvcmFnZVBhdGhzIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDI1YjExM2I1YTY1M2Y0MTMzYzY5MDQ4YWFlMTI5YTdk
YmNkYjU4ZTUuLjAxNDM4NGY4ZTU4YzVjZWRkMDgxNGNkM2Y0MmViOTY0MjNkNjNmMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU0LDcgKzU0LDYgQEAgTmV0d29ya1Byb2Nlc3MvaW9zL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzSU9TLm1tCiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0
d29ya1Byb2Nlc3NJT1MubW0KIAogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFj
Lm1tCi1OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KIAogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL0xpYldlYlJUQ1NvY2tldENsaWVudC5jcHAKIE5ldHdvcmtQcm9j
ZXNzL3dlYnJ0Yy9OZXR3b3JrUlRDTW9uaXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDdl
NzQwOGU1YWZjMDJjODJlZTY5NGNlNTM3NGNjZTZjOWM4ZmMzODguLmJlOTJhNDVkZDZiODA1MzU1
ZDJhMzJkNTlkZTcwMmZkYmYwYTEzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtNDIsNyArNDIs
NiBAQCBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiBOZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzTWFpblNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmNwcAotTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dFNvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYktpdERpcmVjdG9yeUlucHV0U3RyZWFt
LmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNrU291cC5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c1dQRS50eHQKaW5kZXggOTdmZWRkNDQwOWNlYmNiMDRmYjk1NTllZGJmNzFiYTc2NDI4YTFjZC4u
ZWJhMDNjODhiYzRkOTQ1NzVmN2EzNTJjM2NmNjJlNzdkNzM2OTIxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUu
dHh0CkBAIC00Miw3ICs0Miw2IEBAIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5jcHAK
IE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCi1OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90
ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0RGly
ZWN0b3J5SW5wdXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tT
b3VwLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1MjhlMTQ2OGIwNDg5NjRlM2UxNzk1NmQyYTk5
MTQyNjk4ZDJiYWVmLi4zYmI0NGE0ODQzOGUyYzVjODg3YWI4MmIxNmU0OTQ3ZGNhZjE5NDgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAKQEAgLTE0MjAsNyArMTQyMCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6YWRkU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiBzdG9yZSwgU2VuZFBhcmFtZXRlcnNU
b05lCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0
YVN0b3JlIHsgc3RvcmUucGFyYW1ldGVycygpIH0sIDAsIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICBhdXRvIHNlc3Npb25J
RCA9IHN0b3JlLnNlc3Npb25JRCgpOwogICAgIGlmICghc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgIGNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBncmFkZShzdG9yZS5yZXNvbHZlZEluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsKKyAgICAgICAgY3JlYXRlU3ltTGlua0ZvckZpbGVVcGdy
YWRlKHN0b3JlLnJlc29sdmVkSW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKSk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVtb3ZlU2Vzc2lvbihXZWJzaXRlRGF0YVN0b3JlJiB3
ZWJzaXRlRGF0YVN0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBkZjUxN2Y4NmY2YWMyNzhhMDEy
YzEyODRhZmRiNDY2ZjRhOWM3MTgxLi4xZGEzMTA2Yjk0NTg4Y2Q2NDFkNmIwYjk0YWM1YTY0MjJk
ZjA4YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMTg0Myw1NSArMTg0Myw1MiBAQCBXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICNpZiAh
SEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQogICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zaG91bGRBY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlc0ZvcldlYlNvY2tldHMgPSBtX2NvbmZp
Z3VyYXRpb24tPnNob3VsZEFjY2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzRm9yV2ViU29ja2V0cygp
OwogI2VuZGlmCisgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNob3VsZFVzZUN1c3RvbVN0
b3JhZ2VQYXRocyA9IG1fY29uZmlndXJhdGlvbi0+c2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhz
KCk7CisgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9
IHBlck9yaWdpblN0b3JhZ2VRdW90YSgpOworICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5w
ZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSgpOwogCi0gICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMgPSBX
VEZNb3ZlKG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyk7Ci0KLSAgICBwYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkp
IHsKKyAgICBpZiAoYXV0byBkaXJlY3RvcnkgPSByZXNvbHZlZExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpOyAhZGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAgICAvLyBGSVhN
RTogU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5IHJl
c29sdmVzIHRoZSBkaXJlY3RvcnksIGJ1dCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gUmVt
b3ZlIHRoaXMgZHVwbGljYXRlIHdvcmsuCi0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwor
ICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSkKKyAgICAgICAgICAgIG5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCpoYW5kbGUpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgbW92ZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIHRvIGJhY2tncm91bmQgdGhy
ZWFkLgorICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoZGlyZWN0b3J5KTsK
KyAgICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAoZGlyZWN0b3J5KTsKKyNlbmRp
ZgogICAgIH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAgICBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSByZXNvbHZlZFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoYXV0byBkaXJlY3Rv
cnkgPSByZXNvbHZlZEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7ICFkaXJlY3RvcnkuaXNF
bXB0eSgpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5pbmRleGVkREJEaXJl
Y3RvcnkgPSBkaXJlY3Rvcnk7CiAgICAgICAgIC8vIEZJWE1FOiBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkgcmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSwg
YnV0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBSZW1vdmUgdGhpcyBkdXBsaWNhdGUgd29y
ay4KLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAg
ICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lv
blBhcmFtZXRlcnMuaW5kZXhlZERCRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgq
aGFuZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5zZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKCk7Ci0jZW5kaWYKIAotICAgIGF1dG8gbG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gcmVzb2x2ZWRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKTsKLSAgICBpZiAo
IWxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQorICAgIGlmIChhdXRvIGRpcmVjdG9yeSA9IHJlc29sdmVkU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyAhZGlyZWN0b3J5LmlzRW1wdHkoKSkgewor
ICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSA9IGRpcmVjdG9yeTsKICAgICAgICAgLy8gRklYTUU6IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeSByZXNvbHZlcyB0aGUgZGlyZWN0
b3J5LCBidXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuIFJlbW92ZSB0aGlzIGR1cGxpY2F0
ZSB3b3JrLgotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqaGFuZGxlKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBG
aWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMobG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKLSAg
ICAgICAgRmlsZVN5c3RlbTo6ZXhjbHVkZUZyb21CYWNrdXAobG9jYWxTdG9yYWdlRGlyZWN0b3J5
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gdGhp
cy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OwotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKKyAgICAgICAgaWYgKGF1dG8g
aGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUo
KmhhbmRsZSk7CiAgICAgfQorICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5zZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkKCk7CisjZW5kaWYKIAogICAg
IGlmIChhdXRvIGRpcmVjdG9yeSA9IHJlc29sdmVkR2VuZXJhbFN0b3JhZ2VEaXJlY3RvcnkoKTsg
IWRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFyYW1ldGVycy5nZW5lcmFsU3RvcmFn
ZURpcmVjdG9yeSA9IGRpcmVjdG9yeTsKKyAgICAgICAgbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogICAgICAgICBpZiAoYXV0byBo
YW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rv
cnkoZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZ2VuZXJhbFN0b3JhZ2VEaXJl
Y3RvcnlIYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOworICAgICAgICAgICAgbmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLmdlbmVyYWxTdG9yYWdlRGlyZWN0b3J5SGFuZGxlID0gV1RGTW92ZSgqaGFu
ZGxlKTsKICAgICB9Ci0gICAgcGFyYW1ldGVycy5zaG91bGRVc2VDdXN0b21TdG9yYWdlUGF0aHMg
PSBjb25maWd1cmF0aW9uKCkuc2hvdWxkVXNlQ3VzdG9tU3RvcmFnZVBhdGhzKCk7CiAKLSAgICBw
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90YSgp
OwotICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICBpZiAoYXV0byBkaXJlY3RvcnkgPSBj
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWRpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGRpcmVjdG9y
eTsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkpCisgICAgICAgICAgICBuZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0g
V1RGTW92ZSgqaGFuZGxlKTsKKyAgICB9CiAKKyAgICBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9u
UGFyYW1ldGVycyA9IFdURk1vdmUobmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKTsKICNpZiBFTkFC
TEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKICAgICBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGFyYW1ldGVycy5lbmFi
bGVkID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKICNlbmRpZgpAQCAtMTkwMCw3
ICsxODk3LDcgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6
cGFyYW1ldGVycygpCiAgICAgcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuYXBw
SGFzUmVxdWVzdGVkQ3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uID0gaGFzUmVxdWVzdGVk
Q3Jvc3NXZWJzaXRlVHJhY2tpbmdQZXJtaXNzaW9uKCk7CiAgICAgcGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMudXNlTmV0d29ya0xvYWRlciA9IHVzZU5ldHdvcmtMb2FkZXIoKTsK
ICNlbmRpZgotICAgIAorCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApp
bmRleCA2MzllZWRmMTg3ZjM4MDc1MmY4OGRiNDM3Yjg4OGY5ZjdhZWJmNGNjLi5iMTI5YWJmMzc3
NWY1YzNhODc2YmZmZGYzMzJlYWMxYzhlOGMyNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yNTMsNyAr
MjUzLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgcmVzb2x2ZWREYXRhYmFzZURpcmVj
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT53ZWJTUUxEYXRh
YmFzZURpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZEphdmFTY3JpcHRD
b25maWd1cmF0aW9uRGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3Vy
YXRpb24tPmphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCk7IH0KICAgICBjb25zdCBT
dHJpbmcmIHJlc29sdmVkQ29va2llU3RvcmFnZUZpbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29s
dmVkQ29uZmlndXJhdGlvbi0+Y29va2llU3RvcmFnZUZpbGUoKTsgfQotICAgIGNvbnN0IFN0cmlu
ZyYgcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdmVkQ29uZmlndXJhdGlvbi0+aW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKTsgfQorICAg
IGNvbnN0IFN0cmluZyYgcmVzb2x2ZWRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x2ZWRDb25maWd1cmF0aW9uLT5pbmRleGVkREJEYXRhYmFzZURpcmVj
dG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+
c2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSgpOyB9CiAgICAgY29uc3QgU3RyaW5n
JiByZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVy
biBtX3Jlc29sdmVkQ29uZmlndXJhdGlvbi0+cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSgpOyB9CiAgICAgY29uc3QgU3RyaW5nJiByZXNvbHZlZEhTVFNTdG9yYWdlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZENvbmZpZ3VyYXRpb24tPmhzdHNTdG9yYWdlRGlyZWN0
b3J5KCk7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>