<?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>262960</bug_id>
          
          <creation_ts>2023-10-10 09:00:12 -0700</creation_ts>
          <short_desc>AX: Remove &quot;com.apple.iphone.axserver-systemwide&quot; sandbox exception</short_desc>
          <delta_ts>2023-10-13 10:29:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>tyler_w</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1984004</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-10 09:00:12 -0700</bug_when>
    <thetext>Remove &quot;com.apple.iphone.axserver-systemwide&quot; sandbox exception

&lt;rdar://problem/116387615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984005</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-10-10 09:00:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/116741512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984006</commentid>
    <comment_count>2</comment_count>
      <attachid>468150</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-10 09:06:16 -0700</bug_when>
    <thetext>Created attachment 468150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984111</commentid>
    <comment_count>3</comment_count>
      <attachid>468150</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-10-10 13:40:38 -0700</bug_when>
    <thetext>Comment on attachment 468150
Patch

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

&gt; Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm:96
&gt; +    auto page = document().page();

Document::page() returns a pointer, so I think this should be auto*.

&gt; Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm:109
&gt; +    if (stringNotification.isNull())

I know you didn&apos;t change this. But I wonder if this should check isEmpty() rather than isNull(). isEmpty() checks for null or empty string, not just null.

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1712
&gt; +    auto notification = String(notificationName);

Is this temporary value necessary? Or could we just pass notificationName right into relayAccessibilityNotification? I think there&apos;s an automatic NSString to String conversion.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:505
&gt; +    explicit AXRelayProcessSuspendedNotification(Ref&lt;WebPage&gt;, bool messageSuspendedAutomatically);

I think WebKit style prefers:

enum class MessageSuspendedAutomatically : bool { No, Yes };

Rather than using bools in these scenarios, as it&apos;s better documentation at the callsites.

Also I wonder if we should use a default value? Seems like MessageSuspendedAutomatically::Yes is the more common use, and more in line with what one might expect the behavior to be by default?

enum class MessageSuspendedAutomatically : bool { No, Yes };
class AXRelayProcessSuspendedNotification {
public:
    explicit AXRelayProcessSuspendedNotification(Ref&lt;WebPage&gt;, MessageSuspendedAutomatically = MessageSuspendedAutomatically::Yes);

Also the behavior that this flag controls feels more like &quot;AutomaticallySend::Yes&quot; / &quot;AutomaticallySend::No&quot; to me. But if you think the current name is more accurate, feel free to leave as-is.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:261
&gt; +    IPC::DataReference dataToken = IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;([notificationData bytes]), [notificationData length]);

https://developer.apple.com/documentation/foundation/nsdata/1410616-bytes?language=objc

&gt; If the length of the NSData object is 0, this property returns nil.

Do we need to guard against length zero? Or is it OK to construct IPC::DataReference with nil?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984239</commentid>
    <comment_count>4</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-11 01:00:08 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1712
&gt; &gt; +    auto notification = String(notificationName);
&gt; 
&gt; Is this temporary value necessary? Or could we just pass notificationName
&gt; right into relayAccessibilityNotification? I think there&apos;s an automatic
&gt; NSString to String conversion.
&gt; 

error: non-const lvalue reference to type &apos;String&apos; cannot bind to a value of unrelated type &apos;NSString *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984243</commentid>
    <comment_count>5</comment_count>
      <attachid>468170</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-11 01:37:15 -0700</bug_when>
    <thetext>Created attachment 468170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984294</commentid>
    <comment_count>6</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-10-11 07:56:37 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #5)
&gt; Created attachment 468170 [details]
&gt; Patch

diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h
index ad2b4c5d3bb3..eadcb44c2927 100644
--- a/Source/WebCore/accessibility/AXObjectCache.h
+++ b/Source/WebCore/accessibility/AXObjectCache.h
@@ -476,6 +476,10 @@ public:
     std::optional&lt;Vector&lt;AXID&gt;&gt; relatedObjectIDsFor(const AXCoreObject&amp;, AXRelationType);
     void updateRelations(Element&amp;, const QualifiedName&amp;);

+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData);

AG: const String&amp; ? The style checker may complain about having param names in the method declaration. Accessibility in the method name is unnecessary since this is an Accessibility class.
+#endif
+
 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
     void scheduleObjectRegionsUpdate(bool scheduleImmediately = false) { m_geometryManager-&gt;scheduleObjectRegionsUpdate(scheduleImmediately); }
     void willUpdateObjectRegions() { m_geometryManager-&gt;willUpdateObjectRegions(); }
diff --git a/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm b/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
index 5b2f9caab890..601d8bf41a92 100644
--- a/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
+++ b/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
@@ -29,8 +29,9 @@
 #if ENABLE(ACCESSIBILITY) &amp;&amp; PLATFORM(IOS_FAMILY)

 #import &quot;AccessibilityObject.h&quot;
-#import &quot;WebAccessibilityObjectWrapperIOS.h&quot;
+#import &quot;Chrome.h&quot;
 #import &quot;RenderObject.h&quot;
+#import &quot;WebAccessibilityObjectWrapperIOS.h&quot;

 #import &lt;wtf/RetainPtr.h&gt;

@@ -90,24 +91,30 @@ ASCIILiteral AXObjectCache::notificationPlatformName(AXNotification notification
     return name;
 }

+void AXObjectCache::relayAccessibilityNotification(String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData)
+{
+    auto* page = document().page();
+    if (!page)
+        return;
+
+    page-&gt;chrome().relayAccessibilityNotification(notificationName, notificationData);

AG: consider the more concise :

    if (auto* page = document().page())
        page-&gt;chrome().relayAccessibilityNotification(notificationName, notificationData);

+}
+
 void AXObjectCache::postPlatformNotification(AXCoreObject* object, AXNotification notification)
 {
     if (!object)
         return;

-    // iOS notifications must ultimately call UIKit UIAccessibilityPostNotification.
-    // But WebCore is not linked with UIKit. So a workaround is to override the wrapper&apos;s
-    // postNotification method in the system WebKitAccessibility bundle that does link UIKit.
-    auto notificationName = notificationPlatformName(notification);
-    if (notificationName.isNull())
+    auto stringNotification = AXObjectCache::notificationPlatformName(notification);

AG: remove AXObjectCache::.

+    if (stringNotification.isEmpty())
         return;

-    auto nsNotificationName = notificationName.createNSString();
-    [object-&gt;wrapper() postNotification:nsNotificationName.get()];
+    auto notificationName = stringNotification.createNSString();
+    [object-&gt;wrapper() accessibilityOverrideProcessNotification:notificationName.get()];

     // To simulate AX notifications for LayoutTests on the simulator, call
     // the wrapper&apos;s accessibilityPostedNotification.
-    [object-&gt;wrapper() accessibilityPostedNotification:nsNotificationName.get()];
+    [object-&gt;wrapper() accessibilityPostedNotification:notificationName.get()];
 }

 void AXObjectCache::postTextStateChangePlatformNotification(AccessibilityObject* object, const AXTextStateChangeIntent&amp;, const VisibleSelection&amp;)
diff --git a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.h b/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.h
index 6c6bb91f80c0..ea59521d7087 100644
--- a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.h
+++ b/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.h
@@ -76,7 +76,12 @@ static NSString * const UIAccessibilityAcceptedInlineTextCompletion = @&quot;UIAccess

 - (BOOL)isAttachment;

-- (void)postNotification:(NSString *)notificationName;
+// This interacts with Accessibility system to post process some notifications.

AG: is this &quot;postprocess some&quot; or &quot;post some process&quot; ?

+- (void)accessibilityOverrideProcessNotification:(NSString *)notificationName;
+
+// This is called by the Accessibility system to relay back to the chrome.
+- (void)handleNotificationRelayToChrome:(NSString *)notificationName notificationData:(NSData *)notificationData;
+
 @end

 #endif // ENABLE(ACCESSIBILITY) &amp;&amp; PLATFORM(IOS_FAMILY)
diff --git a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm b/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
index ab31938694ba..a625b47a02e8 100644
--- a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
+++ b/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
@@ -1687,7 +1687,7 @@ - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction

     if (result) {
         auto notificationName = AXObjectCache::notificationPlatformName(AXObjectCache::AXNotification::AXPageScrolled).createNSString();
-        [self postNotification:notificationName.get()];
+        [self accessibilityOverrideProcessNotification:notificationName.get()];

         CGPoint scrollPos = [self _accessibilityScrollPosition];
         NSString *testString = [NSString stringWithFormat:@&quot;AXScroll [position: %.2f %.2f]&quot;, scrollPos.x, scrollPos.y];
@@ -1698,6 +1698,21 @@ - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction
     return result;
 }

+- (void)accessibilityOverrideProcessNotification:(NSString *)notificationName
+{
+    // This is overriden by the Accessibility system to post-process notifications.

AG: overriden -&gt; overridden

+    // When it is done, it will call back into handleNotificationRelayToChrome.
+}
+
+- (void)handleNotificationRelayToChrome:(NSString *)notificationName notificationData:(NSData *)notificationData
+{
+    if (![self _prepareAccessibilityCall])
+        return;
+
+    auto notification = String(notificationName);
+    self.axBackingObject-&gt;axObjectCache()-&gt;relayAccessibilityNotification(notification, notificationData);

AG: don&apos;t need the notification temp, should be able to do :

    self.axBackingObject-&gt;axObjectCache()-&gt;relayAccessibilityNotification(notificationName, notificationData);

or

    self.axBackingObject-&gt;axObjectCache()-&gt;relayAccessibilityNotification({ notificationName }, notificationData);

since there is a String constructor that takes NSString.

+}
+
 - (CGRect)_accessibilityRelativeFrame
 {
     auto rect = FloatRect(snappedIntRect(self.axBackingObject-&gt;elementRect()));
@@ -2046,11 +2061,6 @@ - (id)_accessibilityParentForSubview:(id)subview
     return nil;
 }

-- (void)postNotification:(NSString *)notificationName
-{
-    // The UIKit accessibility wrapper will override and post appropriate notification.
-}
-
 // These will be used by the UIKit wrapper to calculate an appropriate description of scroll status.
 - (CGPoint)_accessibilityScrollPosition
 {
diff --git a/Source/WebCore/loader/EmptyClients.h b/Source/WebCore/loader/EmptyClients.h
index 07ae057e74fa..f57fa7ae0c41 100644
--- a/Source/WebCore/loader/EmptyClients.h
+++ b/Source/WebCore/loader/EmptyClients.h
@@ -117,6 +117,9 @@ class EmptyChromeClient : public ChromeClient {
     IntRect rootViewToScreen(const IntRect&amp; r) const final { return r; }
     IntPoint accessibilityScreenToRootView(const IntPoint&amp; p) const final { return p; };
     IntRect rootViewToAccessibilityScreen(const IntRect&amp; r) const final { return r; };
+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(const String&amp;, const RetainPtr&lt;NSData&gt;) const final { };

AG: const RetainPtr ? We are passing RetainPtr everywhere else. In many places in the code base we pass RetainPtr by ref, i.e., const RetainPtr&lt;T&gt;&amp;, but my understanding is that that is not necessary because RetainPtr is small enough that passing by value doesn&apos;t add any extra cost.

+#endif

     void didFinishLoadingImageForElement(HTMLImageElement&amp;) final { }

diff --git a/Source/WebCore/page/Chrome.cpp b/Source/WebCore/page/Chrome.cpp
index afb8a706774f..93bf528d1aa7 100644
--- a/Source/WebCore/page/Chrome.cpp
+++ b/Source/WebCore/page/Chrome.cpp
@@ -127,6 +127,13 @@ IntRect Chrome::rootViewToAccessibilityScreen(const IntRect&amp; rect) const
     return m_client-&gt;rootViewToAccessibilityScreen(rect);
 }

+#if PLATFORM(IOS_FAMILY)
+void Chrome::relayAccessibilityNotification(const String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData) const
+{
+    return m_client-&gt;relayAccessibilityNotification(notificationName, notificationData);
+}
+#endif
+
 PlatformPageClient Chrome::platformPageClient() const
 {
     return m_client-&gt;platformPageClient();
diff --git a/Source/WebCore/page/Chrome.h b/Source/WebCore/page/Chrome.h
index f80330581dbe..04c4e528f54f 100644
--- a/Source/WebCore/page/Chrome.h
+++ b/Source/WebCore/page/Chrome.h
@@ -105,6 +105,9 @@ public:
     IntPoint accessibilityScreenToRootView(const IntPoint&amp;) const override;
     IntRect rootViewToAccessibilityScreen(const IntRect&amp;) const override;
     PlatformPageClient platformPageClient() const override;
+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(const String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData) const override;

AG: style checker may complain about param names in the declaration.

+#endif
     void setCursor(const Cursor&amp;) override;
     void setCursorHiddenUntilMouseMoves(bool) override;

diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h
index 33293f37310d..4d97eb4436d1 100644
--- a/Source/WebCore/page/ChromeClient.h
+++ b/Source/WebCore/page/ChromeClient.h
@@ -225,6 +225,9 @@ public:
     virtual IntRect rootViewToScreen(const IntRect&amp;) const = 0;
     virtual IntPoint accessibilityScreenToRootView(const IntPoint&amp;) const = 0;
     virtual IntRect rootViewToAccessibilityScreen(const IntRect&amp;) const = 0;
+#if PLATFORM(IOS_FAMILY)
+    virtual void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;) const = 0;
+#endif

     virtual void didFinishLoadingImageForElement(HTMLImageElement&amp;) = 0;

diff --git a/Source/WebCore/platform/HostWindow.h b/Source/WebCore/platform/HostWindow.h
index cb652999f693..5b09629a8074 100644
--- a/Source/WebCore/platform/HostWindow.h
+++ b/Source/WebCore/platform/HostWindow.h
@@ -28,8 +28,13 @@
 #include &quot;GraphicsClient.h&quot;
 #include &quot;Widget.h&quot;

+#if PLATFORM(IOS_FAMILY)
+OBJC_CLASS NSData;
+#endif
+
 namespace WebCore {

+class DataSegment;
 class Cursor;

AG: I think the alphabetic ordering rule applies to class forward declarations, but maybe not.

 using FramesPerSecond = unsigned;
@@ -57,6 +62,9 @@ public:
     virtual IntRect rootViewToScreen(const IntRect&amp;) const = 0;
     virtual IntPoint accessibilityScreenToRootView(const IntPoint&amp;) const = 0;
     virtual IntRect rootViewToAccessibilityScreen(const IntRect&amp;) const = 0;
+#if PLATFORM(IOS_FAMILY)
+    virtual void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;) const = 0;
+#endif

     // Method for retrieving the native client of the page.
     virtual PlatformPageClient platformPageClient() const = 0;
diff --git a/Source/WebKit/Platform/IPC/Connection.cpp b/Source/WebKit/Platform/IPC/Connection.cpp
index 16a056308838..2c71768e45ca 100644
--- a/Source/WebKit/Platform/IPC/Connection.cpp
+++ b/Source/WebKit/Platform/IPC/Connection.cpp
@@ -797,8 +797,6 @@ auto Connection::waitForSyncReply(SyncRequestID syncRequestID, MessageName messa
 {
     timeout = timeoutRespectingIgnoreTimeoutsForTesting(timeout);

-    willSendSyncMessage(sendSyncOptions);
-
     bool timedOut = false;
     while (!timedOut) {
         // First, check if we have any messages that we need to process.
@@ -814,16 +812,12 @@ auto Connection::waitForSyncReply(SyncRequestID syncRequestID, MessageName messa
             ASSERT_UNUSED(syncRequestID, pendingSyncReply.syncRequestID == syncRequestID);

             // We found the sync reply.
-            if (pendingSyncReply.didReceiveReply) {
-                didReceiveSyncReply(sendSyncOptions);
+            if (pendingSyncReply.didReceiveReply)
                 return { WTFMove(pendingSyncReply.replyDecoder) };
-            }

             // The connection was closed.
-            if (!m_shouldWaitForSyncReplies) {
-                didReceiveSyncReply(sendSyncOptions);
+            if (!m_shouldWaitForSyncReplies)
                 return Error::InvalidConnection;
-            }
         }

         // Processing a sync message could cause the connection to be invalidated.
@@ -832,7 +826,6 @@ auto Connection::waitForSyncReply(SyncRequestID syncRequestID, MessageName messa
         // any more incoming messages.
         if (!isValid()) {
             RELEASE_LOG_ERROR(IPC, &quot;Connection::waitForSyncReply: Connection no longer valid, id=%&quot; PRIu64, syncRequestID.toUInt64());
-            didReceiveSyncReply(sendSyncOptions);
             return Error::InvalidConnection;
         }

@@ -848,8 +841,6 @@ auto Connection::waitForSyncReply(SyncRequestID syncRequestID, MessageName messa
     RELEASE_LOG_ERROR(IPC, &quot;Connection::waitForSyncReply: Timed-out while waiting for reply for %s, id=%&quot; PRIu64, description(messageName), syncRequestID.toUInt64());
 #endif

-    didReceiveSyncReply(sendSyncOptions);
-
     return Error::Timeout;
 }

diff --git a/Source/WebKit/Platform/IPC/Connection.h b/Source/WebKit/Platform/IPC/Connection.h
index c63bbe26d54a..fcff8198af95 100644
--- a/Source/WebKit/Platform/IPC/Connection.h
+++ b/Source/WebKit/Platform/IPC/Connection.h
@@ -85,11 +85,9 @@ enum class SendOption : uint8_t {
 };

 enum class SendSyncOption : uint8_t {
-    // Use this to inform that this sync call will suspend this process until the user responds with input.
-    InformPlatformProcessWillSuspend = 1 &lt;&lt; 0,
-    UseFullySynchronousModeForTesting = 1 &lt;&lt; 1,
-    ForceDispatchWhenDestinationIsWaitingForUnboundedSyncReply = 1 &lt;&lt; 2,
-    MaintainOrderingWithAsyncMessages = 1 &lt;&lt; 3,
+    UseFullySynchronousModeForTesting = 1 &lt;&lt; 0,
+    ForceDispatchWhenDestinationIsWaitingForUnboundedSyncReply = 1 &lt;&lt; 1,
+    MaintainOrderingWithAsyncMessages = 1 &lt;&lt; 2,
 };

 enum class WaitForOption {
@@ -530,9 +528,6 @@ private:
     void enqueueIncomingMessage(std::unique_ptr&lt;Decoder&gt;) WTF_REQUIRES_LOCK(m_incomingMessagesLock);
     size_t incomingMessagesDispatchingBatchSize() const;

-    void willSendSyncMessage(OptionSet&lt;SendSyncOption&gt;);
-    void didReceiveSyncReply(OptionSet&lt;SendSyncOption&gt;);
-
     Timeout timeoutRespectingIgnoreTimeoutsForTesting(Timeout) const;

 #if PLATFORM(COCOA)
@@ -899,6 +894,4 @@ private:
     static std::atomic&lt;unsigned&gt; unboundedSynchronousIPCCount;
 };

-void AccessibilityProcessSuspendedNotification(bool suspended);
-
 } // namespace IPC
diff --git a/Source/WebKit/Platform/IPC/cocoa/ConnectionCocoa.mm b/Source/WebKit/Platform/IPC/cocoa/ConnectionCocoa.mm
index ee92a85292d2..f6ef30eb4717 100644
--- a/Source/WebKit/Platform/IPC/cocoa/ConnectionCocoa.mm
+++ b/Source/WebKit/Platform/IPC/cocoa/ConnectionCocoa.mm
@@ -49,25 +49,9 @@

 #if PLATFORM(IOS_FAMILY)
 #import &quot;ProcessAssertion.h&quot;
-#import &lt;UIKit/UIAccessibility.h&gt;

-#if USE(APPLE_INTERNAL_SDK)
-#import &lt;AXRuntime/AXDefines.h&gt;
-#import &lt;AXRuntime/AXNotificationConstants.h&gt;
-#else
-#define kAXPidStatusChangedNotification 0
 #endif

-#endif
-
-#if PLATFORM(MAC)
-
-#import &quot;ApplicationServicesSPI.h&quot;
-
-extern &quot;C&quot; AXError _AXUIElementNotifyProcessSuspendStatus(AXSuspendStatus);
-
-#endif // PLATFORM(MAC)
-
 namespace IPC {

 static const size_t inlineMessageMaxSize = 4096;
@@ -590,29 +574,6 @@ bool Connection::kill()
     return false;
 }

-void AccessibilityProcessSuspendedNotification(bool suspended)
-{
-#if PLATFORM(MAC)
-    _AXUIElementNotifyProcessSuspendStatus(suspended ? AXSuspendStatusSuspended : AXSuspendStatusRunning);
-#elif PLATFORM(IOS_FAMILY)
-    UIAccessibilityPostNotification(kAXPidStatusChangedNotification, @{ @&quot;pid&quot; : @(getpid()), @&quot;suspended&quot; : @(suspended) });
-#else
-    UNUSED_PARAM(suspended);
-#endif
-}
-
-void Connection::willSendSyncMessage(OptionSet&lt;SendSyncOption&gt; sendSyncOptions)
-{
-    if (sendSyncOptions.contains(IPC::SendSyncOption::InformPlatformProcessWillSuspend) &amp;&amp; WebCore::AXObjectCache::accessibilityEnabled())
-        AccessibilityProcessSuspendedNotification(true);
-}
-
-void Connection::didReceiveSyncReply(OptionSet&lt;SendSyncOption&gt; sendSyncOptions)
-{
-    if (sendSyncOptions.contains(IPC::SendSyncOption::InformPlatformProcessWillSuspend) &amp;&amp; WebCore::AXObjectCache::accessibilityEnabled())
-        AccessibilityProcessSuspendedNotification(false);
-}
-
 pid_t Connection::remoteProcessID() const
 {
     if (!m_xpcConnection)
diff --git a/Source/WebKit/Platform/cocoa/CocoaImage.mm b/Source/WebKit/Platform/cocoa/CocoaImage.mm
index 3eb9b1da2fe8..1ed30df7f6c9 100644
--- a/Source/WebKit/Platform/cocoa/CocoaImage.mm
+++ b/Source/WebKit/Platform/cocoa/CocoaImage.mm
@@ -34,6 +34,8 @@
 #import &lt;CoreServices/CoreServices.h&gt;
 #endif

+#import &lt;ImageIO/ImageIO.h&gt;
+
 namespace WebKit {

 RetainPtr&lt;NSData&gt; transcode(CGImageRef image, CFStringRef typeIdentifier)
diff --git a/Source/WebKit/Platform/spi/ios/UIKitSPI.h b/Source/WebKit/Platform/spi/ios/UIKitSPI.h
index 2bd7da136dc9..091d04a805e0 100644
--- a/Source/WebKit/Platform/spi/ios/UIKitSPI.h
+++ b/Source/WebKit/Platform/spi/ios/UIKitSPI.h
@@ -1106,6 +1106,7 @@ typedef NS_ENUM(NSUInteger, _UIScrollDeviceCategory) {
 - (UIScrollView *)_scroller;
 - (CGPoint)accessibilityConvertPointFromSceneReferenceCoordinates:(CGPoint)point;
 - (CGRect)accessibilityConvertRectToSceneReferenceCoordinates:(CGRect)rect;
+- (void)accessibilityRelayNotification:(NSString *)notificationName notificationData:(NSData *)notificationData;
 - (UIRectEdge)_edgesApplyingSafeAreaInsetsToContentInset;
 @end

diff --git a/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in b/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in
index 83c72bc44783..b6a5d6b52246 100644
--- a/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in
+++ b/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb.in
@@ -927,7 +927,6 @@
         (extension &quot;com.apple.webkit.extension.mach&quot;)
         (global-name
             &quot;com.apple.frontboard.systemappservices&quot;
-            &quot;com.apple.iphone.axserver-systemwide&quot;
             &quot;com.apple.mobileassetd.v2&quot;
             &quot;com.apple.mobilegestalt.xpc&quot;)))

diff --git a/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm b/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm
index 9d67dcaf22c9..ef84f288960c 100644
--- a/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm
+++ b/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm
@@ -253,7 +253,7 @@ void WebProcessProxy::unblockAccessibilityServerIfNeeded()

     Vector&lt;SandboxExtension::Handle&gt; handleArray;
 #if PLATFORM(IOS_FAMILY)
-    handleArray = SandboxExtension::createHandlesForMachLookup({ &quot;com.apple.iphone.axserver-systemwide&quot;_s, &quot;com.apple.frontboard.systemappservices&quot;_s }, auditToken(), SandboxExtension::MachBootstrapOptions::EnableMachBootstrap);
+    handleArray = SandboxExtension::createHandlesForMachLookup({ &quot;com.apple.frontboard.systemappservices&quot;_s }, auditToken(), SandboxExtension::MachBootstrapOptions::EnableMachBootstrap);
 #endif

     send(Messages::WebProcess::UnblockServicesRequiredByAccessibility(handleArray), 0);
diff --git a/Source/WebKit/UIProcess/PageClient.h b/Source/WebKit/UIProcess/PageClient.h
index e5ceb5446e23..1d0859e9dc00 100644
--- a/Source/WebKit/UIProcess/PageClient.h
+++ b/Source/WebKit/UIProcess/PageClient.h
@@ -346,6 +346,9 @@ public:
     virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&amp;) = 0;
     virtual WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&amp;) = 0;
     virtual WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&amp;) = 0;
+#if PLATFORM(IOS_FAMILY)
+    virtual void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;) = 0;
+#endif
 #if PLATFORM(MAC)
     virtual WebCore::IntRect rootViewToWindow(const WebCore::IntRect&amp;) = 0;
 #endif
diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h
index fbc563943004..7e496d9b14d9 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.h
+++ b/Source/WebKit/UIProcess/WebPageProxy.h
@@ -2397,6 +2397,9 @@ private:
     void rootViewToScreen(const WebCore::IntRect&amp; viewRect, CompletionHandler&lt;void(const WebCore::IntRect&amp;)&gt;&amp;&amp;);
     void accessibilityScreenToRootView(const WebCore::IntPoint&amp; screenPoint, CompletionHandler&lt;void(WebCore::IntPoint)&gt;&amp;&amp;);
     void rootViewToAccessibilityScreen(const WebCore::IntRect&amp; viewRect, CompletionHandler&lt;void(WebCore::IntRect)&gt;&amp;&amp;);
+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(const String&amp;, const IPC::DataReference&amp;);
+#endif
     void runBeforeUnloadConfirmPanel(WebCore::FrameIdentifier, FrameInfoData&amp;&amp;, const String&amp; message, CompletionHandler&lt;void(bool)&gt;&amp;&amp;);
     void didChangeViewportProperties(const WebCore::ViewportAttributes&amp;);
     void pageDidScroll(const WebCore::IntPoint&amp;);
diff --git a/Source/WebKit/UIProcess/WebPageProxy.messages.in b/Source/WebKit/UIProcess/WebPageProxy.messages.in
index 8670a5cd09d9..0d325d864cd2 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.messages.in
+++ b/Source/WebKit/UIProcess/WebPageProxy.messages.in
@@ -53,6 +53,9 @@ messages -&gt; WebPageProxy {
     RootViewToScreen(WebCore::IntRect rect) -&gt; (WebCore::IntRect screenFrame) Synchronous
     AccessibilityScreenToRootView(WebCore::IntPoint screenPoint) -&gt; (WebCore::IntPoint windowPoint) Synchronous
     RootViewToAccessibilityScreen(WebCore::IntRect rect) -&gt; (WebCore::IntRect screenFrame) Synchronous
+#if PLATFORM(IOS_FAMILY)
+    RelayAccessibilityNotification(String notificationName, IPC::DataReference notificationData)
+#endif

 #if PLATFORM(COCOA) || PLATFORM(GTK)
     ShowValidationMessage(WebCore::IntRect anchorRect, String message)
diff --git a/Source/WebKit/UIProcess/ios/PageClientImplIOS.h b/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
index d564769b4eb6..2886f12e2208 100644
--- a/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
+++ b/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
@@ -113,6 +113,7 @@ private:
     WebCore::IntRect rootViewToScreen(const WebCore::IntRect&amp;) override;
     WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&amp;) override;
     WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&amp;) override;
+    void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;) override;
     void doneWithKeyEvent(const NativeWebKeyboardEvent&amp;, bool wasEventHandled) override;
 #if ENABLE(TOUCH_EVENTS)
     void doneWithTouchEvent(const NativeWebTouchEvent&amp;, bool wasEventHandled) override;
diff --git a/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm b/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
index a5d22fb2ded1..e3ecd2061719 100644
--- a/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
+++ b/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
@@ -453,7 +453,14 @@ IntPoint PageClientImpl::accessibilityScreenToRootView(const IntPoint&amp; point)
         rootViewPoint = [contentView accessibilityConvertPointFromSceneReferenceCoordinates:rootViewPoint];
     return IntPoint(rootViewPoint);
 }
-
+
+void PageClientImpl::relayAccessibilityNotification(const String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData)
+{
+    auto contentView = this-&gt;contentView();
+    if ([contentView respondsToSelector:@selector(accessibilityRelayNotification:notificationData:)])
+        [contentView accessibilityRelayNotification:notificationName notificationData:notificationData.get()];
+}
+
 IntRect PageClientImpl::rootViewToAccessibilityScreen(const IntRect&amp; rect)
 {
     CGRect rootViewRect = rect;
diff --git a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
index ea5afc0edd5a..79970f89a144 100644
--- a/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
+++ b/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
@@ -776,6 +776,13 @@ void WebPageProxy::registerWebProcessAccessibilityToken(const IPC::DataReference
     pageClient().accessibilityWebProcessTokenReceived(data);
 }

+
+void WebPageProxy::relayAccessibilityNotification(const String&amp; notificationName, const IPC::DataReference&amp; data)
+{
+    NSData *notificationData = [NSData dataWithBytes:data.data() length:data.size()];
+    pageClient().relayAccessibilityNotification(notificationName, notificationData);
+}
+
 void WebPageProxy::assistiveTechnologyMakeFirstResponder()
 {
     pageClient().assistiveTechnologyMakeFirstResponder();
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
index 6318c5b65ec0..7c86e4a3cde8 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
@@ -161,6 +161,24 @@ namespace WebKit {
 using namespace WebCore;
 using namespace HTMLNames;

+AXRelayProcessSuspendedNotification::AXRelayProcessSuspendedNotification(Ref&lt;WebPage&gt; page, AutomaticallySend automaticallySend)
+    : m_page(page)
+    , m_automaticallySend(automaticallySend)
+{
+    if (m_automaticallySend == AutomaticallySend::Yes)
+        sendProcessSuspendMessage(true);
+}
+
+AXRelayProcessSuspendedNotification::~AXRelayProcessSuspendedNotification()
+{
+    if (m_automaticallySend == AutomaticallySend::Yes)
+        sendProcessSuspendMessage(false);
+}
+
+#if !PLATFORM(COCOA)
+void AXRelayProcessSuspendedNotification::sendProcessSuspendMessage(bool) { }
+#endif
+
 WebChromeClient::WebChromeClient(WebPage&amp; page)
     : m_page(page)
 {
@@ -322,7 +340,7 @@ Page* WebChromeClient::createWindow(LocalFrame&amp; frame, const WindowFeatures&amp; win

     auto webFrame = WebFrame::fromCoreFrame(frame);

-    auto sendResult = webProcess.parentProcessConnection()-&gt;sendSync(Messages::WebPageProxy::CreateNewPage(webFrame-&gt;info(), webFrame-&gt;page()-&gt;webPageProxyIdentifier(), navigationAction.resourceRequest(), windowFeatures, navigationActionData), page().identifier(), IPC::Timeout::infinity(), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages, IPC::SendSyncOption::InformPlatformProcessWillSuspend });
+    auto sendResult = webProcess.parentProcessConnection()-&gt;sendSync(Messages::WebPageProxy::CreateNewPage(webFrame-&gt;info(), webFrame-&gt;page()-&gt;webPageProxyIdentifier(), navigationAction.resourceRequest(), windowFeatures, navigationActionData), page().identifier(), IPC::Timeout::infinity(), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages });
     if (!sendResult.succeeded())
         return nullptr;

@@ -457,7 +475,10 @@ bool WebChromeClient::runBeforeUnloadConfirmPanel(const String&amp; message, LocalFr

     HangDetectionDisabler hangDetectionDisabler;

-    auto sendResult = protectedPage()-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunBeforeUnloadConfirmPanel(webFrame-&gt;frameID(), webFrame-&gt;info(), message), IPC::SendSyncOption::InformPlatformProcessWillSuspend);
+    auto page = protectedPage();
+    auto relay = AXRelayProcessSuspendedNotification(page);
+
+    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunBeforeUnloadConfirmPanel(webFrame-&gt;frameID(), webFrame-&gt;info(), message));
     auto [shouldClose] = sendResult.takeReplyOr(false);
     return shouldClose;
 }
@@ -505,7 +526,9 @@ void WebChromeClient::runJavaScriptAlert(LocalFrame&amp; frame, const String&amp; alertT
     HangDetectionDisabler hangDetectionDisabler;
     IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;

-    page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptAlert(webFrame-&gt;frameID(), webFrame-&gt;info(), alertText), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages, IPC::SendSyncOption::InformPlatformProcessWillSuspend });
+    auto relay = AXRelayProcessSuspendedNotification(page);
+
+    page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptAlert(webFrame-&gt;frameID(), webFrame-&gt;info(), alertText), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages });
 }

 bool WebChromeClient::runJavaScriptConfirm(LocalFrame&amp; frame, const String&amp; message)
@@ -524,7 +547,9 @@ bool WebChromeClient::runJavaScriptConfirm(LocalFrame&amp; frame, const String&amp; mess
     HangDetectionDisabler hangDetectionDisabler;
     IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;

-    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptConfirm(webFrame-&gt;frameID(), webFrame-&gt;info(), message), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages, IPC::SendSyncOption::InformPlatformProcessWillSuspend });
+    auto relay = AXRelayProcessSuspendedNotification(page);
+
+    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptConfirm(webFrame-&gt;frameID(), webFrame-&gt;info(), message), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages });
     auto [result] = sendResult.takeReplyOr(false);
     return result;
 }
@@ -545,7 +570,9 @@ bool WebChromeClient::runJavaScriptPrompt(LocalFrame&amp; frame, const String&amp; messa
     HangDetectionDisabler hangDetectionDisabler;
     IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;

-    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptPrompt(webFrame-&gt;frameID(), webFrame-&gt;info(), message, defaultValue), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages, IPC::SendSyncOption::InformPlatformProcessWillSuspend });
+    auto relay = AXRelayProcessSuspendedNotification(page);
+
+    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::RunJavaScriptPrompt(webFrame-&gt;frameID(), webFrame-&gt;info(), message, defaultValue), { IPC::SendSyncOption::MaintainOrderingWithAsyncMessages });
     if (!sendResult.succeeded())
         return false;

@@ -778,9 +805,11 @@ void WebChromeClient::print(LocalFrame&amp; frame, const StringWithDirection&amp; title)
 #endif

     auto truncatedTitle = truncateFromEnd(title, maxTitleLength);
+    auto page = protectedPage();
+    auto relay = AXRelayProcessSuspendedNotification(page);

     IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;
-    protectedPage()-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::PrintFrame(webFrame-&gt;frameID(), truncatedTitle.string, pdfFirstPageSize), IPC::SendSyncOption::InformPlatformProcessWillSuspend);
+    page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::PrintFrame(webFrame-&gt;frameID(), truncatedTitle.string, pdfFirstPageSize));
 }

 void WebChromeClient::reachedMaxAppCacheSize(int64_t)
@@ -800,7 +829,9 @@ void WebChromeClient::reachedApplicationCacheOriginQuota(SecurityOrigin&amp; origin,
     if (!cacheStorage.calculateQuotaForOrigin(origin, currentQuota))
         return;

-    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::ReachedApplicationCacheOriginQuota(origin.data().databaseIdentifier(), currentQuota, totalBytesNeeded), IPC::SendSyncOption::InformPlatformProcessWillSuspend);
+    auto relay = AXRelayProcessSuspendedNotification(page);
+
+    auto sendResult = page-&gt;sendSyncWithDelayedReply(Messages::WebPageProxy::ReachedApplicationCacheOriginQuota(origin.data().databaseIdentifier(), currentQuota, totalBytesNeeded));
     auto [newQuota] = sendResult.takeReplyOr(0);

     cacheStorage.storeUpdatedQuotaForOrigin(&amp;origin, newQuota);
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
index c8c287c5ad62..932d303889a4 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
@@ -52,6 +52,10 @@ public:
     WebPage&amp; page() const { return m_page.get(); }
     Ref&lt;WebPage&gt; protectedPage() const;

+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;) const final;
+#endif
+
 private:
     void chromeDestroyed() final;

@@ -496,4 +500,17 @@ private:
     CheckedRef&lt;WebPage&gt; m_page;
 };

+class AXRelayProcessSuspendedNotification {
+public:
+    enum class AutomaticallySend : bool { No, Yes };
+
+    explicit AXRelayProcessSuspendedNotification(Ref&lt;WebPage&gt;, AutomaticallySend = AutomaticallySend::Yes);
+    ~AXRelayProcessSuspendedNotification();
+
+    void sendProcessSuspendMessage(bool suspended);
+private:
+    CheckedRef&lt;WebPage&gt; m_page;
+    AutomaticallySend m_automaticallySend;
+};
+
 } // namespace WebKit
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClientCocoa.mm b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClientCocoa.mm
index 4413010349e8..ea4ac074fd2c 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClientCocoa.mm
+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClientCocoa.mm
@@ -29,8 +29,18 @@
 #if PLATFORM(COCOA)

 #import &quot;WebIconUtilities.h&quot;
+#import &quot;WebPage.h&quot;
+#import &lt;WebCore/AXObjectCache.h&gt;
 #import &lt;WebCore/Icon.h&gt;

+#if PLATFORM(MAC)
+
+#import &quot;ApplicationServicesSPI.h&quot;
+
+extern &quot;C&quot; AXError _AXUIElementNotifyProcessSuspendStatus(AXSuspendStatus);
+
+#endif // PLATFORM(MAC)
+
 namespace WebKit {
 using namespace WebCore;

@@ -39,6 +49,20 @@ RefPtr&lt;Icon&gt; WebChromeClient::createIconForFiles(const Vector&lt;String&gt;&amp; filenames
     return Icon::create(iconForFiles(filenames).get());
 }

+void AXRelayProcessSuspendedNotification::sendProcessSuspendMessage(bool suspended)
+{
+    if (!AXObjectCache::accessibilityEnabled())
+        return;
+
+#if PLATFORM(MAC)
+    _AXUIElementNotifyProcessSuspendStatus(suspended ? AXSuspendStatusSuspended : AXSuspendStatusRunning);
+#else
+    NSDictionary *message = @{ @&quot;pid&quot; : @(getpid()), @&quot;suspended&quot; : @(suspended) };
+    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:message requiringSecureCoding:YES error:nil];
+    m_page-&gt;relayAccessibilityNotification(&quot;AXProcessSuspended&quot;_s, data);
+#endif
+}
+
 } // namespace WebKit

 #endif // PLATFORM(COCOA)
diff --git a/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm b/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm
index f75d0c11764b..77d242d196ba 100644
--- a/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm
+++ b/Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm
@@ -179,6 +179,11 @@ bool WebChromeClient::showDataDetectorsUIForElement(const Element&amp; element, cons
     return true;
 }

+void WebChromeClient::relayAccessibilityNotification(const String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData) const
+{
+    return protectedPage()-&gt;relayAccessibilityNotification(notificationName, notificationData);
+}
+
 } // namespace WebKit

 #endif // PLATFORM(IOS_FAMILY)
diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
index 3cace16bf6bd..7f3c7b954452 100644
--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
@@ -7896,7 +7896,10 @@ WebCore::DOMPasteAccessResponse WebPage::requestDOMPasteAccess(WebCore::DOMPaste
     // should be removed once &lt;rdar://problem/16207002&gt; is resolved.
     preemptivelySendAutocorrectionContext();
 #endif
-    auto sendResult = sendSyncWithDelayedReply(Messages::WebPageProxy::RequestDOMPasteAccess(pasteAccessCategory, rectForElementAtInteractionLocation(), originIdentifier), IPC::SendSyncOption::InformPlatformProcessWillSuspend);
+
+    AXRelayProcessSuspendedNotification(*this);
+
+    auto sendResult = sendSyncWithDelayedReply(Messages::WebPageProxy::RequestDOMPasteAccess(pasteAccessCategory, rectForElementAtInteractionLocation(), originIdentifier));
     auto [response] = sendResult.takeReplyOr(WebCore::DOMPasteAccessResponse::DeniedForGesture);
     return response;
 }
diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h
index 3b09a2144b59..bceb2cd479b5 100644
--- a/Source/WebKit/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h
@@ -773,6 +773,9 @@ public:
     WebCore::IntRect rootViewToScreen(const WebCore::IntRect&amp;);
     WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&amp;);
     WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&amp;);
+#if PLATFORM(IOS_FAMILY)
+    void relayAccessibilityNotification(const String&amp;, RetainPtr&lt;NSData&gt;);
+#endif

     RefPtr&lt;WebImage&gt; scaledSnapshotWithOptions(const WebCore::IntRect&amp;, double additionalScaleFactor, SnapshotOptions);

diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
index 205a166b8bb4..07db0b8e9f50 100644
--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
@@ -256,6 +256,14 @@ RetainPtr&lt;NSData&gt; WebPage::accessibilityRemoteTokenData() const
     return newAccessibilityRemoteToken([NSUUID UUID]);
 }

+void WebPage::relayAccessibilityNotification(const String&amp; notificationName, RetainPtr&lt;NSData&gt; notificationData)
+{
+    IPC::DataReference dataToken = { };

AG: do you need to explicitly initialize IPC::DataReference, I would think that the constructor would do it for you.

+    if ([notificationData length])
+        dataToken = IPC::DataReference(reinterpret_cast&lt;const uint8_t*&gt;([notificationData bytes]), [notificationData length]);
+    send(Messages::WebPageProxy::RelayAccessibilityNotification(notificationName, dataToken));
+}
+
 static void computeEditableRootHasContentAndPlainText(const VisibleSelection&amp; selection, EditorState::PostLayoutData&amp; data)
 {
     data.hasContent = false;
diff --git a/Source/WebKit/WebProcess/WebProcess.cpp b/Source/WebKit/WebProcess/WebProcess.cpp
index 42e2adcaa28b..c9fc6ad24d43 100644
--- a/Source/WebKit/WebProcess/WebProcess.cpp
+++ b/Source/WebKit/WebProcess/WebProcess.cpp
@@ -52,6 +52,7 @@
 #include &quot;WebBadgeClient.h&quot;
 #include &quot;WebBroadcastChannelRegistry.h&quot;
 #include &quot;WebCacheStorageProvider.h&quot;
+#include &quot;WebChromeClient.h&quot;
 #include &quot;WebConnectionToUIProcess.h&quot;
 #include &quot;WebCookieJar.h&quot;
 #include &quot;WebCoreArgumentCoders.h&quot;
@@ -686,7 +687,8 @@ void WebProcess::setIsInProcessCache(bool isInProcessCache)

     updateProcessName(IsInProcessInitialization::No);

-    IPC::AccessibilityProcessSuspendedNotification(isInProcessCache);
+    if (auto* webPage = focusedWebPage())
+        AXRelayProcessSuspendedNotification(*webPage, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(isInProcessCache);

AG: do we need to notify of suspended process only for the focused page? Wonder if VO holding a reference to an object in a page that is no longer focused is waiting for a response.

 #else
     UNUSED_PARAM(isInProcessCache);
 #endif
@@ -1615,7 +1617,8 @@ void WebProcess::prepareToSuspend(bool isSuspensionImminent, MonotonicTime estim
 #endif

 #if PLATFORM(IOS_FAMILY)
-    IPC::AccessibilityProcessSuspendedNotification(true);
+    if (auto* webPage = focusedWebPage())
+        AXRelayProcessSuspendedNotification(*webPage, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(true);

     updateFreezerStatus();
 #endif

@@ -1680,7 +1683,8 @@ void WebProcess::processDidResume()
 #endif

 #if PLATFORM(IOS_FAMILY)
-    IPC::AccessibilityProcessSuspendedNotification(false);
+    if (auto* webPage = focusedWebPage())
+        AXRelayProcessSuspendedNotification(*webPage, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(false);
 #endif

 #if ENABLE(VIDEO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984586</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-12 07:09:38 -0700</bug_when>
    <thetext>-    IPC::AccessibilityProcessSuspendedNotification(isInProcessCache);
+    if (auto* webPage = focusedWebPage())
+        AXRelayProcessSuspendedNotification(*webPage, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(isInProcessCache);

AG: do we need to notify of suspended process only for the focused page? Wonder if VO holding a reference to an object in a page that is no longer focused is waiting for a response.


CF: As long as these pages are in the same process, it doesn&apos;t matter. On the other side, it will just get the pid() and send that to clients</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984592</commentid>
    <comment_count>8</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-10-12 07:37:44 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #7)
&gt; -    IPC::AccessibilityProcessSuspendedNotification(isInProcessCache);
&gt; +    if (auto* webPage = focusedWebPage())
&gt; +        AXRelayProcessSuspendedNotification(*webPage,
&gt; AXRelayProcessSuspendedNotification::AutomaticallySend::No).
&gt; sendProcessSuspendMessage(isInProcessCache);
&gt; 
&gt; AG: do we need to notify of suspended process only for the focused page?
&gt; Wonder if VO holding a reference to an object in a page that is no longer
&gt; focused is waiting for a response.
&gt; 
&gt; 
&gt; CF: As long as these pages are in the same process, it doesn&apos;t matter. On
&gt; the other side, it will just get the pid() and send that to clients

AG: can we then just use any page in m_pageMap. Concerned that

auto* webPage = focusedWebPage()

may be null, in which case we won&apos;t send the notification, correct? Plus that it would save the trouble of determining the focused page. But if you still want to use the focused page if it is exists, fallback to any page if it doesn&apos;t have a focused one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984594</commentid>
    <comment_count>9</comment_count>
      <attachid>468189</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-12 07:50:53 -0700</bug_when>
    <thetext>Created attachment 468189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984822</commentid>
    <comment_count>10</comment_count>
      <attachid>468200</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-12 23:59:09 -0700</bug_when>
    <thetext>Created attachment 468200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984852</commentid>
    <comment_count>11</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-10-13 04:38:27 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #10)
&gt; Created attachment 468200 [details]
&gt; Patch

+void WebProcess::accessibilityRelayProcessSuspended(bool suspended)
+{
+    if (m_pageMap.isEmpty())
+        return;
+
+    // Take the first webpage. We only need to have the process on the other side relay this for the WebProcess.
+    auto* webPage = m_pageMap.values().begin().get()-&gt;get();
+    AXRelayProcessSuspendedNotification(*webPage, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(suspended);

AG:    AXRelayProcessSuspendedNotification(*m_pageMap.begin().value, AXRelayProcessSuspendedNotification::AutomaticallySend::No).sendProcessSuspendMessage(suspended);

+}

No need to r? again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984916</commentid>
    <comment_count>12</comment_count>
      <attachid>468200</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-10-13 09:34:27 -0700</bug_when>
    <thetext>Comment on attachment 468200
Patch

this WPE crashing seems unrelated to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1984931</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-10-13 10:29:00 -0700</bug_when>
    <thetext>Committed 269308@main (fc59e6e527ce): &lt;https://commits.webkit.org/269308@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 468200.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468150</attachid>
            <date>2023-10-10 09:06:16 -0700</date>
            <delta_ts>2023-10-11 01:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-262960-20231010090615.patch</filename>
            <type>text/plain</type>
            <size>43971</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">RnJvbSBmN2I2OGY2NzVhYTdlZDA4MTczMWMwYjY1ZWI2ZWY2NmU1N2VmNmM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpcyBGbGVpemFjaCA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4K
RGF0ZTogVHVlLCAxMCBPY3QgMjAyMyAwODo1OTozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFY
OiBSZW1vdmUgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXItc3lzdGVtd2lkZSIgc2FuZGJveAog
ZXhjZXB0aW9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI5NjAg
cmRhcjovLzExNjM4NzYxNQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpSZW1vdmUgdGhl
IGV4Y2VwdGlvbiB0byBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gd2lkZSBzZXJ2ZXIgZnJvbSBXZWJD
b250ZW50LgoKSW5zdGVhZCByZWxheSBub3RpZmljYXRpb25zIGJhY2sgdG8gdGhlIENsaWVudCBz
byB0aGF0IHRoYXQgcHJvY2VzcyBjYW4gcmVsYXkgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIHRo
ZSBzeXN0ZW0gc2VydmVyLgoKVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZSBJbmZvcm1TdXNw
ZW5kIG9wdGlvbiBpbiBDb25uZWN0aW9uIGJlY2F1c2UgaXQgY2FuIGJlIGhhbmRsZWQgYXQgYSBo
aWdoZXIgbGV2ZWwuCgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1Mu
bW06CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24pOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToK
KiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5U2Nyb2xsOl0pOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOl0pOgooLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBoYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21l
Om5vdGlmaWNhdGlvbkRhdGE6XSk6CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBv
c3ROb3RpZmljYXRpb246XSk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcDoKKFdlYkNvcmU6OkNo
cm9tZTo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIGNvbnN0KToKKiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmg6
CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oOgoqIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgooSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3lu
Y1JlcGx5KToKKiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6CiogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tOgooSVBDOjpB
Y2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6IERlbGV0ZWQuCihJUEM6
OkNvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UpOiBEZWxldGVkLgooSVBDOjpDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKiBTb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94
UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbjoKKiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKToKKiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CiogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbik6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToK
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgoq
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24pOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1
c3BlbmRlZE5vdGlmaWNhdGlvbjo6fkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9j
ZXNzU3VzcGVuZE1lc3NhZ2UpOgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRv
dyk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgooV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpwcmludCk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UpOgoqIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
OgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
biBjb25zdCk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CihXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CiogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgooV2ViS2l0OjpXZWJQYWdlOjpyZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24pOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CihXZWJL
aXQ6OldlYlByb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgooV2ViS2l0OjpXZWJQcm9jZXNzOjpw
cm9jZXNzRGlkUmVzdW1lKToKKiBTb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRJT1MuaDoKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCAgfCAgNCArKwogLi4uL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0gICAgIHwgMjUgKysrKysrLS0tLQogLi4uL2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5oICAgIHwgIDcgKystCiAuLi4vaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tICAgfCAyMiArKysrKystLS0KIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaCAgICAgICAgICB8ICAzICsrCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAgICAgICAgICAgICAgICAgfCAgNSArKwogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaCAgICAgICAgICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmggICAgICAgICAgICB8ICAzICsrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0
V2luZG93LmggICAgICAgICAgfCAgOCArKysrCiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmNwcCAgICAgfCAxMyArLS0tLS0KIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uaCAgICAgICB8IDEzICsrLS0tLQogLi4uL1BsYXRmb3JtL0lQQy9jb2NvYS9D
b25uZWN0aW9uQ29jb2EubW0gICAgIHwgMzkgLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggICAgIHwgIDEgKwogLi4uL2lvcy9jb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4gICAgIHwgIDEgLQogLi4uL1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSAgIHwgIDIgKy0KIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaCAgICAgICAgICB8ICAzICsrCiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCAgICAgICAgfCAgMyArKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluIHwgIDMgKysKIC4uLi9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oICB8ICAxICsKIC4uLi9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbSB8ICA5ICsrKy0KIC4uLi9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0gICB8ICA3ICsrKwogLi4uL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAgICAgICAgIHwgNDYgKysrKysrKysrKysrKysrKy0tLQogLi4uL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oICAgICAgICAgIHwgMTUgKysrKysrCiAuLi4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0gICAgfCAyMCArKysrKysrKwogLi4uL1dlYkNv
cmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0gIHwgIDUgKysKIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwICB8ICA1ICstCiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggICAgfCAgMyArKwogLi4uL1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSAgICAgIHwgIDYgKysrCiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgICAgICAgfCAxMCArKy0tCiAuLi4vaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5oICAgfCAgMiArLQogMzAgZmlsZXMgY2hhbmdlZCwg
MTk2IGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggYzI2ZWUwMjJiMjBjLi42NmMyOWRmOGM5
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBA
IC00NzIsNiArNDcyLDEwIEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxBWElE
Pj4gcmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0aW9uVHlw
ZSk7CiAgICAgdm9pZCB1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb24oU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBSZXRhaW5QdHI8TlNE
YXRhPiBub3RpZmljYXRpb25EYXRhKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFlfSVNPTEFURURfVFJFRSkKICAgICB2b2lkIHNjaGVkdWxlT2JqZWN0UmVnaW9uc1VwZGF0ZShi
b29sIHNjaGVkdWxlSW1tZWRpYXRlbHkgPSBmYWxzZSkgeyBtX2dlb21ldHJ5TWFuYWdlci0+c2No
ZWR1bGVPYmplY3RSZWdpb25zVXBkYXRlKHNjaGVkdWxlSW1tZWRpYXRlbHkpOyB9CiAgICAgdm9p
ZCB3aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpIHsgbV9nZW9tZXRyeU1hbmFnZXItPndpbGxVcGRh
dGVPYmplY3RSZWdpb25zKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCmluZGV4IDViMmY5Y2FhYjg5MC4uMjJjMDQxNjM0
OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVj
dENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2Jq
ZWN0Q2FjaGVJT1MubW0KQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU9iamVj
dC5oIgotI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKKyNpbXBv
cnQgIkNocm9tZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIgogCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAKQEAgLTkwLDI0ICs5MSwzMCBAQCBBU0NJSUxpdGVyYWwgQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUGxhdGZvcm1OYW1lKEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbgogICAgIHJldHVy
biBuYW1lOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbihTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIFJldGFpblB0cjxOU0RhdGE+IG5vdGlm
aWNhdGlvbkRhdGEpCit7CisgICAgYXV0byBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7CisgICAg
aWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBwYWdlLT5jaHJvbWUoKS5yZWxheUFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uTmFtZSwgbm90aWZpY2F0aW9uRGF0
YSk7Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFY
Q29yZU9iamVjdCogb2JqZWN0LCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiB7CiAgICAg
aWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIGlPUyBub3RpZmljYXRpb25z
IG11c3QgdWx0aW1hdGVseSBjYWxsIFVJS2l0IFVJQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRp
b24uCi0gICAgLy8gQnV0IFdlYkNvcmUgaXMgbm90IGxpbmtlZCB3aXRoIFVJS2l0LiBTbyBhIHdv
cmthcm91bmQgaXMgdG8gb3ZlcnJpZGUgdGhlIHdyYXBwZXIncwotICAgIC8vIHBvc3ROb3RpZmlj
YXRpb24gbWV0aG9kIGluIHRoZSBzeXN0ZW0gV2ViS2l0QWNjZXNzaWJpbGl0eSBidW5kbGUgdGhh
dCBkb2VzIGxpbmsgVUlLaXQuCi0gICAgYXV0byBub3RpZmljYXRpb25OYW1lID0gbm90aWZpY2F0
aW9uUGxhdGZvcm1OYW1lKG5vdGlmaWNhdGlvbik7Ci0gICAgaWYgKG5vdGlmaWNhdGlvbk5hbWUu
aXNOdWxsKCkpCisgICAgYXV0byBzdHJpbmdOb3RpZmljYXRpb24gPSBBWE9iamVjdENhY2hlOjpu
b3RpZmljYXRpb25QbGF0Zm9ybU5hbWUobm90aWZpY2F0aW9uKTsKKyAgICBpZiAoc3RyaW5nTm90
aWZpY2F0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5zTm90aWZp
Y2F0aW9uTmFtZSA9IG5vdGlmaWNhdGlvbk5hbWUuY3JlYXRlTlNTdHJpbmcoKTsKLSAgICBbb2Jq
ZWN0LT53cmFwcGVyKCkgcG9zdE5vdGlmaWNhdGlvbjpuc05vdGlmaWNhdGlvbk5hbWUuZ2V0KCld
OworICAgIGF1dG8gbm90aWZpY2F0aW9uTmFtZSA9IHN0cmluZ05vdGlmaWNhdGlvbi5jcmVhdGVO
U1N0cmluZygpOworICAgIFtvYmplY3QtPndyYXBwZXIoKSBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQ
cm9jZXNzTm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOwogCiAgICAgLy8gVG8g
c2ltdWxhdGUgQVggbm90aWZpY2F0aW9ucyBmb3IgTGF5b3V0VGVzdHMgb24gdGhlIHNpbXVsYXRv
ciwgY2FsbAogICAgIC8vIHRoZSB3cmFwcGVyJ3MgYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNh
dGlvbi4KLSAgICBbb2JqZWN0LT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNh
dGlvbjpuc05vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOworICAgIFtvYmplY3QtPndyYXBwZXIoKSBh
Y2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOwog
fQogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlm
aWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGNvbnN0IEFYVGV4dFN0YXRlQ2hh
bmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MuaAppbmRleCA2YzZiYjkxZjgwYzAuLmVhNTk1MjFkNzA4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCkBAIC03Niw3ICs3NiwxMiBAQCBzdGF0
aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2liaWxpdHlBY2NlcHRlZElubGluZVRleHRDb21w
bGV0aW9uID0gQCJVSUFjY2VzcwogCiAtIChCT09MKWlzQXR0YWNobWVudDsKIAotLSAodm9pZClw
b3N0Tm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWU7CisvLyBUaGlzIGlu
dGVyYWN0cyB3aXRoIEFjY2Vzc2liaWxpdHkgc3lzdGVtIHRvIHBvc3QgcHJvY2VzcyBzb21lIG5v
dGlmaWNhdGlvbnMuCistICh2b2lkKWFjY2Vzc2liaWxpdHlPdmVycmlkZVByb2Nlc3NOb3RpZmlj
YXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKKworLy8gVGhpcyBpcyBjYWxsZWQg
YnkgdGhlIEFjY2Vzc2liaWxpdHkgc3lzdGVtIHRvIHJlbGF5IGJhY2sgdG8gdGhlIGNocm9tZS4K
Ky0gKHZvaWQpaGFuZGxlTm90aWZpY2F0aW9uUmVsYXlUb0Nocm9tZTooTlNTdHJpbmcgKilub3Rp
ZmljYXRpb25OYW1lIG5vdGlmaWNhdGlvbkRhdGE6KE5TRGF0YSAqKW5vdGlmaWNhdGlvbkRhdGE7
CisKIEBlbmQKIAogI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJ
T1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBh
YjMxOTM4Njk0YmEuLmE2MjViNDdhMDJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0KQEAgLTE2ODcsNyArMTY4Nyw3IEBAIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVNj
cm9sbDooVUlBY2Nlc3NpYmlsaXR5U2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbgogCiAgICAgaWYg
KHJlc3VsdCkgewogICAgICAgICBhdXRvIG5vdGlmaWNhdGlvbk5hbWUgPSBBWE9iamVjdENhY2hl
Ojpub3RpZmljYXRpb25QbGF0Zm9ybU5hbWUoQVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb246
OkFYUGFnZVNjcm9sbGVkKS5jcmVhdGVOU1N0cmluZygpOwotICAgICAgICBbc2VsZiBwb3N0Tm90
aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOworICAgICAgICBbc2VsZiBhY2Nlc3Np
YmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCld
OwogCiAgICAgICAgIENHUG9pbnQgc2Nyb2xsUG9zID0gW3NlbGYgX2FjY2Vzc2liaWxpdHlTY3Jv
bGxQb3NpdGlvbl07CiAgICAgICAgIE5TU3RyaW5nICp0ZXN0U3RyaW5nID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJBWFNjcm9sbCBbcG9zaXRpb246ICUuMmYgJS4yZl0iLCBzY3JvbGxQ
b3MueCwgc2Nyb2xsUG9zLnldOwpAQCAtMTY5OCw2ICsxNjk4LDIxIEBAIC0gKEJPT0wpYWNjZXNz
aWJpbGl0eVNjcm9sbDooVUlBY2Nlc3NpYmlsaXR5U2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eU92ZXJyaWRlUHJv
Y2Vzc05vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lCit7CisgICAgLy8g
VGhpcyBpcyBvdmVycmlkZW4gYnkgdGhlIEFjY2Vzc2liaWxpdHkgc3lzdGVtIHRvIHBvc3QtcHJv
Y2VzcyBub3RpZmljYXRpb25zLgorICAgIC8vIFdoZW4gaXQgaXMgZG9uZSwgaXQgd2lsbCBjYWxs
IGJhY2sgaW50byBoYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21lLgorfQorCistICh2b2lk
KWhhbmRsZU5vdGlmaWNhdGlvblJlbGF5VG9DaHJvbWU6KE5TU3RyaW5nICopbm90aWZpY2F0aW9u
TmFtZSBub3RpZmljYXRpb25EYXRhOihOU0RhdGEgKilub3RpZmljYXRpb25EYXRhCit7CisgICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBub3RpZmljYXRpb24gPSBTdHJpbmcobm90aWZpY2F0aW9uTmFtZSk7CisgICAg
c2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+cmVsYXlBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uRGF0YSk7Cit9CisKIC0gKENH
UmVjdClfYWNjZXNzaWJpbGl0eVJlbGF0aXZlRnJhbWUKIHsKICAgICBhdXRvIHJlY3QgPSBGbG9h
dFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmVsZW1lbnRSZWN0KCkp
KTsKQEAgLTIwNDYsMTEgKzIwNjEsNiBAQCAtIChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1
YnZpZXc6KGlkKXN1YnZpZXcKICAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKXBvc3ROb3Rp
ZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZQotewotICAgIC8vIFRoZSBVSUtp
dCBhY2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0
ZSBub3RpZmljYXRpb24uCi19Ci0KIC8vIFRoZXNlIHdpbGwgYmUgdXNlZCBieSB0aGUgVUlLaXQg
d3JhcHBlciB0byBjYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gb2Ygc2Nyb2xs
IHN0YXR1cy4KIC0gKENHUG9pbnQpX2FjY2Vzc2liaWxpdHlTY3JvbGxQb3NpdGlvbgogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDA3YWUwNTdlNzRmYS4uZjU3ZmE3YWUw
YzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC0xMTcsNiArMTE3LDkg
QEAgY2xhc3MgRW1wdHlDaHJvbWVDbGllbnQgOiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICBJ
bnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgZmluYWwgeyBy
ZXR1cm4gcjsgfQogICAgIEludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNv
bnN0IEludFBvaW50JiBwKSBjb25zdCBmaW5hbCB7IHJldHVybiBwOyB9OwogICAgIEludFJlY3Qg
cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYgcikgY29uc3QgZmlu
YWwgeyByZXR1cm4gcjsgfTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVs
YXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJldGFpblB0
cjxOU0RhdGE+KSBjb25zdCBmaW5hbCB7IH07CisjZW5kaWYKIAogICAgIHZvaWQgZGlkRmluaXNo
TG9hZGluZ0ltYWdlRm9yRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JikgZmluYWwgeyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcAppbmRleCBhZmI4YTcwNjc3NGYuLmY4MjAwY2QwZTE2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcApAQCAtMTI3LDYgKzEyNywxMSBAQCBJbnRSZWN0IENocm9tZTo6cm9v
dFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAg
ICByZXR1cm4gbV9jbGllbnQtPnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKHJlY3QpOwog
fQogCit2b2lkIENocm9tZTo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0
cmluZyYgbm90aWZpY2F0aW9uTmFtZSwgUmV0YWluUHRyPE5TRGF0YT4gbm90aWZpY2F0aW9uRGF0
YSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3RpZmljYXRpb25EYXRhKTsKK30KKwogUGxhdGZv
cm1QYWdlQ2xpZW50IENocm9tZTo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9jbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5k
ZXggZjgwMzMwNTgxZGJlLi4wNGM0ZTUyOGY1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtMTA1
LDYgKzEwNSw5IEBAIHB1YmxpYzoKICAgICBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9S
b290Vmlldyhjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3Qgcm9v
dFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCBvdmVy
cmlkZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSwgUmV0YWluUHRy
PE5TRGF0YT4gbm90aWZpY2F0aW9uRGF0YSkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2
b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNv
ckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKaW5kZXggMzMyOTNmMzczMTBkLi40ZDk3ZWI0NDM2ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaApAQCAtMjI1LDYgKzIyNSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgSW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3Qg
SW50UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nl
c3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICB2aXJ0dWFsIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uKGNvbnN0IFN0cmluZyYsIFJldGFpblB0cjxOU0RhdGE+KSBjb25zdCA9IDA7CisjZW5kaWYK
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KEhUTUxJ
bWFnZUVsZW1lbnQmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRl
eCBjYjY1Mjk5OWY2OTMuLjViMDk2MjlhODA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RX
aW5kb3cuaApAQCAtMjgsOCArMjgsMTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NsaWVudC5oIgog
I2luY2x1ZGUgIldpZGdldC5oIgogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK09CSkNfQ0xB
U1MgTlNEYXRhOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0YVNl
Z21lbnQ7CiBjbGFzcyBDdXJzb3I7CiAKIHVzaW5nIEZyYW1lc1BlclNlY29uZCA9IHVuc2lnbmVk
OwpAQCAtNTcsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3
VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFBvaW50
IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25z
dCBJbnRSZWN0JikgY29uc3QgPSAwOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdmly
dHVhbCB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBS
ZXRhaW5QdHI8TlNEYXRhPikgY29uc3QgPSAwOworI2VuZGlmCiAKICAgICAvLyBNZXRob2QgZm9y
IHJldHJpZXZpbmcgdGhlIG5hdGl2ZSBjbGllbnQgb2YgdGhlIHBhZ2UuCiAgICAgdmlydHVhbCBQ
bGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBiM2Q4ZmFkZjY2YjMuLmRi
NmFhNjc5ODU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAK
QEAgLTc5Niw4ICs3OTYsNiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkoU3lu
Y1JlcXVlc3RJRCBzeW5jUmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogewogICAgIHRpbWVv
dXQgPSB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyh0aW1lb3V0KTsK
IAotICAgIHdpbGxTZW5kU3luY01lc3NhZ2Uoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIGJvb2wg
dGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIXRpbWVkT3V0KSB7CiAgICAgICAgIC8vIEZp
cnN0LCBjaGVjayBpZiB3ZSBoYXZlIGFueSBtZXNzYWdlcyB0aGF0IHdlIG5lZWQgdG8gcHJvY2Vz
cy4KQEAgLTgxMywxNiArODExLDEyIEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBs
eShTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHN5bmNSZXF1ZXN0SUQsIHBlbmRpbmdTeW5jUmVwbHkuc3luY1Jl
cXVlc3RJRCA9PSBzeW5jUmVxdWVzdElEKTsKIAogICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhl
IHN5bmMgcmVwbHkuCi0gICAgICAgICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNlaXZl
UmVwbHkpIHsKLSAgICAgICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0
aW9ucyk7CisgICAgICAgICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNlaXZlUmVwbHkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwZW5kaW5nU3luY1JlcGx5LnJlcGx5
RGVjb2RlcikgfTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVGhlIGNvbm5lY3Rp
b24gd2FzIGNsb3NlZC4KLSAgICAgICAgICAgIGlmICghbV9zaG91bGRXYWl0Rm9yU3luY1JlcGxp
ZXMpIHsKLSAgICAgICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0aW9u
cyk7CisgICAgICAgICAgICBpZiAoIW1fc2hvdWxkV2FpdEZvclN5bmNSZXBsaWVzKQogICAgICAg
ICAgICAgICAgIHJldHVybiBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247Ci0gICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBQcm9jZXNzaW5nIGEgc3luYyBtZXNzYWdlIGNvdWxk
IGNhdXNlIHRoZSBjb25uZWN0aW9uIHRvIGJlIGludmFsaWRhdGVkLgpAQCAtODMxLDcgKzgyNSw2
IEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5jUmVxdWVzdElEIHN5bmNS
ZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgICAgIC8vIGFueSBtb3JlIGluY29taW5n
IG1lc3NhZ2VzLgogICAgICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoSVBDLCAiQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogQ29ubmVjdGlv
biBubyBsb25nZXIgdmFsaWQsIGlkPSUiIFBSSXU2NCwgc3luY1JlcXVlc3RJRC50b1VJbnQ2NCgp
KTsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVTeW5jUmVwbHkoc2VuZFN5bmNPcHRpb25zKTsKICAg
ICAgICAgICAgIHJldHVybiBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247CiAgICAgICAgIH0KIApA
QCAtODQ3LDggKzg0MCw2IEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5j
UmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgUkVMRUFTRV9M
T0dfRVJST1IoSVBDLCAiQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogVGltZWQtb3V0IHdo
aWxlIHdhaXRpbmcgZm9yIHJlcGx5IGZvciAlcywgaWQ9JSIgUFJJdTY0LCBkZXNjcmlwdGlvbiht
ZXNzYWdlTmFtZSksIHN5bmNSZXF1ZXN0SUQudG9VSW50NjQoKSk7CiAjZW5kaWYKIAotICAgIGRp
ZFJlY2VpdmVTeW5jUmVwbHkoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIHJldHVybiBFcnJvcjo6
VGltZW91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4
IGM2M2JiZTI2ZDU0YS4uZmNmZjgxOThhZjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5oCkBAIC04NSwxMSArODUsOSBAQCBlbnVtIGNsYXNzIFNlbmRPcHRpb24gOiB1
aW50OF90IHsKIH07CiAKIGVudW0gY2xhc3MgU2VuZFN5bmNPcHRpb24gOiB1aW50OF90IHsKLSAg
ICAvLyBVc2UgdGhpcyB0byBpbmZvcm0gdGhhdCB0aGlzIHN5bmMgY2FsbCB3aWxsIHN1c3BlbmQg
dGhpcyBwcm9jZXNzIHVudGlsIHRoZSB1c2VyIHJlc3BvbmRzIHdpdGggaW5wdXQuCi0gICAgSW5m
b3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQgPSAxIDw8IDAsCi0gICAgVXNlRnVsbHlTeW5j
aHJvbm91c01vZGVGb3JUZXN0aW5nID0gMSA8PCAxLAotICAgIEZvcmNlRGlzcGF0Y2hXaGVuRGVz
dGluYXRpb25Jc1dhaXRpbmdGb3JVbmJvdW5kZWRTeW5jUmVwbHkgPSAxIDw8IDIsCi0gICAgTWFp
bnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzID0gMSA8PCAzLAorICAgIFVzZUZ1bGx5U3lu
Y2hyb25vdXNNb2RlRm9yVGVzdGluZyA9IDEgPDwgMCwKKyAgICBGb3JjZURpc3BhdGNoV2hlbkRl
c3RpbmF0aW9uSXNXYWl0aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5ID0gMSA8PCAxLAorICAgIE1h
aW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyA9IDEgPDwgMiwKIH07CiAKIGVudW0gY2xh
c3MgV2FpdEZvck9wdGlvbiB7CkBAIC01MzAsOSArNTI4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGVucXVldWVJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+KSBXVEZfUkVR
VUlSRVNfTE9DSyhtX2luY29taW5nTWVzc2FnZXNMb2NrKTsKICAgICBzaXplX3QgaW5jb21pbmdN
ZXNzYWdlc0Rpc3BhdGNoaW5nQmF0Y2hTaXplKCkgY29uc3Q7CiAKLSAgICB2b2lkIHdpbGxTZW5k
U3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7Ci0gICAgdm9pZCBkaWRSZWNl
aXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwotCiAgICAgVGltZW91dCB0
aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhUaW1lb3V0KSBjb25zdDsK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtODk5LDYgKzg5NCw0IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ0NvdW50
OwogfTsKIAotdm9pZCBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihi
b29sIHN1c3BlbmRlZCk7Ci0KIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCmluZGV4IGVlOTJhODUy
OTJkMi4uZjZlZjMwZWI0NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCkBAIC00OSwyNSArNDksOSBAQAogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKLSNpbXBvcnQg
PFVJS2l0L1VJQWNjZXNzaWJpbGl0eS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
LSNpbXBvcnQgPEFYUnVudGltZS9BWERlZmluZXMuaD4KLSNpbXBvcnQgPEFYUnVudGltZS9BWE5v
dGlmaWNhdGlvbkNvbnN0YW50cy5oPgotI2Vsc2UKLSNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdl
ZE5vdGlmaWNhdGlvbiAwCiAjZW5kaWYKIAotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0K
LSNpbXBvcnQgIkFwcGxpY2F0aW9uU2VydmljZXNTUEkuaCIKLQotZXh0ZXJuICJDIiBBWEVycm9y
IF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIG5hbWVzcGFjZSBJUEMgewogCiBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGlubGluZU1lc3NhZ2VNYXhTaXplID0gNDA5NjsKQEAgLTU5MCwyOSArNTc0
LDYgQEAgYm9vbCBDb25uZWN0aW9uOjpraWxsKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oYm9vbCBzdXNwZW5k
ZWQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NT
dXNwZW5kU3RhdHVzKHN1c3BlbmRlZCA/IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFYU3Vz
cGVuZFN0YXR1c1J1bm5pbmcpOwotI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSUFj
Y2Vzc2liaWxpdHlQb3N0Tm90aWZpY2F0aW9uKGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRp
b24sIEB7IEAicGlkIiA6IEAoZ2V0cGlkKCkpLCBAInN1c3BlbmRlZCIgOiBAKHN1c3BlbmRlZCkg
fSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzdXNwZW5kZWQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgQ29ubmVjdGlvbjo6d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNPcHRp
b24+IHNlbmRTeW5jT3B0aW9ucykKLXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRhaW5z
KElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSAm
JiBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAg
ICBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsKLX0KLQot
dm9pZCBDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09w
dGlvbj4gc2VuZFN5bmNPcHRpb25zKQotewotICAgIGlmIChzZW5kU3luY09wdGlvbnMuY29udGFp
bnMoSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQp
ICYmIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAg
ICAgIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNlKTsKLX0K
LQogcGlkX3QgQ29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKIHsKICAgICBpZiAo
IW1feHBjQ29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJ
LmgKaW5kZXggMmZmZWM0ZmRjNTY2Li5iZjRlNjUwMzRkYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC0xMTMyLDYgKzExMzIsNyBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNVSW50ZWdlciwgX1VJU2Nyb2xsRGV2aWNlQ2F0ZWdvcnkpIHsKIC0gKFVJU2Nyb2xs
VmlldyAqKV9zY3JvbGxlcjsKIC0gKENHUG9pbnQpYWNjZXNzaWJpbGl0eUNvbnZlcnRQb2ludEZy
b21TY2VuZVJlZmVyZW5jZUNvb3JkaW5hdGVzOihDR1BvaW50KXBvaW50OwogLSAoQ0dSZWN0KWFj
Y2Vzc2liaWxpdHlDb252ZXJ0UmVjdFRvU2NlbmVSZWZlcmVuY2VDb29yZGluYXRlczooQ0dSZWN0
KXJlY3Q7CistICh2b2lkKWFjY2Vzc2liaWxpdHlSZWxheU5vdGlmaWNhdGlvbjooTlNTdHJpbmcg
Kilub3RpZmljYXRpb25OYW1lIG5vdGlmaWNhdGlvbkRhdGE6KE5TRGF0YSAqKW5vdGlmaWNhdGlv
bkRhdGE7CiAtIChVSVJlY3RFZGdlKV9lZGdlc0FwcGx5aW5nU2FmZUFyZWFJbnNldHNUb0NvbnRl
bnRJbnNldDsKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvU2Fu
ZGJveFByb2ZpbGVzL2lvcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQu
V2ViQ29udGVudC5zYi5pbgppbmRleCA4M2M3MmJjNDQ3ODMuLmI2YTVkNmI1MjI0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvU2FuZGJveFByb2ZpbGVzL2lvcy9jb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4KKysrIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMv
U2FuZGJveFByb2ZpbGVzL2lvcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4KQEAg
LTkyNyw3ICs5MjcsNiBAQAogICAgICAgICAoZXh0ZW5zaW9uICJjb20uYXBwbGUud2Via2l0LmV4
dGVuc2lvbi5tYWNoIikKICAgICAgICAgKGdsb2JhbC1uYW1lCiAgICAgICAgICAgICAiY29tLmFw
cGxlLmZyb250Ym9hcmQuc3lzdGVtYXBwc2VydmljZXMiCi0gICAgICAgICAgICAiY29tLmFwcGxl
LmlwaG9uZS5heHNlcnZlci1zeXN0ZW13aWRlIgogICAgICAgICAgICAgImNvbS5hcHBsZS5tb2Jp
bGVhc3NldGQudjIiCiAgICAgICAgICAgICAiY29tLmFwcGxlLm1vYmlsZWdlc3RhbHQueHBjIikp
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
cm94eUNvY29hLm1tCmluZGV4IDlkNjdkY2FmMjJjOS4uZWY4NGYyODg5NjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5t
bQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNz
aWJpbGl0eVNlcnZlcklmTmVlZGVkKCkKIAogICAgIFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGU+IGhhbmRsZUFycmF5OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaGFuZGxl
QXJyYXkgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cCh7ICJj
b20uYXBwbGUuaXBob25lLmF4c2VydmVyLXN5c3RlbXdpZGUiX3MsICJjb20uYXBwbGUuZnJvbnRi
b2FyZC5zeXN0ZW1hcHBzZXJ2aWNlcyJfcyB9LCBhdWRpdFRva2VuKCksIFNhbmRib3hFeHRlbnNp
b246Ok1hY2hCb290c3RyYXBPcHRpb25zOjpFbmFibGVNYWNoQm9vdHN0cmFwKTsKKyAgICBoYW5k
bGVBcnJheSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKHsg
ImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIl9zIH0sIGF1ZGl0VG9rZW4o
KSwgU2FuZGJveEV4dGVuc2lvbjo6TWFjaEJvb3RzdHJhcE9wdGlvbnM6OkVuYWJsZU1hY2hCb290
c3RyYXApOwogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2Nr
U2VydmljZXNSZXF1aXJlZEJ5QWNjZXNzaWJpbGl0eShoYW5kbGVBcnJheSksIDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGVkN2ZlYTNjMGFlNC4uMGY1Y2M3NDEwZTg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0zNDcsNiArMzQ3LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2lu
dCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
ID0gMDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxp
dHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHZpcnR1YWwgdm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24o
Y29uc3QgU3RyaW5nJiwgUmV0YWluUHRyPE5TRGF0YT4pID0gMDsKKyNlbmRpZgogI2lmIFBMQVRG
T1JNKE1BQykKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1dpbmRvdyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IDA5ZGM4ZTAzYWI2OC4uMDA0NWEzOTBhZmM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjM5NSw2ICsyMzk1LDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
PiYmKTsKICAgICB2b2lkIGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpJbnRQb2ludCk+JiYpOwogICAgIHZvaWQgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2ViQ29yZTo6SW50UmVjdCk+JiYpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9p
ZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJik7CisjZW5kaWYKICAgICB2b2lkIHJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2
b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMmKTsKICAgICB2b2lkIHBhZ2VEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgppbmRleCAyNTMxYmRmNjlkMzguLjY2NmI2NWU3NzIyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtNTMsNiArNTMsOSBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29y
ZTo6SW50UmVjdCByZWN0KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgU3luY2hy
b25vdXMKICAgICBBY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290VmlldyhXZWJDb3JlOjpJbnRQb2lu
dCBzY3JlZW5Qb2ludCkgLT4gKFdlYkNvcmU6OkludFBvaW50IHdpbmRvd1BvaW50KSBTeW5jaHJv
bm91cwogICAgIFJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKFdlYkNvcmU6OkludFJlY3Qg
cmVjdCkgLT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpIFN5bmNocm9ub3VzCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBSZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24o
U3RyaW5nIG5vdGlmaWNhdGlvbk5hbWUsIElQQzo6RGF0YVJlZmVyZW5jZSBub3RpZmljYXRpb25E
YXRhKQorI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFNob3dWYWxpZGF0aW9uTWVzc2FnZShXZWJDb3JlOjpJbnRSZWN0IGFuY2hvclJlY3QsIFN0cmlu
ZyBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAppbmRleCBjNjg5MzQ5NDIyZmQuLjU3YTdhMGJiYjZlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTExMyw2ICsxMTMs
NyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNj
ZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVy
cmlkZTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVu
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbGF5QWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8TlNEYXRhPikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKICAgICB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGEzNjcwMmU5OWZm
OC4uMzg1YmYzOGYwMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tCkBAIC00NTMsNyArNDUzLDE0IEBAIEludFBvaW50IFBhZ2VDbGll
bnRJbXBsOjphY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpCiAgICAgICAgIHJvb3RWaWV3UG9pbnQgPSBbY29udGVudFZpZXcgYWNjZXNzaWJpbGl0eUNv
bnZlcnRQb2ludEZyb21TY2VuZVJlZmVyZW5jZUNvb3JkaW5hdGVzOnJvb3RWaWV3UG9pbnRdOwog
ICAgIHJldHVybiBJbnRQb2ludChyb290Vmlld1BvaW50KTsKIH0KLSAgICAKKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYg
bm90aWZpY2F0aW9uTmFtZSwgUmV0YWluUHRyPE5TRGF0YT4gbm90aWZpY2F0aW9uRGF0YSkKK3sK
KyAgICBhdXRvIGNvbnRlbnRWaWV3ID0gdGhpcy0+Y29udGVudFZpZXcoKTsKKyAgICBpZiAoW2Nv
bnRlbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNzaWJpbGl0eVJlbGF5
Tm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbkRhdGE6KV0pCisgICAgICAgIFtjb250ZW50VmlldyBh
Y2Nlc3NpYmlsaXR5UmVsYXlOb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZSBub3RpZmljYXRp
b25EYXRhOm5vdGlmaWNhdGlvbkRhdGEuZ2V0KCldOworfQorCiBJbnRSZWN0IFBhZ2VDbGllbnRJ
bXBsOjpyb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIENHUmVjdCByb290Vmlld1JlY3QgPSByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggNWZkNzY1ZmY4ZGUyLi43N2JlYzAw
NTM3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQpAQCAtNzc4LDYgKzc3OCwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJXZWJQ
cm9jZXNzQWNjZXNzaWJpbGl0eVRva2VuKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZQogICAgIHBh
Z2VDbGllbnQoKS5hY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoZGF0YSk7CiB9
ICAgIAogCisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIGRhdGEpCit7CisgICAgTlNEYXRhICpub3RpZmljYXRpb25EYXRhID0gW05TRGF0YSBkYXRh
V2l0aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgcGFnZUNsaWVu
dCgpLnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3Rp
ZmljYXRpb25EYXRhKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmFzc2lzdGl2ZVRlY2hub2xv
Z3lNYWtlRmlyc3RSZXNwb25kZXIoKQogewogICAgIHBhZ2VDbGllbnQoKS5hc3Npc3RpdmVUZWNo
bm9sb2d5TWFrZUZpcnN0UmVzcG9uZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDk1
MTRkZTI2ZDQyYS4uNzI0NGRkOTI5OTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTYx
LDYgKzE2MSwyNSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorCitBWFJlbGF5UHJvY2Vzc1N1c3BlbmRl
ZE5vdGlmaWNhdGlvbjo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oUmVmPFdl
YlBhZ2U+IHBhZ2UsIGJvb2wgbWVzc2FnZVN1c3BlbmRlZEF1dG9tYXRpY2FsbHkpCisgICAgOiBt
X3BhZ2UocGFnZSkKKyAgICAsIG1fbWVzc2FnZVN1c3BlbmRlZEF1dG9tYXRpY2FsbHkobWVzc2Fn
ZVN1c3BlbmRlZEF1dG9tYXRpY2FsbHkpCit7CisgICAgaWYgKG1fbWVzc2FnZVN1c3BlbmRlZEF1
dG9tYXRpY2FsbHkpCisgICAgICAgIHNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UodHJ1ZSk7Cit9
CisKK0FYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjp+QVhSZWxheVByb2Nlc3NT
dXNwZW5kZWROb3RpZmljYXRpb24oKQoreworICAgIGlmIChtX21lc3NhZ2VTdXNwZW5kZWRBdXRv
bWF0aWNhbGx5KQorICAgICAgICBzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGZhbHNlKTsKK30K
KworI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3Rp
ZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UoYm9vbCkgeyB9CisjZW5kaWYKKwog
V2ViQ2hyb21lQ2xpZW50OjpXZWJDaHJvbWVDbGllbnQoV2ViUGFnZSYgcGFnZSkKICAgICA6IG1f
cGFnZShwYWdlKQogewpAQCAtMzIyLDcgKzM0MSw3IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlV2luZG93KExvY2FsRnJhbWUmIGZyYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2lu
CiAKICAgICBhdXRvIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpOwog
Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlKHdlYkZy
YW1lLT5pbmZvKCksIHdlYkZyYW1lLT5wYWdlKCktPndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwg
bmF2aWdhdGlvbkFjdGlvbi5yZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVyZXMsIG5hdmln
YXRpb25BY3Rpb25EYXRhKSwgcGFnZSgpLmlkZW50aWZpZXIoKSwgSVBDOjpUaW1lb3V0OjppbmZp
bml0eSgpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNN
ZXNzYWdlcywgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1
c3BlbmQgfSk7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQ
YWdlKHdlYkZyYW1lLT5pbmZvKCksIHdlYkZyYW1lLT5wYWdlKCktPndlYlBhZ2VQcm94eUlkZW50
aWZpZXIoKSwgbmF2aWdhdGlvbkFjdGlvbi5yZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVy
ZXMsIG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgcGFnZSgpLmlkZW50aWZpZXIoKSwgSVBDOjpUaW1l
b3V0OjppbmZpbml0eSgpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdX
aXRoQXN5bmNNZXNzYWdlcyB9KTsKICAgICBpZiAoIXNlbmRSZXN1bHQuc3VjY2VlZGVkKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NTcsNyArNDc2LDEwIEBAIGJvb2wgV2ViQ2hy
b21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBMb2NhbEZyCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRp
c2FibGVyOwogCi0gICAgYXV0byBzZW5kUmVzdWx0ID0gcHJvdGVjdGVkUGFnZSgpLT5zZW5kU3lu
Y1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIG1lc3Nh
Z2UpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCk7CisgICAgYXV0byBwYWdlID0gcHJvdGVjdGVkUGFnZSgpOworICAgIEFYUmVsYXlQcm9jZXNz
U3VzcGVuZGVkTm90aWZpY2F0aW9uKHBhZ2UsIHRydWUpOworCisgICAgYXV0byBzZW5kUmVzdWx0
ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFt
ZS0+aW5mbygpLCBtZXNzYWdlKSk7CiAgICAgYXV0byBbc2hvdWxkQ2xvc2VdID0gc2VuZFJlc3Vs
dC50YWtlUmVwbHlPcihmYWxzZSk7CiAgICAgcmV0dXJuIHNob3VsZENsb3NlOwogfQpAQCAtNTA1
LDcgKzUyNyw5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQoTG9j
YWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgYWxlcnRUCiAgICAgSGFuZ0RldGVjdGlvbkRp
c2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9u
b3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKIAotICAgIHBhZ2UtPnNl
bmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2Ny
aXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgYWxlcnRUZXh0
KSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2Fn
ZXMsIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
IH0pOworICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKHBhZ2UsIHRydWUp
OworCisgICAgcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+
aW5mbygpLCBhbGVydFRleHQpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJp
bmdXaXRoQXN5bmNNZXNzYWdlcyB9KTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkph
dmFTY3JpcHRDb25maXJtKExvY2FsRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CkBAIC01MjQsNyArNTQ4LDkgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRD
b25maXJtKExvY2FsRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3MKICAgICBIYW5nRGV0
ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogICAgIElQQzo6VW5ib3VuZGVk
U3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlOwogCi0gICAg
YXV0byBzZW5kUmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5mcmFtZUlEKCks
IHdlYkZyYW1lLT5pbmZvKCksIG1lc3NhZ2UpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50
YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcywgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQgfSk7CisgICAgQVhSZWxheVByb2Nlc3NTdXNwZW5k
ZWROb3RpZmljYXRpb24ocGFnZSwgdHJ1ZSk7CisKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBwYWdl
LT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2
YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgbWVz
c2FnZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01l
c3NhZ2VzIH0pOwogICAgIGF1dG8gW3Jlc3VsdF0gPSBzZW5kUmVzdWx0LnRha2VSZXBseU9yKGZh
bHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTQ1LDcgKzU3MSw5IEBAIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KExvY2FsRnJhbWUmIGZyYW1lLCBjb25z
dCBTdHJpbmcmIG1lc3NhCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25E
aXNhYmxlcjsKICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVk
U3luY2hyb25vdXNJUENTY29wZTsKIAotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRT
eW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIG1lc3NhZ2UsIGRl
ZmF1bHRWYWx1ZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhB
c3luY01lc3NhZ2VzLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NX
aWxsU3VzcGVuZCB9KTsKKyAgICBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihw
YWdlLCB0cnVlKTsKKworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERl
bGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdl
YkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1
ZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3Nh
Z2VzIH0pOwogICAgIGlmICghc2VuZFJlc3VsdC5zdWNjZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC03NzgsOSArODA2LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwcmlu
dChMb2NhbEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiAj
ZW5kaWYKIAogICAgIGF1dG8gdHJ1bmNhdGVkVGl0bGUgPSB0cnVuY2F0ZUZyb21FbmQodGl0bGUs
IG1heFRpdGxlTGVuZ3RoKTsKKyAgICBhdXRvIHBhZ2UgPSBwcm90ZWN0ZWRQYWdlKCk7CisgICAg
QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24ocGFnZSwgdHJ1ZSk7CiAKICAgICBJ
UEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENT
Y29wZTsKLSAgICBwcm90ZWN0ZWRQYWdlKCktPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1lLT5mcmFtZUlEKCksIHRydW5j
YXRlZFRpdGxlLnN0cmluZywgcGRmRmlyc3RQYWdlU2l6ZSksIElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBwYWdlLT5zZW5kU3luY1dp
dGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJGcmFt
ZS0+ZnJhbWVJRCgpLCB0cnVuY2F0ZWRUaXRsZS5zdHJpbmcsIHBkZkZpcnN0UGFnZVNpemUpKTsK
IH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRf
dCkKQEAgLTgwMCw3ICs4MzAsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiYgb3JpZ2luLAogICAgIGlmICgh
Y2FjaGVTdG9yYWdlLmNhbGN1bGF0ZVF1b3RhRm9yT3JpZ2luKG9yaWdpbiwgY3VycmVudFF1b3Rh
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzZW5kUmVzdWx0ID0gcGFnZS0+c2VuZFN5
bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2luUXVvdGEob3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSwg
Y3VycmVudFF1b3RhLCB0b3RhbEJ5dGVzTmVlZGVkKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5m
b3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVu
ZGVkTm90aWZpY2F0aW9uKHBhZ2UsIHRydWUpOworCisgICAgYXV0byBzZW5kUmVzdWx0ID0gcGFn
ZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNo
ZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEob3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50
aWZpZXIoKSwgY3VycmVudFF1b3RhLCB0b3RhbEJ5dGVzTmVlZGVkKSk7CiAgICAgYXV0byBbbmV3
UXVvdGFdID0gc2VuZFJlc3VsdC50YWtlUmVwbHlPcigwKTsKIAogICAgIGNhY2hlU3RvcmFnZS5z
dG9yZVVwZGF0ZWRRdW90YUZvck9yaWdpbigmb3JpZ2luLCBuZXdRdW90YSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKaW5kZXggYzhjMjg3YzVhZDYyLi5hNjc5MjMxZWY3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKQEAgLTUyLDYgKzUyLDEwIEBAIHB1YmxpYzoKICAgICBXZWJQYWdlJiBwYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CiAgICAgUmVmPFdlYlBhZ2U+IHByb3RlY3RlZFBhZ2Uo
KSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgUmV0YWluUHRyPE5TRGF0YT4pIGNv
bnN0IGZpbmFsOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBjaHJvbWVEZXN0cm95ZWQo
KSBmaW5hbDsKICAgICAKQEAgLTQ5Niw0ICs1MDAsMTUgQEAgcHJpdmF0ZToKICAgICBDaGVja2Vk
UmVmPFdlYlBhZ2U+IG1fcGFnZTsKIH07CiAKK2NsYXNzIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVk
Tm90aWZpY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBBWFJlbGF5UHJvY2Vzc1N1c3Bl
bmRlZE5vdGlmaWNhdGlvbihSZWY8V2ViUGFnZT4sIGJvb2wgbWVzc2FnZVN1c3BlbmRlZEF1dG9t
YXRpY2FsbHkpOworICAgIH5BWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbigpOwor
CisgICAgdm9pZCBzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGJvb2wgc3VzcGVuZGVkKTsKK3By
aXZhdGU6CisgICAgQ2hlY2tlZFJlZjxXZWJQYWdlPiBtX3BhZ2U7CisgICAgYm9vbCBtX21lc3Nh
Z2VTdXNwZW5kZWRBdXRvbWF0aWNhbGx5OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0KaW5kZXggNDQxMzAxMDM0OWU4Li4yMWQ3ZjYyODU3
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0KQEAgLTI5LDggKzI5LDE3IEBACiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbXBvcnQgIldlYkljb25VdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgPFdlYkNvcmUvSWNvbi5oPgogCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0ICJBcHBsaWNhdGlvblNlcnZpY2VzU1BJLmgiCisKK2V4dGVybiAiQyIg
QVhFcnJvciBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhBWFN1c3BlbmRT
dGF0dXMpOworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw2ICs0OCwxNyBAQCBSZWZQdHI8SWNv
bj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGZpbGVuYW1lcwogICAgIHJldHVybiBJY29uOjpjcmVhdGUoaWNvbkZvckZpbGVzKGZpbGVu
YW1lcykuZ2V0KCkpOwogfQogCit2b2lkIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0
aW9uOjpzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGJvb2wgc3VzcGVuZGVkKQoreworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhz
dXNwZW5kZWQgPyBBWFN1c3BlbmRTdGF0dXNTdXNwZW5kZWQgOiBBWFN1c3BlbmRTdGF0dXNSdW5u
aW5nKTsKKyNlbHNlCisgICAgTlNEaWN0aW9uYXJ5ICptZXNzYWdlID0gQHsgQCJwaWQiIDogQChn
ZXRwaWQoKSksIEAic3VzcGVuZGVkIiA6IEAoc3VzcGVuZGVkKSB9OworICAgIE5TRGF0YSAqZGF0
YSA9IFtOU0tleWVkQXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6bWVzc2FnZSBy
ZXF1aXJpbmdTZWN1cmVDb2Rpbmc6WUVTIGVycm9yOm5pbF07CisgICAgbV9wYWdlLT5yZWxheUFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb24oIkFYUHJvY2Vzc1N1c3BlbmRlZCJfcywgZGF0YSk7Cisj
ZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0KaW5kZXggZjc1ZDBjMTE3NjRi
Li43N2QyNDJkMTk2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCkBAIC0x
NzksNiArMTc5LDExIEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG93RGF0YURldGVjdG9yc1VJ
Rm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBSZXRhaW5QdHI8TlNEYXRhPiBub3Rp
ZmljYXRpb25EYXRhKSBjb25zdAoreworICAgIHJldHVybiBwcm90ZWN0ZWRQYWdlKCktPnJlbGF5
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3RpZmljYXRpb25E
YXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShJ
T1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAppbmRleCA3ODI3ZDQ3ZGFkMDYuLmM1YWMyMzQ3YzJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTc4OTAsNyArNzg5MCwxMCBAQCBXZWJD
b3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIFdlYlBhZ2U6OnJlcXVlc3RET01QYXN0ZUFjY2Vz
cyhXZWJDb3JlOjpET01QYXN0ZQogICAgIC8vIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgPHJkYXI6
Ly9wcm9ibGVtLzE2MjA3MDAyPiBpcyByZXNvbHZlZC4KICAgICBwcmVlbXB0aXZlbHlTZW5kQXV0
b2NvcnJlY3Rpb25Db250ZXh0KCk7CiAjZW5kaWYKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5k
U3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdERPTVBh
c3RlQWNjZXNzKHBhc3RlQWNjZXNzQ2F0ZWdvcnksIHJlY3RGb3JFbGVtZW50QXRJbnRlcmFjdGlv
bkxvY2F0aW9uKCksIG9yaWdpbklkZW50aWZpZXIpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZv
cm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisKKyAgICBBWFJlbGF5UHJvY2Vzc1N1c3Bl
bmRlZE5vdGlmaWNhdGlvbigqdGhpcywgdHJ1ZSk7CisKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVxdWVzdERP
TVBhc3RlQWNjZXNzKHBhc3RlQWNjZXNzQ2F0ZWdvcnksIHJlY3RGb3JFbGVtZW50QXRJbnRlcmFj
dGlvbkxvY2F0aW9uKCksIG9yaWdpbklkZW50aWZpZXIpKTsKICAgICBhdXRvIFtyZXNwb25zZV0g
PSBzZW5kUmVzdWx0LnRha2VSZXBseU9yKFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2U6
OkRlbmllZEZvckdlc3R1cmUpOwogICAgIHJldHVybiByZXNwb25zZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBjZGM2ZTk2MjJkNzIuLjBkZjQw
Y2E1MjU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNzcwLDYgKzc3MCw5IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3
VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIFdlYkNvcmU6OkludFBvaW50
IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lk
IHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8
TlNEYXRhPik7CisjZW5kaWYKIAogICAgIFJlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25hcHNob3RX
aXRoT3B0aW9ucyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZG91YmxlIGFkZGl0aW9uYWxTY2Fs
ZUZhY3RvciwgU25hcHNob3RPcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA4N2RjMzk1ODM4ZTMuLmE2OTdh
MDAzMjNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KQEAgLTI1Niw2ICsyNTYsMTIgQEAgUmV0YWluUHRyPE5TRGF0YT4gV2Vi
UGFnZTo6YWNjZXNzaWJpbGl0eVJlbW90ZVRva2VuRGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIG5l
d0FjY2Vzc2liaWxpdHlSZW1vdGVUb2tlbihbTlNVVUlEIFVVSURdKTsKIH0KIAordm9pZCBXZWJQ
YWdlOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiBub3RpZmlj
YXRpb25OYW1lLCBSZXRhaW5QdHI8TlNEYXRhPiBub3RpZmljYXRpb25EYXRhKQoreworICAgIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhVG9rZW4gPSBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW25vdGlmaWNhdGlvbkRhdGEgYnl0ZXNdKSwgW25vdGlm
aWNhdGlvbkRhdGEgbGVuZ3RoXSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
ZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uTmFtZSwgZGF0YVRva2Vu
KSk7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXB1dGVFZGl0YWJsZVJvb3RIYXNDb250ZW50QW5kUGxh
aW5UZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRWRpdG9yU3RhdGU6OlBv
c3RMYXlvdXREYXRhJiBkYXRhKQogewogICAgIGRhdGEuaGFzQ29udGVudCA9IGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IGM0YjE0YjYwNGMzOC4uOWE2
NDNhMmI2YzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC01
Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiV2ViQmFkZ2VDbGllbnQuaCIKICNpbmNsdWRlICJXZWJC
cm9hZGNhc3RDaGFubmVsUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJDYWNoZVN0b3JhZ2VQcm92
aWRlci5oIgorI2luY2x1ZGUgIldlYkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYkNvbm5l
Y3Rpb25Ub1VJUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZUphci5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtNjk5LDcgKzcwMCw4IEBAIHZvaWQgV2ViUHJv
Y2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZShib29sIGlzSW5Qcm9jZXNzQ2FjaGUpCiAKICAgICB1
cGRhdGVQcm9jZXNzTmFtZShJc0luUHJvY2Vzc0luaXRpYWxpemF0aW9uOjpObyk7CiAKLSAgICBJ
UEM6OkFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGlzSW5Qcm9jZXNz
Q2FjaGUpOworICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gZm9jdXNlZFdlYlBhZ2UoKSkKKyAgICAg
ICAgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oKndlYlBhZ2UsIGZhbHNlKS5z
ZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGlzSW5Qcm9jZXNzQ2FjaGUpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oaXNJblByb2Nlc3NDYWNoZSk7CiAjZW5kaWYKQEAgLTE2MjgsNyArMTYzMCw4
IEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlzU3VzcGVuc2lvbklt
bWluZW50LCBNb25vdG9uaWNUaW1lIGVzdGltCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgSVBDOjpBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlv
bih0cnVlKTsKKyAgICBpZiAoYXV0byogd2ViUGFnZSA9IGZvY3VzZWRXZWJQYWdlKCkpCisgICAg
ICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKCp3ZWJQYWdlLCBmYWxzZSku
c2VuZFByb2Nlc3NTdXNwZW5kTWVzc2FnZSh0cnVlKTsKICAgICB1cGRhdGVGcmVlemVyU3RhdHVz
KCk7CiAjZW5kaWYKIApAQCAtMTY5Myw3ICsxNjk2LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpwcm9j
ZXNzRGlkUmVzdW1lKCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBJ
UEM6OkFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNlKTsKKyAg
ICBpZiAoYXV0byogd2ViUGFnZSA9IGZvY3VzZWRXZWJQYWdlKCkpCisgICAgICAgIEFYUmVsYXlQ
cm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKCp3ZWJQYWdlLCBmYWxzZSkuc2VuZFByb2Nlc3NT
dXNwZW5kTWVzc2FnZShmYWxzZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudElPUy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50SU9TLmgKaW5kZXggYWNiMzdjMzlhOGRhLi41NWIwYzQ3OTJmZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZWxl
Y3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkgZmluYWw7CiAgICAg
UmVmUHRyPFdlYkNvcmU6OlBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVw
TWVudUNsaWVudCYpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1
cE1lbnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQmKSBj
b25zdCBmaW5hbDsKLQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNv
bnN0IFN0cmluZyYsIFJldGFpblB0cjxOU0RhdGE+KSBjb25zdCBmaW5hbCB7IH0KICAgICB2b2lk
IHdlYkFwcE9yaWVudGF0aW9uc1VwZGF0ZWQoKSBmaW5hbDsKICAgICB2b2lkIGZvY3VzZWRFbGVt
ZW50Q2hhbmdlZChXZWJDb3JlOjpFbGVtZW50KikgZmluYWw7CiAgICAgdm9pZCBzaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbywgV2ViQ29yZTo6Um91dGVTaGFyaW5nUG9saWN5
LCBjb25zdCBTdHJpbmcmKSBmaW5hbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468170</attachid>
            <date>2023-10-11 01:37:15 -0700</date>
            <delta_ts>2023-10-12 07:50:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-262960-20231011013714.patch</filename>
            <type>text/plain</type>
            <size>44932</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">RnJvbSA0NTA0MmYzNmQ5NzIzOGUxNTBjZDU3MWIwY2RhMDAzMThlODJiNTRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpcyBGbGVpemFjaCA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4K
RGF0ZTogVHVlLCAxMCBPY3QgMjAyMyAwODo1OTozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFY
OiBSZW1vdmUgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXItc3lzdGVtd2lkZSIgc2FuZGJveAog
ZXhjZXB0aW9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI5NjAg
cmRhcjovLzExNjM4NzYxNQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpSZW1vdmUgdGhl
IGV4Y2VwdGlvbiB0byBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gd2lkZSBzZXJ2ZXIgZnJvbSBXZWJD
b250ZW50LgoKSW5zdGVhZCByZWxheSBub3RpZmljYXRpb25zIGJhY2sgdG8gdGhlIENsaWVudCBz
byB0aGF0IHRoYXQgcHJvY2VzcyBjYW4gcmVsYXkgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIHRo
ZSBzeXN0ZW0gc2VydmVyLgoKVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZSBJbmZvcm1TdXNw
ZW5kIG9wdGlvbiBpbiBDb25uZWN0aW9uIGJlY2F1c2UgaXQgY2FuIGJlIGhhbmRsZWQgYXQgYSBo
aWdoZXIgbGV2ZWwuCgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1Mu
bW06CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24pOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToK
KiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5U2Nyb2xsOl0pOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOl0pOgooLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBoYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21l
Om5vdGlmaWNhdGlvbkRhdGE6XSk6CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBv
c3ROb3RpZmljYXRpb246XSk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcDoKKFdlYkNvcmU6OkNo
cm9tZTo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIGNvbnN0KToKKiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmg6
CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oOgoqIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgooSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3lu
Y1JlcGx5KToKKiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6CiogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tOgooSVBDOjpB
Y2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6IERlbGV0ZWQuCihJUEM6
OkNvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UpOiBEZWxldGVkLgooSVBDOjpDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKiBTb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94
UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbjoKKiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKToKKiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CiogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbik6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToK
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgoq
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24pOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1
c3BlbmRlZE5vdGlmaWNhdGlvbjo6fkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9j
ZXNzU3VzcGVuZE1lc3NhZ2UpOgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRv
dyk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgooV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpwcmludCk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UpOgoqIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
OgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
biBjb25zdCk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CihXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CiogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgooV2ViS2l0OjpXZWJQYWdlOjpyZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24pOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CihXZWJL
aXQ6OldlYlByb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgooV2ViS2l0OjpXZWJQcm9jZXNzOjpw
cm9jZXNzRGlkUmVzdW1lKToKKiBTb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRJT1MuaDoKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCAgfCAgNCArKwogLi4uL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0gICAgIHwgMjUgKysrKysrKy0tLS0KIC4uLi9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MuaCAgICB8ICA3ICsrLQogLi4uL2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbSAgIHwgMjIgKysrKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmggICAgICAgICAgfCAgMyArKwogU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwICAgICAgICAgICAgICAgIHwgIDcgKysrCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5oICAgICAgICAgICAgICAgICAgfCAgMyArKwogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaCAgICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hv
c3RXaW5kb3cuaCAgICAgICAgICB8ICA4ICsrKysKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uY3BwICAgICB8IDEzICstLS0tLQogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5oICAgICAgIHwgMTMgKystLS0tCiAuLi4vUGxhdGZvcm0vSVBDL2NvY29h
L0Nvbm5lY3Rpb25Db2NvYS5tbSAgICAgfCAzOSAtLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2UubW0gICAgfCAgMiArCiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCAgICAgfCAgMSArCiAuLi4vaW9zL2NvbS5hcHBs
ZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbiAgICAgfCAgMSAtCiAuLi4vVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tICAgfCAgMiArLQogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oICAgICAgICB8ICAzICsrCiAuLi4vV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4gfCAgMyArKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmggIHwgIDEgKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tIHwgIDkgKysrLQogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbSAgIHwgIDcgKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCAgICAgICAgfCA0NSArKysrKysrKysrKysrKysrLS0tCiAuLi4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmggICAgICAgICAgfCAxNyArKysrKysrCiAuLi4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0gICAgfCAyNCArKysrKysrKysrCiAuLi4vV2Vi
Q29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbSAgfCAgNSArKysKIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwICB8ICA1ICsrLQogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oICAgIHwgIDMgKysKIC4uLi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gICAgICB8ICA4ICsrKysKIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCAgICAgICB8IDEwICsrKy0tCiAuLi4vaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5oICAgfCAgMiArLQogMzEgZmlsZXMgY2hh
bmdlZCwgMjA3IGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggYWQyYjRjNWQzYmIzLi5lYWRj
YjQ0YzI5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oCkBAIC00NzYsNiArNDc2LDEwIEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjxBWElEPj4gcmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0
aW9uVHlwZSk7CiAgICAgdm9pZCB1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb24oU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBSZXRhaW5Q
dHI8TlNEYXRhPiBub3RpZmljYXRpb25EYXRhKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICB2b2lkIHNjaGVkdWxlT2JqZWN0UmVnaW9uc1Vw
ZGF0ZShib29sIHNjaGVkdWxlSW1tZWRpYXRlbHkgPSBmYWxzZSkgeyBtX2dlb21ldHJ5TWFuYWdl
ci0+c2NoZWR1bGVPYmplY3RSZWdpb25zVXBkYXRlKHNjaGVkdWxlSW1tZWRpYXRlbHkpOyB9CiAg
ICAgdm9pZCB3aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpIHsgbV9nZW9tZXRyeU1hbmFnZXItPndp
bGxVcGRhdGVPYmplY3RSZWdpb25zKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCmluZGV4IDViMmY5Y2FhYjg5MC4uNjAx
ZDhiZjQxYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9B
WE9iamVjdENhY2hlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L0FYT2JqZWN0Q2FjaGVJT1MubW0KQEAgLTI5LDggKzI5LDkgQEAKICNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eU9iamVjdC5oIgotI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIK
KyNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9ydCAiUmVuZGVyT2JqZWN0LmgiCisjaW1wb3J0ICJX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIgogCiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKQEAgLTkwLDI0ICs5MSwzMCBAQCBBU0NJSUxpdGVyYWwgQVhPYmplY3RDYWNoZTo6
bm90aWZpY2F0aW9uUGxhdGZvcm1OYW1lKEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbgogICAg
IHJldHVybiBuYW1lOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbGF5QWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbihTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIFJldGFpblB0cjxOU0RhdGE+
IG5vdGlmaWNhdGlvbkRhdGEpCit7CisgICAgYXV0byogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgp
OworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+Y2hyb21lKCku
cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNh
dGlvbkRhdGEpOworfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNh
dGlvbihBWENvcmVPYmplY3QqIG9iamVjdCwgQVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQog
ewogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBpT1Mgbm90aWZp
Y2F0aW9ucyBtdXN0IHVsdGltYXRlbHkgY2FsbCBVSUtpdCBVSUFjY2Vzc2liaWxpdHlQb3N0Tm90
aWZpY2F0aW9uLgotICAgIC8vIEJ1dCBXZWJDb3JlIGlzIG5vdCBsaW5rZWQgd2l0aCBVSUtpdC4g
U28gYSB3b3JrYXJvdW5kIGlzIHRvIG92ZXJyaWRlIHRoZSB3cmFwcGVyJ3MKLSAgICAvLyBwb3N0
Tm90aWZpY2F0aW9uIG1ldGhvZCBpbiB0aGUgc3lzdGVtIFdlYktpdEFjY2Vzc2liaWxpdHkgYnVu
ZGxlIHRoYXQgZG9lcyBsaW5rIFVJS2l0LgotICAgIGF1dG8gbm90aWZpY2F0aW9uTmFtZSA9IG5v
dGlmaWNhdGlvblBsYXRmb3JtTmFtZShub3RpZmljYXRpb24pOwotICAgIGlmIChub3RpZmljYXRp
b25OYW1lLmlzTnVsbCgpKQorICAgIGF1dG8gc3RyaW5nTm90aWZpY2F0aW9uID0gQVhPYmplY3RD
YWNoZTo6bm90aWZpY2F0aW9uUGxhdGZvcm1OYW1lKG5vdGlmaWNhdGlvbik7CisgICAgaWYgKHN0
cmluZ05vdGlmaWNhdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
bnNOb3RpZmljYXRpb25OYW1lID0gbm90aWZpY2F0aW9uTmFtZS5jcmVhdGVOU1N0cmluZygpOwot
ICAgIFtvYmplY3QtPndyYXBwZXIoKSBwb3N0Tm90aWZpY2F0aW9uOm5zTm90aWZpY2F0aW9uTmFt
ZS5nZXQoKV07CisgICAgYXV0byBub3RpZmljYXRpb25OYW1lID0gc3RyaW5nTm90aWZpY2F0aW9u
LmNyZWF0ZU5TU3RyaW5nKCk7CisgICAgW29iamVjdC0+d3JhcHBlcigpIGFjY2Vzc2liaWxpdHlP
dmVycmlkZVByb2Nlc3NOb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CiAKICAg
ICAvLyBUbyBzaW11bGF0ZSBBWCBub3RpZmljYXRpb25zIGZvciBMYXlvdXRUZXN0cyBvbiB0aGUg
c2ltdWxhdG9yLCBjYWxsCiAgICAgLy8gdGhlIHdyYXBwZXIncyBhY2Nlc3NpYmlsaXR5UG9zdGVk
Tm90aWZpY2F0aW9uLgotICAgIFtvYmplY3QtPndyYXBwZXIoKSBhY2Nlc3NpYmlsaXR5UG9zdGVk
Tm90aWZpY2F0aW9uOm5zTm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CisgICAgW29iamVjdC0+d3Jh
cHBlcigpIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZS5n
ZXQoKV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZVBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgY29uc3QgQVhUZXh0
U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCmluZGV4IDZjNmJiOTFmODBjMC4uZWE1OTUyMWQ3MDg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgKQEAgLTc2LDcgKzc2LDEy
IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eUFjY2VwdGVkSW5saW5l
VGV4dENvbXBsZXRpb24gPSBAIlVJQWNjZXNzCiAKIC0gKEJPT0wpaXNBdHRhY2htZW50OwogCi0t
ICh2b2lkKXBvc3ROb3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZTsKKy8v
IFRoaXMgaW50ZXJhY3RzIHdpdGggQWNjZXNzaWJpbGl0eSBzeXN0ZW0gdG8gcG9zdCBwcm9jZXNz
IHNvbWUgbm90aWZpY2F0aW9ucy4KKy0gKHZvaWQpYWNjZXNzaWJpbGl0eU92ZXJyaWRlUHJvY2Vz
c05vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lOworCisvLyBUaGlzIGlz
IGNhbGxlZCBieSB0aGUgQWNjZXNzaWJpbGl0eSBzeXN0ZW0gdG8gcmVsYXkgYmFjayB0byB0aGUg
Y2hyb21lLgorLSAodm9pZCloYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21lOihOU1N0cmlu
ZyAqKW5vdGlmaWNhdGlvbk5hbWUgbm90aWZpY2F0aW9uRGF0YTooTlNEYXRhICopbm90aWZpY2F0
aW9uRGF0YTsKKwogQGVuZAogCiAjZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBM
QVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
CmluZGV4IGFiMzE5Mzg2OTRiYS4uYTYyNWI0N2EwMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTY4Nyw3ICsxNjg3LDcgQEAgLSAoQk9PTClhY2Nlc3Np
YmlsaXR5U2Nyb2xsOihVSUFjY2Vzc2liaWxpdHlTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uCiAK
ICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGF1dG8gbm90aWZpY2F0aW9uTmFtZSA9IEFYT2Jq
ZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBsYXRmb3JtTmFtZShBWE9iamVjdENhY2hlOjpBWE5vdGlm
aWNhdGlvbjo6QVhQYWdlU2Nyb2xsZWQpLmNyZWF0ZU5TU3RyaW5nKCk7Ci0gICAgICAgIFtzZWxm
IHBvc3ROb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CisgICAgICAgIFtzZWxm
IGFjY2Vzc2liaWxpdHlPdmVycmlkZVByb2Nlc3NOb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFt
ZS5nZXQoKV07CiAKICAgICAgICAgQ0dQb2ludCBzY3JvbGxQb3MgPSBbc2VsZiBfYWNjZXNzaWJp
bGl0eVNjcm9sbFBvc2l0aW9uXTsKICAgICAgICAgTlNTdHJpbmcgKnRlc3RTdHJpbmcgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkFYU2Nyb2xsIFtwb3NpdGlvbjogJS4yZiAlLjJmXSIs
IHNjcm9sbFBvcy54LCBzY3JvbGxQb3MueV07CkBAIC0xNjk4LDYgKzE2OTgsMjEgQEAgLSAoQk9P
TClhY2Nlc3NpYmlsaXR5U2Nyb2xsOihVSUFjY2Vzc2liaWxpdHlTY3JvbGxEaXJlY3Rpb24pZGly
ZWN0aW9uCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLSAodm9pZClhY2Nlc3NpYmlsaXR5T3Zl
cnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUKK3sK
KyAgICAvLyBUaGlzIGlzIG92ZXJyaWRlbiBieSB0aGUgQWNjZXNzaWJpbGl0eSBzeXN0ZW0gdG8g
cG9zdC1wcm9jZXNzIG5vdGlmaWNhdGlvbnMuCisgICAgLy8gV2hlbiBpdCBpcyBkb25lLCBpdCB3
aWxsIGNhbGwgYmFjayBpbnRvIGhhbmRsZU5vdGlmaWNhdGlvblJlbGF5VG9DaHJvbWUuCit9CisK
Ky0gKHZvaWQpaGFuZGxlTm90aWZpY2F0aW9uUmVsYXlUb0Nocm9tZTooTlNTdHJpbmcgKilub3Rp
ZmljYXRpb25OYW1lIG5vdGlmaWNhdGlvbkRhdGE6KE5TRGF0YSAqKW5vdGlmaWNhdGlvbkRhdGEK
K3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIG5vdGlmaWNhdGlvbiA9IFN0cmluZyhub3RpZmljYXRpb25OYW1l
KTsKKyAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLT5yZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25EYXRhKTsKK30K
KwogLSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5UmVsYXRpdmVGcmFtZQogewogICAgIGF1dG8gcmVj
dCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVu
dFJlY3QoKSkpOwpAQCAtMjA0NiwxMSArMjA2MSw2IEBAIC0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFy
ZW50Rm9yU3VidmlldzooaWQpc3VidmlldwogICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQp
cG9zdE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lCi17Ci0gICAgLy8g
VGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFw
cHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4KLX0KLQogLy8gVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRo
ZSBVSUtpdCB3cmFwcGVyIHRvIGNhbGN1bGF0ZSBhbiBhcHByb3ByaWF0ZSBkZXNjcmlwdGlvbiBv
ZiBzY3JvbGwgc3RhdHVzLgogLSAoQ0dQb2ludClfYWNjZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9u
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggMDdhZTA1N2U3NGZhLi5m
NTdmYTdhZTBjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTExNyw2
ICsxMTcsOSBAQCBjbGFzcyBFbXB0eUNocm9tZUNsaWVudCA6IHB1YmxpYyBDaHJvbWVDbGllbnQg
ewogICAgIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByKSBjb25zdCBm
aW5hbCB7IHJldHVybiByOyB9CiAgICAgSW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9v
dFZpZXcoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHA7IH07CiAgICAg
SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiByKSBj
b25zdCBmaW5hbCB7IHJldHVybiByOyB9OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
dm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3Qg
UmV0YWluUHRyPE5TRGF0YT4pIGNvbnN0IGZpbmFsIHsgfTsKKyNlbmRpZgogCiAgICAgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmKSBmaW5hbCB7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGFmYjhhNzA2Nzc0Zi4uOTNiZjUyOGQxYWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0xMjcsNiArMTI3LDEzIEBAIEludFJlY3QgQ2hy
b21lOjpyb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAogICAgIHJldHVybiBtX2NsaWVudC0+cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4o
cmVjdCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBDaHJvbWU6OnJlbGF5
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUs
IFJldGFpblB0cjxOU0RhdGE+IG5vdGlmaWNhdGlvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY2xpZW50LT5yZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uTmFt
ZSwgbm90aWZpY2F0aW9uRGF0YSk7Cit9CisjZW5kaWYKKwogUGxhdGZvcm1QYWdlQ2xpZW50IENo
cm9tZTo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQt
PnBsYXRmb3JtUGFnZUNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggZjgwMzMwNTgxZGJl
Li4wNGM0ZTUyOGY1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtMTA1LDYgKzEwNSw5IEBAIHB1
YmxpYzoKICAgICBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJ
bnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2li
aWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3Jt
UGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCBvdmVycmlkZTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
KGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uTmFtZSwgUmV0YWluUHRyPE5TRGF0YT4gbm90aWZp
Y2F0aW9uRGF0YSkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNldEN1cnNvcihj
b25zdCBDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91
c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5k
ZXggMzMyOTNmMzczMTBkLi40ZDk3ZWI0NDM2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtMjI1LDYgKzIyNSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgcm9v
dFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50
UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVu
KGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmlu
ZyYsIFJldGFpblB0cjxOU0RhdGE+KSBjb25zdCA9IDA7CisjZW5kaWYKIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmKSA9
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCBjYjY1Mjk5OWY2OTMu
LjViMDk2MjlhODA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdp
bmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMjgs
OCArMjgsMTMgQEAKICNpbmNsdWRlICJHcmFwaGljc0NsaWVudC5oIgogI2luY2x1ZGUgIldpZGdl
dC5oIgogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK09CSkNfQ0xBU1MgTlNEYXRhOworI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0YVNlZ21lbnQ7CiBjbGFzcyBD
dXJzb3I7CiAKIHVzaW5nIEZyYW1lc1BlclNlY29uZCA9IHVuc2lnbmVkOwpAQCAtNTcsNiArNjIs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3Qg
SW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFBvaW50IGFjY2Vzc2liaWxpdHlT
Y3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JikgY29u
c3QgPSAwOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdmlydHVhbCB2b2lkIHJlbGF5
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8TlNEYXRh
PikgY29uc3QgPSAwOworI2VuZGlmCiAKICAgICAvLyBNZXRob2QgZm9yIHJldHJpZXZpbmcgdGhl
IG5hdGl2ZSBjbGllbnQgb2YgdGhlIHBhZ2UuCiAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGll
bnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCAxNmEwNTYzMDg4MzguLjJjNzE3NjhlNDVjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTc5Nyw4ICs3OTcs
NiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkoU3luY1JlcXVlc3RJRCBzeW5j
UmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogewogICAgIHRpbWVvdXQgPSB0aW1lb3V0UmVz
cGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyh0aW1lb3V0KTsKIAotICAgIHdpbGxTZW5k
U3luY01lc3NhZ2Uoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIGJvb2wgdGltZWRPdXQgPSBmYWxz
ZTsKICAgICB3aGlsZSAoIXRpbWVkT3V0KSB7CiAgICAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB3
ZSBoYXZlIGFueSBtZXNzYWdlcyB0aGF0IHdlIG5lZWQgdG8gcHJvY2Vzcy4KQEAgLTgxNCwxNiAr
ODEyLDEyIEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5jUmVxdWVzdElE
IHN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKHN5bmNSZXF1ZXN0SUQsIHBlbmRpbmdTeW5jUmVwbHkuc3luY1JlcXVlc3RJRCA9PSBzeW5j
UmVxdWVzdElEKTsKIAogICAgICAgICAgICAgLy8gV2UgZm91bmQgdGhlIHN5bmMgcmVwbHkuCi0g
ICAgICAgICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNlaXZlUmVwbHkpIHsKLSAgICAg
ICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0aW9ucyk7CisgICAgICAg
ICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNlaXZlUmVwbHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShwZW5kaW5nU3luY1JlcGx5LnJlcGx5RGVjb2RlcikgfTsKLSAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4K
LSAgICAgICAgICAgIGlmICghbV9zaG91bGRXYWl0Rm9yU3luY1JlcGxpZXMpIHsKLSAgICAgICAg
ICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0aW9ucyk7CisgICAgICAgICAg
ICBpZiAoIW1fc2hvdWxkV2FpdEZvclN5bmNSZXBsaWVzKQogICAgICAgICAgICAgICAgIHJldHVy
biBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBQcm9jZXNzaW5nIGEgc3luYyBtZXNzYWdlIGNvdWxkIGNhdXNlIHRoZSBjb25u
ZWN0aW9uIHRvIGJlIGludmFsaWRhdGVkLgpAQCAtODMyLDcgKzgyNiw2IEBAIGF1dG8gQ29ubmVj
dGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQsIE1lc3Nh
Z2VOYW1lIG1lc3NhCiAgICAgICAgIC8vIGFueSBtb3JlIGluY29taW5nIG1lc3NhZ2VzLgogICAg
ICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSVBD
LCAiQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogQ29ubmVjdGlvbiBubyBsb25nZXIgdmFs
aWQsIGlkPSUiIFBSSXU2NCwgc3luY1JlcXVlc3RJRC50b1VJbnQ2NCgpKTsKLSAgICAgICAgICAg
IGRpZFJlY2VpdmVTeW5jUmVwbHkoc2VuZFN5bmNPcHRpb25zKTsKICAgICAgICAgICAgIHJldHVy
biBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247CiAgICAgICAgIH0KIApAQCAtODQ4LDggKzg0MSw2
IEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5jUmVxdWVzdElEIHN5bmNS
ZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgUkVMRUFTRV9MT0dfRVJST1IoSVBDLCAi
Q29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogVGltZWQtb3V0IHdoaWxlIHdhaXRpbmcgZm9y
IHJlcGx5IGZvciAlcywgaWQ9JSIgUFJJdTY0LCBkZXNjcmlwdGlvbihtZXNzYWdlTmFtZSksIHN5
bmNSZXF1ZXN0SUQudG9VSW50NjQoKSk7CiAjZW5kaWYKIAotICAgIGRpZFJlY2VpdmVTeW5jUmVw
bHkoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIHJldHVybiBFcnJvcjo6VGltZW91dDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4IGM2M2JiZTI2ZDU0YS4u
ZmNmZjgxOThhZjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCkBA
IC04NSwxMSArODUsOSBAQCBlbnVtIGNsYXNzIFNlbmRPcHRpb24gOiB1aW50OF90IHsKIH07CiAK
IGVudW0gY2xhc3MgU2VuZFN5bmNPcHRpb24gOiB1aW50OF90IHsKLSAgICAvLyBVc2UgdGhpcyB0
byBpbmZvcm0gdGhhdCB0aGlzIHN5bmMgY2FsbCB3aWxsIHN1c3BlbmQgdGhpcyBwcm9jZXNzIHVu
dGlsIHRoZSB1c2VyIHJlc3BvbmRzIHdpdGggaW5wdXQuCi0gICAgSW5mb3JtUGxhdGZvcm1Qcm9j
ZXNzV2lsbFN1c3BlbmQgPSAxIDw8IDAsCi0gICAgVXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JU
ZXN0aW5nID0gMSA8PCAxLAotICAgIEZvcmNlRGlzcGF0Y2hXaGVuRGVzdGluYXRpb25Jc1dhaXRp
bmdGb3JVbmJvdW5kZWRTeW5jUmVwbHkgPSAxIDw8IDIsCi0gICAgTWFpbnRhaW5PcmRlcmluZ1dp
dGhBc3luY01lc3NhZ2VzID0gMSA8PCAzLAorICAgIFVzZUZ1bGx5U3luY2hyb25vdXNNb2RlRm9y
VGVzdGluZyA9IDEgPDwgMCwKKyAgICBGb3JjZURpc3BhdGNoV2hlbkRlc3RpbmF0aW9uSXNXYWl0
aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5ID0gMSA8PCAxLAorICAgIE1haW50YWluT3JkZXJpbmdX
aXRoQXN5bmNNZXNzYWdlcyA9IDEgPDwgMiwKIH07CiAKIGVudW0gY2xhc3MgV2FpdEZvck9wdGlv
biB7CkBAIC01MzAsOSArNTI4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVJbmNvbWlu
Z01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+KSBXVEZfUkVRVUlSRVNfTE9DSyhtX2lu
Y29taW5nTWVzc2FnZXNMb2NrKTsKICAgICBzaXplX3QgaW5jb21pbmdNZXNzYWdlc0Rpc3BhdGNo
aW5nQmF0Y2hTaXplKCkgY29uc3Q7CiAKLSAgICB2b2lkIHdpbGxTZW5kU3luY01lc3NhZ2UoT3B0
aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlU3luY1JlcGx5KE9w
dGlvblNldDxTZW5kU3luY09wdGlvbj4pOwotCiAgICAgVGltZW91dCB0aW1lb3V0UmVzcGVjdGlu
Z0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhUaW1lb3V0KSBjb25zdDsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQpAQCAtODk5LDYgKzg5NCw0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHN0ZDo6YXRv
bWljPHVuc2lnbmVkPiB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ0NvdW50OwogfTsKIAotdm9pZCBB
Y2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihib29sIHN1c3BlbmRlZCk7
Ci0KIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCmluZGV4IGVlOTJhODUyOTJkMi4uZjZlZjMwZWI0
NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9jb2NvYS9Db25uZWN0
aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVj
dGlvbkNvY29hLm1tCkBAIC00OSwyNSArNDksOSBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKLSNpbXBvcnQgPFVJS2l0L1VJQWNjZXNz
aWJpbGl0eS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPEFYUnVu
dGltZS9BWERlZmluZXMuaD4KLSNpbXBvcnQgPEFYUnVudGltZS9BWE5vdGlmaWNhdGlvbkNvbnN0
YW50cy5oPgotI2Vsc2UKLSNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiAw
CiAjZW5kaWYKIAotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFwcGxp
Y2F0aW9uU2VydmljZXNTUEkuaCIKLQotZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5v
dGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7Ci0KLSNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCi0KIG5hbWVzcGFjZSBJUEMgewogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGlu
bGluZU1lc3NhZ2VNYXhTaXplID0gNDA5NjsKQEAgLTU5MCwyOSArNTc0LDYgQEAgYm9vbCBDb25u
ZWN0aW9uOjpraWxsKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oYm9vbCBzdXNwZW5kZWQpCi17Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKHN1
c3BlbmRlZCA/IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFYU3VzcGVuZFN0YXR1c1J1bm5p
bmcpOwotI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSUFjY2Vzc2liaWxpdHlQb3N0
Tm90aWZpY2F0aW9uKGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24sIEB7IEAicGlkIiA6
IEAoZ2V0cGlkKCkpLCBAInN1c3BlbmRlZCIgOiBAKHN1c3BlbmRlZCkgfSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShzdXNwZW5kZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6
d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0
aW9ucykKLXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRhaW5zKElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSAmJiBXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICBBY2Nlc3NpYmlsaXR5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsKLX0KLQotdm9pZCBDb25uZWN0aW9u
OjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zKQotewotICAgIGlmIChzZW5kU3luY09wdGlvbnMuY29udGFpbnMoSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpICYmIFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgIEFjY2Vzc2liaWxp
dHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNlKTsKLX0KLQogcGlkX3QgQ29ubmVj
dGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKIHsKICAgICBpZiAoIW1feHBjQ29ubmVjdGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvQ29jb2FJbWFnZS5t
bSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvQ29jb2FJbWFnZS5tbQppbmRleCAzZWI5
YjFkYTJmZTguLjFlZDMwZGY3ZjZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9jb2NvYS9Db2NvYUltYWdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2Ev
Q29jb2FJbWFnZS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCA8Q29yZVNlcnZpY2VzL0Nv
cmVTZXJ2aWNlcy5oPgogI2VuZGlmCiAKKyNpbXBvcnQgPEltYWdlSU8vSW1hZ2VJTy5oPgorCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogUmV0YWluUHRyPE5TRGF0YT4gdHJhbnNjb2RlKENHSW1hZ2VS
ZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHR5cGVJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAyYmQ3ZGExMzZkYzkuLjA5MWQwNGE4MDVlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTExMDYsNiAr
MTEwNiw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBfVUlTY3JvbGxEZXZpY2VDYXRl
Z29yeSkgewogLSAoVUlTY3JvbGxWaWV3ICopX3Njcm9sbGVyOwogLSAoQ0dQb2ludClhY2Nlc3Np
YmlsaXR5Q29udmVydFBvaW50RnJvbVNjZW5lUmVmZXJlbmNlQ29vcmRpbmF0ZXM6KENHUG9pbnQp
cG9pbnQ7CiAtIChDR1JlY3QpYWNjZXNzaWJpbGl0eUNvbnZlcnRSZWN0VG9TY2VuZVJlZmVyZW5j
ZUNvb3JkaW5hdGVzOihDR1JlY3QpcmVjdDsKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVJlbGF5Tm90
aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUgbm90aWZpY2F0aW9uRGF0YToo
TlNEYXRhICopbm90aWZpY2F0aW9uRGF0YTsKIC0gKFVJUmVjdEVkZ2UpX2VkZ2VzQXBwbHlpbmdT
YWZlQXJlYUluc2V0c1RvQ29udGVudEluc2V0OwogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2Vi
Q29udGVudC5zYi5pbiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1NhbmRib3hQcm9maWxlcy9p
b3MvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnNiLmluCmluZGV4IDgzYzcyYmM0NDc4My4u
YjZhNWQ2YjUyMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94
UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQu
V2ViQ29udGVudC5zYi5pbgpAQCAtOTI3LDcgKzkyNyw2IEBACiAgICAgICAgIChleHRlbnNpb24g
ImNvbS5hcHBsZS53ZWJraXQuZXh0ZW5zaW9uLm1hY2giKQogICAgICAgICAoZ2xvYmFsLW5hbWUK
ICAgICAgICAgICAgICJjb20uYXBwbGUuZnJvbnRib2FyZC5zeXN0ZW1hcHBzZXJ2aWNlcyIKLSAg
ICAgICAgICAgICJjb20uYXBwbGUuaXBob25lLmF4c2VydmVyLXN5c3RlbXdpZGUiCiAgICAgICAg
ICAgICAiY29tLmFwcGxlLm1vYmlsZWFzc2V0ZC52MiIKICAgICAgICAgICAgICJjb20uYXBwbGUu
bW9iaWxlZ2VzdGFsdC54cGMiKSkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggOWQ2N2RjYWYyMmM5Li5lZjg0
ZjI4ODk2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OnVuYmxvY2tBY2Nlc3NpYmlsaXR5U2VydmVySWZOZWVkZWQoKQogCiAgICAgVmVjdG9y
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaGFuZGxlQXJyYXk7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBoYW5kbGVBcnJheSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZXNGb3JNYWNoTG9va3VwKHsgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXItc3lzdGVtd2lkZSJf
cywgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIl9zIH0sIGF1ZGl0VG9r
ZW4oKSwgU2FuZGJveEV4dGVuc2lvbjo6TWFjaEJvb3RzdHJhcE9wdGlvbnM6OkVuYWJsZU1hY2hC
b290c3RyYXApOworICAgIGhhbmRsZUFycmF5ID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlc0Zvck1hY2hMb29rdXAoeyAiY29tLmFwcGxlLmZyb250Ym9hcmQuc3lzdGVtYXBwc2Vydmlj
ZXMiX3MgfSwgYXVkaXRUb2tlbigpLCBTYW5kYm94RXh0ZW5zaW9uOjpNYWNoQm9vdHN0cmFwT3B0
aW9uczo6RW5hYmxlTWFjaEJvb3RzdHJhcCk7CiAjZW5kaWYKIAogICAgIHNlbmQoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlVuYmxvY2tTZXJ2aWNlc1JlcXVpcmVkQnlBY2Nlc3NpYmlsaXR5KGhhbmRs
ZUFycmF5KSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggZTVjZWI1
NDQ2ZTIzLi4xZDA4NTllOWRjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
QEAgLTM0Niw2ICszNDYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0
IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBy
b290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdmlydHVhbCB2b2lkIHJlbGF5QWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8TlNEYXRhPikgPSAw
OworI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVj
dCByb290Vmlld1RvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZmJjNTYzOTQzMDA0Li43
ZTQ5NmQ5YjE0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0y
Mzk3LDYgKzIzOTcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcm9vdFZpZXdUb1NjcmVlbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik+JiYpOwogICAgIHZvaWQgYWNjZXNzaWJpbGl0eVNjcmVlblRv
Um9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFdlYkNvcmU6OkludFBvaW50KT4mJik7CiAgICAgdm9pZCByb290Vmlld1Rv
QWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbnRSZWN0KT4mJik7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25z
dCBTdHJpbmcmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyNlbmRpZgogICAgIHZvaWQg
cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgRnJh
bWVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOwogICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwogICAgIHZvaWQgcGFnZURpZFNjcm9sbChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDg2NzBhNWNkMDlkOS4uMGQzMjVkODY0Y2Qy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC01Myw2ICs1Myw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgUm9v
dFZpZXdUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHNjcmVlbkZyYW1lKSBTeW5jaHJvbm91cwogICAgIEFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RW
aWV3KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQg
d2luZG93UG9pbnQpIFN5bmNocm9ub3VzCiAgICAgUm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3Jl
ZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFt
ZSkgU3luY2hyb25vdXMKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFJlbGF5QWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbihTdHJpbmcgbm90aWZpY2F0aW9uTmFtZSwgSVBDOjpEYXRhUmVm
ZXJlbmNlIG5vdGlmaWNhdGlvbkRhdGEpCisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8
fCBQTEFURk9STShHVEspCiAgICAgU2hvd1ZhbGlkYXRpb25NZXNzYWdlKFdlYkNvcmU6OkludFJl
Y3QgYW5jaG9yUmVjdCwgU3RyaW5nIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IGQ1NjQ3NjliNGViNi4uMjg4NmYxMmUy
MjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJ
T1MuaApAQCAtMTEzLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50UmVjdCBy
b290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOwogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdU
b0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIFJl
dGFpblB0cjxOU0RhdGE+KSBvdmVycmlkZTsKICAgICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlk
ZTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQgZG9uZVdpdGhUb3VjaEV2ZW50
KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0KaW5kZXggYTVkMjJmYjJkZWQxLi5lM2VjZDIwNjE3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ1Myw3ICs0NTMsMTQg
QEAgSW50UG9pbnQgUGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3
KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICAgICAgcm9vdFZpZXdQb2ludCA9IFtjb250ZW50
VmlldyBhY2Nlc3NpYmlsaXR5Q29udmVydFBvaW50RnJvbVNjZW5lUmVmZXJlbmNlQ29vcmRpbmF0
ZXM6cm9vdFZpZXdQb2ludF07CiAgICAgcmV0dXJuIEludFBvaW50KHJvb3RWaWV3UG9pbnQpOwog
fQotICAgIAorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBSZXRhaW5QdHI8TlNEYXRhPiBu
b3RpZmljYXRpb25EYXRhKQoreworICAgIGF1dG8gY29udGVudFZpZXcgPSB0aGlzLT5jb250ZW50
VmlldygpOworICAgIGlmIChbY29udGVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihhY2Nlc3NpYmlsaXR5UmVsYXlOb3RpZmljYXRpb246bm90aWZpY2F0aW9uRGF0YTopXSkKKyAg
ICAgICAgW2NvbnRlbnRWaWV3IGFjY2Vzc2liaWxpdHlSZWxheU5vdGlmaWNhdGlvbjpub3RpZmlj
YXRpb25OYW1lIG5vdGlmaWNhdGlvbkRhdGE6bm90aWZpY2F0aW9uRGF0YS5nZXQoKV07Cit9CisK
IEludFJlY3QgUGFnZUNsaWVudEltcGw6OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dSZWN0IHJvb3RWaWV3UmVjdCA9IHJlY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBl
YTVhZmMwZWRkNWEuLjc5OTcwZjg5YTE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC03NzYsNiArNzc2LDEzIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpyZWdpc3RlcldlYlByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW4oY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlCiAgICAgcGFnZUNsaWVudCgpLmFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9r
ZW5SZWNlaXZlZChkYXRhKTsKIH0gICAgCiAKKwordm9pZCBXZWJQYWdlUHJveHk6OnJlbGF5QWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKK3sKKyAgICBOU0RhdGEgKm5vdGlmaWNhdGlv
bkRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6
ZSgpXTsKKyAgICBwYWdlQ2xpZW50KCkucmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5v
dGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNhdGlvbkRhdGEpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94
eTo6YXNzaXN0aXZlVGVjaG5vbG9neU1ha2VGaXJzdFJlc3BvbmRlcigpCiB7CiAgICAgcGFnZUNs
aWVudCgpLmFzc2lzdGl2ZVRlY2hub2xvZ3lNYWtlRmlyc3RSZXNwb25kZXIoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKaW5kZXggNjMxOGM1YjY1ZWMwLi43Yzg2ZTRhM2NkZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCkBAIC0xNjEsNiArMTYxLDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitBWFJl
bGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWRO
b3RpZmljYXRpb24oUmVmPFdlYlBhZ2U+IHBhZ2UsIEF1dG9tYXRpY2FsbHlTZW5kIGF1dG9tYXRp
Y2FsbHlTZW5kKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2F1dG9tYXRpY2FsbHlTZW5k
KGF1dG9tYXRpY2FsbHlTZW5kKQoreworICAgIGlmIChtX2F1dG9tYXRpY2FsbHlTZW5kID09IEF1
dG9tYXRpY2FsbHlTZW5kOjpZZXMpCisgICAgICAgIHNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2Uo
dHJ1ZSk7Cit9CisKK0FYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjp+QVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oKQoreworICAgIGlmIChtX2F1dG9tYXRpY2Fs
bHlTZW5kID09IEF1dG9tYXRpY2FsbHlTZW5kOjpZZXMpCisgICAgICAgIHNlbmRQcm9jZXNzU3Vz
cGVuZE1lc3NhZ2UoZmFsc2UpOworfQorCisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBBWFJl
bGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6c2VuZFByb2Nlc3NTdXNwZW5kTWVzc2Fn
ZShib29sKSB7IH0KKyNlbmRpZgorCiBXZWJDaHJvbWVDbGllbnQ6OldlYkNocm9tZUNsaWVudChX
ZWJQYWdlJiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiB7CkBAIC0zMjIsNyArMzQwLDcgQEAg
UGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coTG9jYWxGcmFtZSYgZnJhbWUsIGNv
bnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW4KIAogICAgIGF1dG8gd2ViRnJhbWUgPSBXZWJGcmFtZTo6
ZnJvbUNvcmVGcmFtZShmcmFtZSk7CiAKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSB3ZWJQcm9jZXNz
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmluZm8oKSwgd2ViRnJhbWUtPnBhZ2UoKS0+d2Vi
UGFnZVByb3h5SWRlbnRpZmllcigpLCBuYXZpZ2F0aW9uQWN0aW9uLnJlc291cmNlUmVxdWVzdCgp
LCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBwYWdlKCkuaWRlbnRpZmll
cigpLCBJUEM6OlRpbWVvdXQ6OmluZmluaXR5KCksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFp
bnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZv
cm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCB9KTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSB3
ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmluZm8oKSwgd2ViRnJhbWUtPnBh
Z2UoKS0+d2ViUGFnZVByb3h5SWRlbnRpZmllcigpLCBuYXZpZ2F0aW9uQWN0aW9uLnJlc291cmNl
UmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBwYWdlKCku
aWRlbnRpZmllcigpLCBJUEM6OlRpbWVvdXQ6OmluZmluaXR5KCksIHsgSVBDOjpTZW5kU3luY09w
dGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzIH0pOwogICAgIGlmICghc2Vu
ZFJlc3VsdC5zdWNjZWVkZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQ1Nyw3
ICs0NzUsMTAgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIExvY2FsRnIKIAogICAgIEhhbmdEZXRlY3Rpb25E
aXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBw
cm90ZWN0ZWRQYWdlKCktPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwod2ViRnJhbWUtPmZyYW1lSUQoKSwg
d2ViRnJhbWUtPmluZm8oKSwgbWVzc2FnZSksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBs
YXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBhdXRvIHBhZ2UgPSBwcm90ZWN0ZWRQYWdl
KCk7CisgICAgYXV0byByZWxheSA9IEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KHBhZ2UpOworCisgICAgYXV0byBzZW5kUmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXll
ZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBtZXNzYWdlKSk7CiAgICAg
YXV0byBbc2hvdWxkQ2xvc2VdID0gc2VuZFJlc3VsdC50YWtlUmVwbHlPcihmYWxzZSk7CiAgICAg
cmV0dXJuIHNob3VsZENsb3NlOwogfQpAQCAtNTA1LDcgKzUyNiw5IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQoTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgYWxlcnRUCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxl
cjsKICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hy
b25vdXNJUENTY29wZTsKIAotICAgIHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQo
KSwgd2ViRnJhbWUtPmluZm8oKSwgYWxlcnRUZXh0KSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpN
YWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMsIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kIH0pOworICAgIGF1dG8gcmVsYXkgPSBBWFJl
bGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihwYWdlKTsKKworICAgIHBhZ2UtPnNlbmRT
eW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgYWxlcnRUZXh0KSwg
eyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMg
fSk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShMb2Nh
bEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNTI0LDcgKzU0Nyw5IEBA
IGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShMb2NhbEZyYW1lJiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzCiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdE
ZXRlY3Rpb25EaXNhYmxlcjsKICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUg
dW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKIAotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBh
Z2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5K
YXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBt
ZXNzYWdlKSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5j
TWVzc2FnZXMsIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxT
dXNwZW5kIH0pOworICAgIGF1dG8gcmVsYXkgPSBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlm
aWNhdGlvbihwYWdlKTsKKworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0
aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmly
bSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBtZXNzYWdlKSwgeyBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMgfSk7CiAg
ICAgYXV0byBbcmVzdWx0XSA9IHNlbmRSZXN1bHQudGFrZVJlcGx5T3IoZmFsc2UpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC01NDUsNyArNTcwLDkgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bkphdmFTY3JpcHRQcm9tcHQoTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVz
c2EKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogICAg
IElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJvbm91c0lQ
Q1Njb3BlOwogCi0gICAgYXV0byBzZW5kUmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXll
ZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJh
bWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwg
eyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMs
IElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kIH0p
OworICAgIGF1dG8gcmVsYXkgPSBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihw
YWdlKTsKKworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRS
ZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1l
LT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIHsg
SVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzIH0p
OwogICAgIGlmICghc2VuZFJlc3VsdC5zdWNjZWVkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC03NzgsOSArODA1LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChMb2Nh
bEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiAjZW5kaWYK
IAogICAgIGF1dG8gdHJ1bmNhdGVkVGl0bGUgPSB0cnVuY2F0ZUZyb21FbmQodGl0bGUsIG1heFRp
dGxlTGVuZ3RoKTsKKyAgICBhdXRvIHBhZ2UgPSBwcm90ZWN0ZWRQYWdlKCk7CisgICAgYXV0byBy
ZWxheSA9IEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKHBhZ2UpOwogCiAgICAg
SVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBD
U2NvcGU7Ci0gICAgcHJvdGVjdGVkUGFnZSgpLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB0cnVu
Y2F0ZWRUaXRsZS5zdHJpbmcsIHBkZkZpcnN0UGFnZVNpemUpLCBJUEM6OlNlbmRTeW5jT3B0aW9u
OjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7CisgICAgcGFnZS0+c2VuZFN5bmNX
aXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWUod2ViRnJh
bWUtPmZyYW1lSUQoKSwgdHJ1bmNhdGVkVGl0bGUuc3RyaW5nLCBwZGZGaXJzdFBhZ2VTaXplKSk7
CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0
X3QpCkBAIC04MDAsNyArODI5LDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlYWNoZWRBcHBs
aWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwKICAgICBpZiAo
IWNhY2hlU3RvcmFnZS5jYWxjdWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGN1cnJlbnRRdW90
YSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRT
eW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKG9yaWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCks
IGN1cnJlbnRRdW90YSwgdG90YWxCeXRlc05lZWRlZCksIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKyAgICBhdXRvIHJlbGF5ID0gQVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24ocGFnZSk7CisKKyAgICBhdXRvIHNlbmRSZXN1
bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShvcmlnaW4uZGF0YSgpLmRhdGFi
YXNlSWRlbnRpZmllcigpLCBjdXJyZW50UXVvdGEsIHRvdGFsQnl0ZXNOZWVkZWQpKTsKICAgICBh
dXRvIFtuZXdRdW90YV0gPSBzZW5kUmVzdWx0LnRha2VSZXBseU9yKDApOwogCiAgICAgY2FjaGVT
dG9yYWdlLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKCZvcmlnaW4sIG5ld1F1b3RhKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAppbmRleCBjOGMyODdjNWFkNjIuLjkzMmQzMDM4ODlhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtNTIsNiArNTIsMTAgQEAgcHVibGljOgogICAgIFdlYlBhZ2UmIHBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7IH0KICAgICBSZWY8V2ViUGFnZT4gcHJvdGVj
dGVkUGFnZSgpIGNvbnN0OwogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHJl
bGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8TlNE
YXRhPikgY29uc3QgZmluYWw7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIGNocm9tZURl
c3Ryb3llZCgpIGZpbmFsOwogICAgIApAQCAtNDk2LDQgKzUwMCwxNyBAQCBwcml2YXRlOgogICAg
IENoZWNrZWRSZWY8V2ViUGFnZT4gbV9wYWdlOwogfTsKIAorY2xhc3MgQVhSZWxheVByb2Nlc3NT
dXNwZW5kZWROb3RpZmljYXRpb24geworcHVibGljOgorICAgIGVudW0gY2xhc3MgQXV0b21hdGlj
YWxseVNlbmQgOiBib29sIHsgTm8sIFllcyB9OworCisgICAgZXhwbGljaXQgQVhSZWxheVByb2Nl
c3NTdXNwZW5kZWROb3RpZmljYXRpb24oUmVmPFdlYlBhZ2U+LCBBdXRvbWF0aWNhbGx5U2VuZCA9
IEF1dG9tYXRpY2FsbHlTZW5kOjpZZXMpOworICAgIH5BWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5v
dGlmaWNhdGlvbigpOworCisgICAgdm9pZCBzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGJvb2wg
c3VzcGVuZGVkKTsKK3ByaXZhdGU6CisgICAgQ2hlY2tlZFJlZjxXZWJQYWdlPiBtX3BhZ2U7Cisg
ICAgQXV0b21hdGljYWxseVNlbmQgbV9hdXRvbWF0aWNhbGx5U2VuZDsKK307CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudENvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudENvY29hLm1tCmluZGV4IDQ0MTMwMTAz
NDllOC4uZWE0YWMwNzRmZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudENvY29hLm1tCkBAIC0y
OSw4ICsyOSwxOCBAQAogI2lmIFBMQVRGT1JNKENPQ09BKQogCiAjaW1wb3J0ICJXZWJJY29uVXRp
bGl0aWVzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0
Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbi5oPgogCisjaWYgUExBVEZPUk0oTUFDKQor
CisjaW1wb3J0ICJBcHBsaWNhdGlvblNlcnZpY2VzU1BJLmgiCisKK2V4dGVybiAiQyIgQVhFcnJv
ciBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhBWFN1c3BlbmRTdGF0dXMp
OworCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOSw2ICs0OSwyMCBAQCBSZWZQdHI8SWNvbj4gV2Vi
Q2hyb21lQ2xpZW50OjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVuYW1lcwogICAgIHJldHVybiBJY29uOjpjcmVhdGUoaWNvbkZvckZpbGVzKGZpbGVuYW1lcyku
Z2V0KCkpOwogfQogCit2b2lkIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjpz
ZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGJvb2wgc3VzcGVuZGVkKQoreworICAgIGlmICghQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3Rh
dHVzKHN1c3BlbmRlZCA/IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFYU3VzcGVuZFN0YXR1
c1J1bm5pbmcpOworI2Vsc2UKKyAgICBOU0RpY3Rpb25hcnkgKm1lc3NhZ2UgPSBAeyBAInBpZCIg
OiBAKGdldHBpZCgpKSwgQCJzdXNwZW5kZWQiIDogQChzdXNwZW5kZWQpIH07CisgICAgTlNEYXRh
ICpkYXRhID0gW05TS2V5ZWRBcmNoaXZlciBhcmNoaXZlZERhdGFXaXRoUm9vdE9iamVjdDptZXNz
YWdlIHJlcXVpcmluZ1NlY3VyZUNvZGluZzpZRVMgZXJyb3I6bmlsXTsKKyAgICBtX3BhZ2UtPnJl
bGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbigiQVhQcm9jZXNzU3VzcGVuZGVkIl9zLCBkYXRh
KTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQppbmRleCBmNzVkMGMx
MTc2NGIuLjc3ZDI0MmQxOTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0K
QEAgLTE3OSw2ICsxNzksMTEgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3dEYXRhRGV0ZWN0
b3JzVUlGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIFJldGFpblB0cjxOU0RhdGE+
IG5vdGlmaWNhdGlvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb3RlY3RlZFBhZ2UoKS0+
cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNh
dGlvbkRhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDNjYWNlMTZiZjZiZC4uN2YzYzdiOTU0NDUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNzg5Niw3ICs3ODk2LDEwIEBA
IFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgV2ViUGFnZTo6cmVxdWVzdERPTVBhc3Rl
QWNjZXNzKFdlYkNvcmU6OkRPTVBhc3RlCiAgICAgLy8gc2hvdWxkIGJlIHJlbW92ZWQgb25jZSA8
cmRhcjovL3Byb2JsZW0vMTYyMDcwMDI+IGlzIHJlc29sdmVkLgogICAgIHByZWVtcHRpdmVseVNl
bmRBdXRvY29ycmVjdGlvbkNvbnRleHQoKTsKICNlbmRpZgotICAgIGF1dG8gc2VuZFJlc3VsdCA9
IHNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0
RE9NUGFzdGVBY2Nlc3MocGFzdGVBY2Nlc3NDYXRlZ29yeSwgcmVjdEZvckVsZW1lbnRBdEludGVy
YWN0aW9uTG9jYXRpb24oKSwgb3JpZ2luSWRlbnRpZmllciksIElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKworICAgIEFYUmVsYXlQcm9jZXNz
U3VzcGVuZGVkTm90aWZpY2F0aW9uKCp0aGlzKTsKKworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNl
bmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0RE9N
UGFzdGVBY2Nlc3MocGFzdGVBY2Nlc3NDYXRlZ29yeSwgcmVjdEZvckVsZW1lbnRBdEludGVyYWN0
aW9uTG9jYXRpb24oKSwgb3JpZ2luSWRlbnRpZmllcikpOwogICAgIGF1dG8gW3Jlc3BvbnNlXSA9
IHNlbmRSZXN1bHQudGFrZVJlcGx5T3IoV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6
RGVuaWVkRm9yR2VzdHVyZSk7CiAgICAgcmV0dXJuIHJlc3BvbnNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDNiMDlhMjE0NGI1OS4uYmNlYjJj
ZDQ3OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBA
IC03NzMsNiArNzczLDkgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdU
b1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQg
YWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQg
cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIFJldGFpblB0cjxO
U0RhdGE+KTsKKyNlbmRpZgogCiAgICAgUmVmUHRyPFdlYkltYWdlPiBzY2FsZWRTbmFwc2hvdFdp
dGhPcHRpb25zKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBkb3VibGUgYWRkaXRpb25hbFNjYWxl
RmFjdG9yLCBTbmFwc2hvdE9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDIwNWExNjZiOGJiNC4uMDdkYjBi
OGU5ZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQpAQCAtMjU2LDYgKzI1NiwxNCBAQCBSZXRhaW5QdHI8TlNEYXRhPiBXZWJQ
YWdlOjphY2Nlc3NpYmlsaXR5UmVtb3RlVG9rZW5EYXRhKCkgY29uc3QKICAgICByZXR1cm4gbmV3
QWNjZXNzaWJpbGl0eVJlbW90ZVRva2VuKFtOU1VVSUQgVVVJRF0pOwogfQogCit2b2lkIFdlYlBh
Z2U6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNh
dGlvbk5hbWUsIFJldGFpblB0cjxOU0RhdGE+IG5vdGlmaWNhdGlvbkRhdGEpCit7CisgICAgSVBD
OjpEYXRhUmVmZXJlbmNlIGRhdGFUb2tlbiA9IHsgfTsKKyAgICBpZiAoW25vdGlmaWNhdGlvbkRh
dGEgbGVuZ3RoXSkKKyAgICAgICAgZGF0YVRva2VuID0gSVBDOjpEYXRhUmVmZXJlbmNlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtub3RpZmljYXRpb25EYXRhIGJ5dGVzXSksIFtu
b3RpZmljYXRpb25EYXRhIGxlbmd0aF0pOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIGRhdGFU
b2tlbikpOworfQorCiBzdGF0aWMgdm9pZCBjb21wdXRlRWRpdGFibGVSb290SGFzQ29udGVudEFu
ZFBsYWluVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIEVkaXRvclN0YXRl
OjpQb3N0TGF5b3V0RGF0YSYgZGF0YSkKIHsKICAgICBkYXRhLmhhc0NvbnRlbnQgPSBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA0MmUyYWRjYWEyOGIu
LmM5ZmM2YWQyNGQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApA
QCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIldlYkJhZGdlQ2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViQnJvYWRjYXN0Q2hhbm5lbFJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2ViQ2FjaGVTdG9yYWdl
UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJD
b25uZWN0aW9uVG9VSVByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJDb29raWVKYXIuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTY4Niw3ICs2ODcsOCBAQCB2b2lkIFdl
YlByb2Nlc3M6OnNldElzSW5Qcm9jZXNzQ2FjaGUoYm9vbCBpc0luUHJvY2Vzc0NhY2hlKQogCiAg
ICAgdXBkYXRlUHJvY2Vzc05hbWUoSXNJblByb2Nlc3NJbml0aWFsaXphdGlvbjo6Tm8pOwogCi0g
ICAgSVBDOjpBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihpc0luUHJv
Y2Vzc0NhY2hlKTsKKyAgICBpZiAoYXV0byogd2ViUGFnZSA9IGZvY3VzZWRXZWJQYWdlKCkpCisg
ICAgICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKCp3ZWJQYWdlLCBBWFJl
bGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QXV0b21hdGljYWxseVNlbmQ6Ok5vKS5z
ZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGlzSW5Qcm9jZXNzQ2FjaGUpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oaXNJblByb2Nlc3NDYWNoZSk7CiAjZW5kaWYKQEAgLTE2MTUsNyArMTYxNyw4
IEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJlcGFyZVRvU3VzcGVuZChib29sIGlzU3VzcGVuc2lvbklt
bWluZW50LCBNb25vdG9uaWNUaW1lIGVzdGltCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgSVBDOjpBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlv
bih0cnVlKTsKKyAgICBpZiAoYXV0byogd2ViUGFnZSA9IGZvY3VzZWRXZWJQYWdlKCkpCisgICAg
ICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKCp3ZWJQYWdlLCBBWFJlbGF5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QXV0b21hdGljYWxseVNlbmQ6Ok5vKS5zZW5k
UHJvY2Vzc1N1c3BlbmRNZXNzYWdlKHRydWUpOwogICAgIHVwZGF0ZUZyZWV6ZXJTdGF0dXMoKTsK
ICNlbmRpZgogCkBAIC0xNjgwLDcgKzE2ODMsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NE
aWRSZXN1bWUoKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIElQQzo6
QWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oZmFsc2UpOworICAgIGlm
IChhdXRvKiB3ZWJQYWdlID0gZm9jdXNlZFdlYlBhZ2UoKSkKKyAgICAgICAgQVhSZWxheVByb2Nl
c3NTdXNwZW5kZWROb3RpZmljYXRpb24oKndlYlBhZ2UsIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVk
Tm90aWZpY2F0aW9uOjpBdXRvbWF0aWNhbGx5U2VuZDo6Tm8pLnNlbmRQcm9jZXNzU3VzcGVuZE1l
c3NhZ2UoZmFsc2UpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1Mu
aCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dElPUy5oCmluZGV4IGFjYjM3YzM5YThkYS4uNTViMGM0NzkyZmZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnRJT1MuaApAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2VsZWN0SXRlbUFs
aWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpIGZpbmFsOwogICAgIFJlZlB0cjxX
ZWJDb3JlOjpQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGll
bnQmKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51PiBj
cmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50JikgY29uc3QgZmlu
YWw7Ci0KKyAgICB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJp
bmcmLCBSZXRhaW5QdHI8TlNEYXRhPikgY29uc3QgZmluYWwgeyB9CiAgICAgdm9pZCB3ZWJBcHBP
cmllbnRhdGlvbnNVcGRhdGVkKCkgZmluYWw7CiAgICAgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5n
ZWQoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0
UGlja2VyKGJvb2wgaGFzVmlkZW8sIFdlYkNvcmU6OlJvdXRlU2hhcmluZ1BvbGljeSwgY29uc3Qg
U3RyaW5nJikgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468189</attachid>
            <date>2023-10-12 07:50:53 -0700</date>
            <delta_ts>2023-10-12 23:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-262960-20231012075052.patch</filename>
            <type>text/plain</type>
            <size>45514</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">RnJvbSBjODM1YTBlMjg3NmJiNDQyMzc5MjZjOGU5ZmMyMjMzMWM2NTM5YjFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpcyBGbGVpemFjaCA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4K
RGF0ZTogVHVlLCAxMCBPY3QgMjAyMyAwODo1OTozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFY
OiBSZW1vdmUgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXItc3lzdGVtd2lkZSIgc2FuZGJveAog
ZXhjZXB0aW9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI5NjAg
cmRhcjovLzExNjM4NzYxNQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpSZW1vdmUgdGhl
IGV4Y2VwdGlvbiB0byBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gd2lkZSBzZXJ2ZXIgZnJvbSBXZWJD
b250ZW50LgoKSW5zdGVhZCByZWxheSBub3RpZmljYXRpb25zIGJhY2sgdG8gdGhlIENsaWVudCBz
byB0aGF0IHRoYXQgcHJvY2VzcyBjYW4gcmVsYXkgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIHRo
ZSBzeXN0ZW0gc2VydmVyLgoKVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZSBJbmZvcm1TdXNw
ZW5kIG9wdGlvbiBpbiBDb25uZWN0aW9uIGJlY2F1c2UgaXQgY2FuIGJlIGhhbmRsZWQgYXQgYSBo
aWdoZXIgbGV2ZWwuCgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1Mu
bW06CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24pOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToK
KiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5U2Nyb2xsOl0pOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOl0pOgooLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBoYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21l
Om5vdGlmaWNhdGlvbkRhdGE6XSk6CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBv
c3ROb3RpZmljYXRpb246XSk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcDoKKFdlYkNvcmU6OkNo
cm9tZTo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIGNvbnN0KToKKiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmg6
CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oOgoqIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgooSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3lu
Y1JlcGx5KToKKiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6CiogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tOgooSVBDOjpB
Y2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6IERlbGV0ZWQuCihJUEM6
OkNvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UpOiBEZWxldGVkLgooSVBDOjpDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKiBTb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94
UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbjoKKiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKToKKiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CiogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbik6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToK
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgoq
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24pOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1
c3BlbmRlZE5vdGlmaWNhdGlvbjo6fkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9j
ZXNzU3VzcGVuZE1lc3NhZ2UpOgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRv
dyk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgooV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpwcmludCk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UpOgoqIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
OgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
biBjb25zdCk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CihXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CiogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgooV2ViS2l0OjpXZWJQYWdlOjpyZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24pOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CihXZWJL
aXQ6OldlYlByb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgooV2ViS2l0OjpXZWJQcm9jZXNzOjpw
cm9jZXNzRGlkUmVzdW1lKToKKiBTb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRJT1MuaDoKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCAgfCAgNCArKwogLi4uL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0gICAgIHwgMjIgKysrKystLS0tCiAuLi4vaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmggICAgfCAgNyArKy0KIC4uLi9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0gICB8IDIxICsrKysrKy0tLQogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcCAgICAgICAgICAgICAgICB8ICA3ICsrKwogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaCAgICAgICAgICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmggICAgICAgICAgICB8ICAzICsrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0
V2luZG93LmggICAgICAgICAgfCAgNyArKysKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwICAgICB8IDEzICstLS0tLQogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5oICAgICAgIHwgMTMgKystLS0tCiAuLi4vUGxhdGZvcm0vSVBDL2NvY29hL0Nv
bm5lY3Rpb25Db2NvYS5tbSAgICAgfCAzOSAtLS0tLS0tLS0tLS0tLS0tCiAuLi4vUGxhdGZvcm0v
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwICAgICAgfCAgOCAtLS0tCiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2UubW0gICAgfCAgMiArCiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCAgICAgfCAgMSArCiAuLi4vaW9zL2NvbS5hcHBsZS5X
ZWJLaXQuV2ViQ29udGVudC5zYi5pbiAgICAgfCAgMSAtCiAuLi4vVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tICAgfCAgMiArLQogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oICAgICAgICB8ICAzICsrCiAuLi4vV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4gfCAgMyArKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmggIHwgIDEgKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tIHwgIDkgKysrLQogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbSAgIHwgIDcgKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcCAgICAgICAgfCA0NSArKysrKysrKysrKysrKysrLS0tCiAuLi4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmggICAgICAgICAgfCAxNyArKysrKysrCiAuLi4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0gICAgfCAyNCArKysrKysrKysrCiAuLi4vV2ViQ29y
ZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbSAgfCAgNSArKysKIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwICB8ICA1ICsrLQogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oICAgIHwgIDMgKysKIC4uLi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gICAgICB8ICA4ICsrKysKIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCAgICAgICB8IDEwICsrKy0tCiAuLi4vaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5oICAgfCAgMiArLQogMzIgZmlsZXMgY2hhbmdl
ZCwgMjAyIGluc2VydGlvbnMoKyksIDk5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggYWQyYjRjNWQzYmIzLi40ODkzZjZh
YTdjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5o
CkBAIC00NzYsNiArNDc2LDEwIEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxB
WElEPj4gcmVsYXRlZE9iamVjdElEc0Zvcihjb25zdCBBWENvcmVPYmplY3QmLCBBWFJlbGF0aW9u
VHlwZSk7CiAgICAgdm9pZCB1cGRhdGVSZWxhdGlvbnMoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheU5vdGlm
aWNhdGlvbihjb25zdCBTdHJpbmcmLCBSZXRhaW5QdHI8TlNEYXRhPik7CisjZW5kaWYKKwogI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgdm9pZCBzY2hlZHVsZU9i
amVjdFJlZ2lvbnNVcGRhdGUoYm9vbCBzY2hlZHVsZUltbWVkaWF0ZWx5ID0gZmFsc2UpIHsgbV9n
ZW9tZXRyeU1hbmFnZXItPnNjaGVkdWxlT2JqZWN0UmVnaW9uc1VwZGF0ZShzY2hlZHVsZUltbWVk
aWF0ZWx5KTsgfQogICAgIHZvaWQgd2lsbFVwZGF0ZU9iamVjdFJlZ2lvbnMoKSB7IG1fZ2VvbWV0
cnlNYW5hZ2VyLT53aWxsVXBkYXRlT2JqZWN0UmVnaW9ucygpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQppbmRleCA1YjJm
OWNhYWI4OTAuLjc1YTljNTA2ODk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9BWE9iamVjdENhY2hlSU9TLm1tCkBAIC0yOSw4ICsyOSw5IEBACiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpbXBvcnQg
IkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLmgiCisjaW1wb3J0ICJDaHJvbWUuaCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5o
IgorI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKIAogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC05MCwyNCArOTEsMjcgQEAgQVNDSUlMaXRlcmFsIEFY
T2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBsYXRmb3JtTmFtZShBWE5vdGlmaWNhdGlvbiBub3Rp
ZmljYXRpb24KICAgICByZXR1cm4gbmFtZTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpyZWxh
eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIFJldGFpblB0cjxO
U0RhdGE+IG5vdGlmaWNhdGlvbkRhdGEpCit7CisgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVu
dCgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkucmVsYXlBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNhdGlvbkRhdGEpOworfQorCiB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIG9i
amVjdCwgQVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQogewogICAgIGlmICghb2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBpT1Mgbm90aWZpY2F0aW9ucyBtdXN0IHVsdGltYXRl
bHkgY2FsbCBVSUtpdCBVSUFjY2Vzc2liaWxpdHlQb3N0Tm90aWZpY2F0aW9uLgotICAgIC8vIEJ1
dCBXZWJDb3JlIGlzIG5vdCBsaW5rZWQgd2l0aCBVSUtpdC4gU28gYSB3b3JrYXJvdW5kIGlzIHRv
IG92ZXJyaWRlIHRoZSB3cmFwcGVyJ3MKLSAgICAvLyBwb3N0Tm90aWZpY2F0aW9uIG1ldGhvZCBp
biB0aGUgc3lzdGVtIFdlYktpdEFjY2Vzc2liaWxpdHkgYnVuZGxlIHRoYXQgZG9lcyBsaW5rIFVJ
S2l0LgotICAgIGF1dG8gbm90aWZpY2F0aW9uTmFtZSA9IG5vdGlmaWNhdGlvblBsYXRmb3JtTmFt
ZShub3RpZmljYXRpb24pOwotICAgIGlmIChub3RpZmljYXRpb25OYW1lLmlzTnVsbCgpKQorICAg
IGF1dG8gc3RyaW5nTm90aWZpY2F0aW9uID0gbm90aWZpY2F0aW9uUGxhdGZvcm1OYW1lKG5vdGlm
aWNhdGlvbik7CisgICAgaWYgKHN0cmluZ05vdGlmaWNhdGlvbi5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gbnNOb3RpZmljYXRpb25OYW1lID0gbm90aWZpY2F0aW9uTmFt
ZS5jcmVhdGVOU1N0cmluZygpOwotICAgIFtvYmplY3QtPndyYXBwZXIoKSBwb3N0Tm90aWZpY2F0
aW9uOm5zTm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CisgICAgYXV0byBub3RpZmljYXRpb25OYW1l
ID0gc3RyaW5nTm90aWZpY2F0aW9uLmNyZWF0ZU5TU3RyaW5nKCk7CisgICAgW29iamVjdC0+d3Jh
cHBlcigpIGFjY2Vzc2liaWxpdHlPdmVycmlkZVByb2Nlc3NOb3RpZmljYXRpb246bm90aWZpY2F0
aW9uTmFtZS5nZXQoKV07CiAKICAgICAvLyBUbyBzaW11bGF0ZSBBWCBub3RpZmljYXRpb25zIGZv
ciBMYXlvdXRUZXN0cyBvbiB0aGUgc2ltdWxhdG9yLCBjYWxsCiAgICAgLy8gdGhlIHdyYXBwZXIn
cyBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uLgotICAgIFtvYmplY3QtPndyYXBwZXIo
KSBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOm5zTm90aWZpY2F0aW9uTmFtZS5nZXQo
KV07CisgICAgW29iamVjdC0+d3JhcHBlcigpIGFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRp
b246bm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dFRleHRTdGF0ZUNoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCmluZGV4IDZjNmJi
OTFmODBjMC4uMjIyMzJjNmM5NzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLmgKQEAgLTc2LDcgKzc2LDEyIEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNz
aWJpbGl0eUFjY2VwdGVkSW5saW5lVGV4dENvbXBsZXRpb24gPSBAIlVJQWNjZXNzCiAKIC0gKEJP
T0wpaXNBdHRhY2htZW50OwogCi0tICh2b2lkKXBvc3ROb3RpZmljYXRpb246KE5TU3RyaW5nICop
bm90aWZpY2F0aW9uTmFtZTsKKy8vIFRoaXMgaW50ZXJhY3RzIHdpdGggQWNjZXNzaWJpbGl0eSBz
eXN0ZW0gdG8gcG9zdC1wcm9jZXNzIHNvbWUgbm90aWZpY2F0aW9ucy4KKy0gKHZvaWQpYWNjZXNz
aWJpbGl0eU92ZXJyaWRlUHJvY2Vzc05vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRp
b25OYW1lOworCisvLyBUaGlzIGlzIGNhbGxlZCBieSB0aGUgQWNjZXNzaWJpbGl0eSBzeXN0ZW0g
dG8gcmVsYXkgYmFjayB0byB0aGUgY2hyb21lLgorLSAodm9pZCloYW5kbGVOb3RpZmljYXRpb25S
ZWxheVRvQ2hyb21lOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUgbm90aWZpY2F0aW9uRGF0
YTooTlNEYXRhICopbm90aWZpY2F0aW9uRGF0YTsKKwogQGVuZAogCiAjZW5kaWYgLy8gRU5BQkxF
KEFDQ0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGFiMzE5Mzg2OTRiYS4uOWJiN2U1OGIwNmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTY4Nyw3ICsxNjg3
LDcgQEAgLSAoQk9PTClhY2Nlc3NpYmlsaXR5U2Nyb2xsOihVSUFjY2Vzc2liaWxpdHlTY3JvbGxE
aXJlY3Rpb24pZGlyZWN0aW9uCiAKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGF1dG8gbm90
aWZpY2F0aW9uTmFtZSA9IEFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBsYXRmb3JtTmFtZShB
WE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbjo6QVhQYWdlU2Nyb2xsZWQpLmNyZWF0ZU5TU3Ry
aW5nKCk7Ci0gICAgICAgIFtzZWxmIHBvc3ROb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZS5n
ZXQoKV07CisgICAgICAgIFtzZWxmIGFjY2Vzc2liaWxpdHlPdmVycmlkZVByb2Nlc3NOb3RpZmlj
YXRpb246bm90aWZpY2F0aW9uTmFtZS5nZXQoKV07CiAKICAgICAgICAgQ0dQb2ludCBzY3JvbGxQ
b3MgPSBbc2VsZiBfYWNjZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9uXTsKICAgICAgICAgTlNTdHJp
bmcgKnRlc3RTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkFYU2Nyb2xsIFtw
b3NpdGlvbjogJS4yZiAlLjJmXSIsIHNjcm9sbFBvcy54LCBzY3JvbGxQb3MueV07CkBAIC0xNjk4
LDYgKzE2OTgsMjAgQEAgLSAoQk9PTClhY2Nlc3NpYmlsaXR5U2Nyb2xsOihVSUFjY2Vzc2liaWxp
dHlTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLSAo
dm9pZClhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOihOU1N0cmluZyAq
KW5vdGlmaWNhdGlvbk5hbWUKK3sKKyAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gYnkgdGhlIEFj
Y2Vzc2liaWxpdHkgc3lzdGVtIHRvIHBvc3QtcHJvY2VzcyBub3RpZmljYXRpb25zLgorICAgIC8v
IFdoZW4gaXQgaXMgZG9uZSwgaXQgd2lsbCBjYWxsIGJhY2sgaW50byBoYW5kbGVOb3RpZmljYXRp
b25SZWxheVRvQ2hyb21lLgorfQorCistICh2b2lkKWhhbmRsZU5vdGlmaWNhdGlvblJlbGF5VG9D
aHJvbWU6KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZSBub3RpZmljYXRpb25EYXRhOihOU0Rh
dGEgKilub3RpZmljYXRpb25EYXRhCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2li
aWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2VsZi5heEJhY2tpbmdPYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKS0+cmVsYXlOb3RpZmljYXRpb24oeyBub3RpZmljYXRpb25OYW1lIH0s
IG5vdGlmaWNhdGlvbkRhdGEpOworfQorCiAtIChDR1JlY3QpX2FjY2Vzc2liaWxpdHlSZWxhdGl2
ZUZyYW1lCiB7CiAgICAgYXV0byByZWN0ID0gRmxvYXRSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmVjdCgpKSk7CkBAIC0yMDQ2LDExICsyMDYwLDYgQEAg
LSAoaWQpX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihpZClzdWJ2aWV3CiAgICAgcmV0
dXJuIG5pbDsKIH0KIAotLSAodm9pZClwb3N0Tm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlm
aWNhdGlvbk5hbWUKLXsKLSAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdp
bGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLgotfQotCiAvLyBU
aGVzZSB3aWxsIGJlIHVzZWQgYnkgdGhlIFVJS2l0IHdyYXBwZXIgdG8gY2FsY3VsYXRlIGFuIGFw
cHJvcHJpYXRlIGRlc2NyaXB0aW9uIG9mIHNjcm9sbCBzdGF0dXMuCiAtIChDR1BvaW50KV9hY2Nl
c3NpYmlsaXR5U2Nyb2xsUG9zaXRpb24KIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMu
aAppbmRleCAwN2FlMDU3ZTc0ZmEuLjlkM2YzMDBhYWM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaApAQCAtMTE3LDYgKzExNyw5IEBAIGNsYXNzIEVtcHR5Q2hyb21lQ2xpZW50
IDogcHVibGljIENocm9tZUNsaWVudCB7CiAgICAgSW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmIHIpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHI7IH0KICAgICBJbnRQb2ludCBh
Y2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gcDsgfTsKICAgICBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2Ny
ZWVuKGNvbnN0IEludFJlY3QmIHIpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHI7IH07CisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bihjb25zdCBTdHJpbmcmLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYpIGNvbnN0IGZpbmFsIHsg
fTsKKyNlbmRpZgogCiAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KEhU
TUxJbWFnZUVsZW1lbnQmKSBmaW5hbCB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGFm
YjhhNzA2Nzc0Zi4uNWEzMGEzZWNlZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC0xMjcs
NiArMTI3LDEzIEBAIEludFJlY3QgQ2hyb21lOjpyb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVl
bihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogICAgIHJldHVybiBtX2NsaWVudC0+cm9vdFZp
ZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4ocmVjdCk7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQordm9pZCBDaHJvbWU6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBT
dHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIGNvbnN0IFJldGFpblB0cjxOU0RhdGE+JiBub3RpZmlj
YXRpb25EYXRhKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaWVudC0+cmVsYXlBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNhdGlvbkRhdGEpOworfQor
I2VuZGlmCisKIFBsYXRmb3JtUGFnZUNsaWVudCBDaHJvbWU6OnBsYXRmb3JtUGFnZUNsaWVudCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5oCmluZGV4IGY4MDMzMDU4MWRiZS4uMjA3ZjJjY2I0MzUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmgKQEAgLTEwNSw2ICsxMDUsOSBAQCBwdWJsaWM6CiAgICAgSW50UG9pbnQgYWNjZXNz
aWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xp
ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lk
IHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBSZXRh
aW5QdHI8TlNEYXRhPiYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CmluZGV4IDMzMjkzZjM3MzEwZC4uNTMzNjA0MzNlMzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTIyNSw2ICsyMjUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0
IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IEludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50Jikg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNj
cmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgdmlydHVhbCB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBT
dHJpbmcmLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYpIGNvbnN0ID0gMDsKKyNlbmRpZgogCiAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdJbWFnZUZvckVsZW1lbnQoSFRNTEltYWdl
RWxlbWVudCYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9z
dFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IGNi
NjUyOTk5ZjY5My4uNmE3MWM2Yjc2NjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRv
dy5oCkBAIC0yOCw2ICsyOCwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2lkZ2V0LmgiCiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorT0JKQ19DTEFTUyBO
U0RhdGE7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CkBA
IC01Nyw2ICs2MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgcm9vdFZpZXdUb1Nj
cmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UG9pbnQgYWNj
ZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IElu
dFJlY3QmKSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2aXJ0dWFs
IHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFJldGFpblB0cjxOU0RhdGE+JikgY29uc3QgPSAwOworI2VuZGlmCiAKICAgICAvLyBNZXRob2Qg
Zm9yIHJldHJpZXZpbmcgdGhlIG5hdGl2ZSBjbGllbnQgb2YgdGhlIHBhZ2UuCiAgICAgdmlydHVh
bCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCAxNmEwNTYzMDg4Mzgu
LjJjNzE3NjhlNDVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5j
cHAKQEAgLTc5Nyw4ICs3OTcsNiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHko
U3luY1JlcXVlc3RJRCBzeW5jUmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogewogICAgIHRp
bWVvdXQgPSB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyh0aW1lb3V0
KTsKIAotICAgIHdpbGxTZW5kU3luY01lc3NhZ2Uoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIGJv
b2wgdGltZWRPdXQgPSBmYWxzZTsKICAgICB3aGlsZSAoIXRpbWVkT3V0KSB7CiAgICAgICAgIC8v
IEZpcnN0LCBjaGVjayBpZiB3ZSBoYXZlIGFueSBtZXNzYWdlcyB0aGF0IHdlIG5lZWQgdG8gcHJv
Y2Vzcy4KQEAgLTgxNCwxNiArODEyLDEyIEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNS
ZXBseShTeW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHN5bmNSZXF1ZXN0SUQsIHBlbmRpbmdTeW5jUmVwbHkuc3lu
Y1JlcXVlc3RJRCA9PSBzeW5jUmVxdWVzdElEKTsKIAogICAgICAgICAgICAgLy8gV2UgZm91bmQg
dGhlIHN5bmMgcmVwbHkuCi0gICAgICAgICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNl
aXZlUmVwbHkpIHsKLSAgICAgICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5j
T3B0aW9ucyk7CisgICAgICAgICAgICBpZiAocGVuZGluZ1N5bmNSZXBseS5kaWRSZWNlaXZlUmVw
bHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwZW5kaW5nU3luY1JlcGx5LnJl
cGx5RGVjb2RlcikgfTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVGhlIGNvbm5l
Y3Rpb24gd2FzIGNsb3NlZC4KLSAgICAgICAgICAgIGlmICghbV9zaG91bGRXYWl0Rm9yU3luY1Jl
cGxpZXMpIHsKLSAgICAgICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0
aW9ucyk7CisgICAgICAgICAgICBpZiAoIW1fc2hvdWxkV2FpdEZvclN5bmNSZXBsaWVzKQogICAg
ICAgICAgICAgICAgIHJldHVybiBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247Ci0gICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBQcm9jZXNzaW5nIGEgc3luYyBtZXNzYWdlIGNv
dWxkIGNhdXNlIHRoZSBjb25uZWN0aW9uIHRvIGJlIGludmFsaWRhdGVkLgpAQCAtODMyLDcgKzgy
Niw2IEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShTeW5jUmVxdWVzdElEIHN5
bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgICAgIC8vIGFueSBtb3JlIGluY29t
aW5nIG1lc3NhZ2VzLgogICAgICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSVBDLCAiQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogQ29ubmVj
dGlvbiBubyBsb25nZXIgdmFsaWQsIGlkPSUiIFBSSXU2NCwgc3luY1JlcXVlc3RJRC50b1VJbnQ2
NCgpKTsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVTeW5jUmVwbHkoc2VuZFN5bmNPcHRpb25zKTsK
ICAgICAgICAgICAgIHJldHVybiBFcnJvcjo6SW52YWxpZENvbm5lY3Rpb247CiAgICAgICAgIH0K
IApAQCAtODQ4LDggKzg0MSw2IEBAIGF1dG8gQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseShT
eW5jUmVxdWVzdElEIHN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lIG1lc3NhCiAgICAgUkVMRUFT
RV9MT0dfRVJST1IoSVBDLCAiQ29ubmVjdGlvbjo6d2FpdEZvclN5bmNSZXBseTogVGltZWQtb3V0
IHdoaWxlIHdhaXRpbmcgZm9yIHJlcGx5IGZvciAlcywgaWQ9JSIgUFJJdTY0LCBkZXNjcmlwdGlv
bihtZXNzYWdlTmFtZSksIHN5bmNSZXF1ZXN0SUQudG9VSW50NjQoKSk7CiAjZW5kaWYKIAotICAg
IGRpZFJlY2VpdmVTeW5jUmVwbHkoc2VuZFN5bmNPcHRpb25zKTsKLQogICAgIHJldHVybiBFcnJv
cjo6VGltZW91dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmlu
ZGV4IGM2M2JiZTI2ZDU0YS4uZmNmZjgxOThhZjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5oCkBAIC04NSwxMSArODUsOSBAQCBlbnVtIGNsYXNzIFNlbmRPcHRpb24g
OiB1aW50OF90IHsKIH07CiAKIGVudW0gY2xhc3MgU2VuZFN5bmNPcHRpb24gOiB1aW50OF90IHsK
LSAgICAvLyBVc2UgdGhpcyB0byBpbmZvcm0gdGhhdCB0aGlzIHN5bmMgY2FsbCB3aWxsIHN1c3Bl
bmQgdGhpcyBwcm9jZXNzIHVudGlsIHRoZSB1c2VyIHJlc3BvbmRzIHdpdGggaW5wdXQuCi0gICAg
SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQgPSAxIDw8IDAsCi0gICAgVXNlRnVsbHlT
eW5jaHJvbm91c01vZGVGb3JUZXN0aW5nID0gMSA8PCAxLAotICAgIEZvcmNlRGlzcGF0Y2hXaGVu
RGVzdGluYXRpb25Jc1dhaXRpbmdGb3JVbmJvdW5kZWRTeW5jUmVwbHkgPSAxIDw8IDIsCi0gICAg
TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzID0gMSA8PCAzLAorICAgIFVzZUZ1bGx5
U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZyA9IDEgPDwgMCwKKyAgICBGb3JjZURpc3BhdGNoV2hl
bkRlc3RpbmF0aW9uSXNXYWl0aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5ID0gMSA8PCAxLAorICAg
IE1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyA9IDEgPDwgMiwKIH07CiAKIGVudW0g
Y2xhc3MgV2FpdEZvck9wdGlvbiB7CkBAIC01MzAsOSArNTI4LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGVucXVldWVJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+KSBXVEZf
UkVRVUlSRVNfTE9DSyhtX2luY29taW5nTWVzc2FnZXNMb2NrKTsKICAgICBzaXplX3QgaW5jb21p
bmdNZXNzYWdlc0Rpc3BhdGNoaW5nQmF0Y2hTaXplKCkgY29uc3Q7CiAKLSAgICB2b2lkIHdpbGxT
ZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPik7Ci0gICAgdm9pZCBkaWRS
ZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwotCiAgICAgVGltZW91
dCB0aW1lb3V0UmVzcGVjdGluZ0lnbm9yZVRpbWVvdXRzRm9yVGVzdGluZyhUaW1lb3V0KSBjb25z
dDsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtODk5LDYgKzg5NCw0IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ0Nv
dW50OwogfTsKIAotdm9pZCBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlv
bihib29sIHN1c3BlbmRlZCk7Ci0KIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCmluZGV4IGVlOTJh
ODUyOTJkMi4uZjZlZjMwZWI0NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCkBAIC00OSwyNSArNDksOSBAQAogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKLSNpbXBv
cnQgPFVJS2l0L1VJQWNjZXNzaWJpbGl0eS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKLSNpbXBvcnQgPEFYUnVudGltZS9BWERlZmluZXMuaD4KLSNpbXBvcnQgPEFYUnVudGltZS9B
WE5vdGlmaWNhdGlvbkNvbnN0YW50cy5oPgotI2Vsc2UKLSNkZWZpbmUga0FYUGlkU3RhdHVzQ2hh
bmdlZE5vdGlmaWNhdGlvbiAwCiAjZW5kaWYKIAotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMp
Ci0KLSNpbXBvcnQgIkFwcGxpY2F0aW9uU2VydmljZXNTUEkuaCIKLQotZXh0ZXJuICJDIiBBWEVy
cm9yIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1
cyk7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIG5hbWVzcGFjZSBJUEMgewogCiBzdGF0
aWMgY29uc3Qgc2l6ZV90IGlubGluZU1lc3NhZ2VNYXhTaXplID0gNDA5NjsKQEAgLTU5MCwyOSAr
NTc0LDYgQEAgYm9vbCBDb25uZWN0aW9uOjpraWxsKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oYm9vbCBzdXNw
ZW5kZWQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nl
c3NTdXNwZW5kU3RhdHVzKHN1c3BlbmRlZCA/IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFY
U3VzcGVuZFN0YXR1c1J1bm5pbmcpOwotI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBV
SUFjY2Vzc2liaWxpdHlQb3N0Tm90aWZpY2F0aW9uKGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmlj
YXRpb24sIEB7IEAicGlkIiA6IEAoZ2V0cGlkKCkpLCBAInN1c3BlbmRlZCIgOiBAKHN1c3BlbmRl
ZCkgfSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzdXNwZW5kZWQpOwotI2VuZGlmCi19Ci0K
LXZvaWQgQ29ubmVjdGlvbjo6d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNP
cHRpb24+IHNlbmRTeW5jT3B0aW9ucykKLXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRh
aW5zKElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
KSAmJiBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAg
ICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsKLX0K
LQotdm9pZCBDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3lu
Y09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQotewotICAgIGlmIChzZW5kU3luY09wdGlvbnMuY29u
dGFpbnMoSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3Bl
bmQpICYmIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0g
ICAgICAgIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNlKTsK
LX0KLQogcGlkX3QgQ29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1feHBjQ29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
dW5peC9Db25uZWN0aW9uVW5peC5jcHAKaW5kZXggZTJlOTIyNTM4YmNlLi44NzI3ZDhiNDdiZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlvblVu
aXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlvblVu
aXguY3BwCkBAIC01NjYsMTQgKzU2Niw2IEBAIFNvY2tldFBhaXIgY3JlYXRlUGxhdGZvcm1Db25u
ZWN0aW9uKHVuc2lnbmVkIG9wdGlvbnMpCiAgICAgcmV0dXJuIHNvY2tldFBhaXI7CiB9CiAKLXZv
aWQgQ29ubmVjdGlvbjo6d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNPcHRp
b24+KQotewotfQotCi12b2lkIENvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jUmVwbHkoT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPikKLXsKLX0KLQogc3RkOjpvcHRpb25hbDxDb25uZWN0aW9uOjpD
b25uZWN0aW9uSWRlbnRpZmllclBhaXI+IENvbm5lY3Rpb246OmNyZWF0ZUNvbm5lY3Rpb25JZGVu
dGlmaWVyUGFpcigpCiB7CiAgICAgU29ja2V0UGFpciBzb2NrZXRQYWlyID0gY3JlYXRlUGxhdGZv
cm1Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29h
L0NvY29hSW1hZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2Uu
bW0KaW5kZXggM2ViOWIxZGEyZmU4Li4xZWQzMGRmN2Y2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vY29jb2EvQ29jb2FJbWFnZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL2NvY29hL0NvY29hSW1hZ2UubW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgPENv
cmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KICNlbmRpZgogCisjaW1wb3J0IDxJbWFnZUlPL0lt
YWdlSU8uaD4KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFJldGFpblB0cjxOU0RhdGE+IHRyYW5z
Y29kZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB0eXBlSWRlbnRpZmllcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMmJkN2RhMTM2ZGM5Li4w
OTFkMDRhODA1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5o
CkBAIC0xMTA2LDYgKzExMDYsNyBAQCB0eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgX1VJU2Ny
b2xsRGV2aWNlQ2F0ZWdvcnkpIHsKIC0gKFVJU2Nyb2xsVmlldyAqKV9zY3JvbGxlcjsKIC0gKENH
UG9pbnQpYWNjZXNzaWJpbGl0eUNvbnZlcnRQb2ludEZyb21TY2VuZVJlZmVyZW5jZUNvb3JkaW5h
dGVzOihDR1BvaW50KXBvaW50OwogLSAoQ0dSZWN0KWFjY2Vzc2liaWxpdHlDb252ZXJ0UmVjdFRv
U2NlbmVSZWZlcmVuY2VDb29yZGluYXRlczooQ0dSZWN0KXJlY3Q7CistICh2b2lkKWFjY2Vzc2li
aWxpdHlSZWxheU5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lIG5vdGlm
aWNhdGlvbkRhdGE6KE5TRGF0YSAqKW5vdGlmaWNhdGlvbkRhdGE7CiAtIChVSVJlY3RFZGdlKV9l
ZGdlc0FwcGx5aW5nU2FmZUFyZWFJbnNldHNUb0NvbnRlbnRJbnNldDsKIEBlbmQKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvU2FuZGJveFByb2ZpbGVzL2lvcy9jb20uYXBw
bGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4gYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5k
Ym94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbgppbmRleCA4
M2M3MmJjNDQ3ODMuLmI2YTVkNmI1MjI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9SZXNv
dXJjZXMvU2FuZGJveFByb2ZpbGVzL2lvcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuc2Iu
aW4KKysrIGIvU291cmNlL1dlYktpdC9SZXNvdXJjZXMvU2FuZGJveFByb2ZpbGVzL2lvcy9jb20u
YXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuc2IuaW4KQEAgLTkyNyw3ICs5MjcsNiBAQAogICAgICAg
ICAoZXh0ZW5zaW9uICJjb20uYXBwbGUud2Via2l0LmV4dGVuc2lvbi5tYWNoIikKICAgICAgICAg
KGdsb2JhbC1uYW1lCiAgICAgICAgICAgICAiY29tLmFwcGxlLmZyb250Ym9hcmQuc3lzdGVtYXBw
c2VydmljZXMiCi0gICAgICAgICAgICAiY29tLmFwcGxlLmlwaG9uZS5heHNlcnZlci1zeXN0ZW13
aWRlIgogICAgICAgICAgICAgImNvbS5hcHBsZS5tb2JpbGVhc3NldGQudjIiCiAgICAgICAgICAg
ICAiY29tLmFwcGxlLm1vYmlsZWdlc3RhbHQueHBjIikpKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDlkNjdk
Y2FmMjJjOS4uZWY4NGYyODg5NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKCkK
IAogICAgIFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGhhbmRsZUFycmF5OwogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaGFuZGxlQXJyYXkgPSBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cCh7ICJjb20uYXBwbGUuaXBob25lLmF4c2VydmVy
LXN5c3RlbXdpZGUiX3MsICJjb20uYXBwbGUuZnJvbnRib2FyZC5zeXN0ZW1hcHBzZXJ2aWNlcyJf
cyB9LCBhdWRpdFRva2VuKCksIFNhbmRib3hFeHRlbnNpb246Ok1hY2hCb290c3RyYXBPcHRpb25z
OjpFbmFibGVNYWNoQm9vdHN0cmFwKTsKKyAgICBoYW5kbGVBcnJheSA9IFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKHsgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5
c3RlbWFwcHNlcnZpY2VzIl9zIH0sIGF1ZGl0VG9rZW4oKSwgU2FuZGJveEV4dGVuc2lvbjo6TWFj
aEJvb3RzdHJhcE9wdGlvbnM6OkVuYWJsZU1hY2hCb290c3RyYXApOwogI2VuZGlmCiAKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2NrU2VydmljZXNSZXF1aXJlZEJ5QWNjZXNz
aWJpbGl0eShoYW5kbGVBcnJheSksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
CmluZGV4IGU1Y2ViNTQ0NmUyMy4uOWEwYjJkNTRlNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCkBAIC0zNDYsNiArMzQ2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9
IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9S
b290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpID0gMDsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZpcnR1YWwgdm9p
ZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0
YWluUHRyPE5TRGF0YT4mKSA9IDA7CisjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApp
bmRleCBmYmM1NjM5NDMwMDQuLjdlNDk2ZDliMTRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTIzOTcsNiArMjM5Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
b290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKT4mJik7CiAgICAgdm9pZCBh
Y2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Ny
ZWVuUG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50UG9pbnQpPiYmKTsK
ICAgICB2b2lkIHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkludFJlY3Qp
PiYmKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
OworI2VuZGlmCiAgICAgdm9pZCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViQ29yZTo6
RnJhbWVJZGVudGlmaWVyLCBGcmFtZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VWaWV3
cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7CiAgICAg
dm9pZCBwYWdlRGlkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggODY3MGE1
Y2QwOWQ5Li4wZDMyNWQ4NjRjZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTUzLDYgKzUzLDkgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZVByb3h5IHsKICAgICBSb290Vmlld1RvU2NyZWVuKFdlYkNvcmU6OkludFJlY3QgcmVjdCkg
LT4gKFdlYkNvcmU6OkludFJlY3Qgc2NyZWVuRnJhbWUpIFN5bmNocm9ub3VzCiAgICAgQWNjZXNz
aWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+
IChXZWJDb3JlOjpJbnRQb2ludCB3aW5kb3dQb2ludCkgU3luY2hyb25vdXMKICAgICBSb290Vmll
d1RvQWNjZXNzaWJpbGl0eVNjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3Jl
OjpJbnRSZWN0IHNjcmVlbkZyYW1lKSBTeW5jaHJvbm91cworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgUmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKFN0cmluZyBub3RpZmljYXRp
b25OYW1lLCBJUEM6OkRhdGFSZWZlcmVuY2Ugbm90aWZpY2F0aW9uRGF0YSkKKyNlbmRpZgogCiAj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBTaG93VmFsaWRhdGlvbk1l
c3NhZ2UoV2ViQ29yZTo6SW50UmVjdCBhbmNob3JSZWN0LCBTdHJpbmcgbWVzc2FnZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5kZXggZDU2
NDc2OWI0ZWI2Li42OTZjNzMxNmZjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC0xMTMsNiArMTEzLDcgQEAgcHJpdmF0ZToKICAg
ICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIG92ZXJyaWRlOwogICAgIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5U
b1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgV2ViQ29y
ZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0YWluUHRyPE5TRGF0YT4mKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJv
b2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIHZvaWQgZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBi
b29sIHdhc0V2ZW50SGFuZGxlZCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggYTVkMjJmYjJkZWQxLi4zNDdiNDA5
MDdlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MubW0KQEAgLTQ1Myw3ICs0NTMsMTQgQEAgSW50UG9pbnQgUGFnZUNsaWVudEltcGw6OmFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICAg
ICAgcm9vdFZpZXdQb2ludCA9IFtjb250ZW50VmlldyBhY2Nlc3NpYmlsaXR5Q29udmVydFBvaW50
RnJvbVNjZW5lUmVmZXJlbmNlQ29vcmRpbmF0ZXM6cm9vdFZpZXdQb2ludF07CiAgICAgcmV0dXJu
IEludFBvaW50KHJvb3RWaWV3UG9pbnQpOwogfQotICAgIAorCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRp
b25OYW1lLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYgbm90aWZpY2F0aW9uRGF0YSkKK3sKKyAg
ICBhdXRvIGNvbnRlbnRWaWV3ID0gdGhpcy0+Y29udGVudFZpZXcoKTsKKyAgICBpZiAoW2NvbnRl
bnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYWNjZXNzaWJpbGl0eVJlbGF5Tm90
aWZpY2F0aW9uOm5vdGlmaWNhdGlvbkRhdGE6KV0pCisgICAgICAgIFtjb250ZW50VmlldyBhY2Nl
c3NpYmlsaXR5UmVsYXlOb3RpZmljYXRpb246bm90aWZpY2F0aW9uTmFtZSBub3RpZmljYXRpb25E
YXRhOm5vdGlmaWNhdGlvbkRhdGEuZ2V0KCldOworfQorCiBJbnRSZWN0IFBhZ2VDbGllbnRJbXBs
Ojpyb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIENHUmVjdCByb290Vmlld1JlY3QgPSByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggZWE1YWZjMGVkZDVhLi43OTk3MGY4OWEx
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJ
T1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQpAQCAtNzc2LDYgKzc3NiwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJXZWJQcm9j
ZXNzQWNjZXNzaWJpbGl0eVRva2VuKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZQogICAgIHBhZ2VD
bGllbnQoKS5hY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoZGF0YSk7CiB9ICAg
IAogCisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24o
Y29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGEpCit7CisgICAgTlNEYXRhICpub3RpZmljYXRpb25EYXRhID0gW05TRGF0YSBkYXRhV2l0
aEJ5dGVzOmRhdGEuZGF0YSgpIGxlbmd0aDpkYXRhLnNpemUoKV07CisgICAgcGFnZUNsaWVudCgp
LnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3RpZmlj
YXRpb25EYXRhKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmFzc2lzdGl2ZVRlY2hub2xvZ3lN
YWtlRmlyc3RSZXNwb25kZXIoKQogewogICAgIHBhZ2VDbGllbnQoKS5hc3Npc3RpdmVUZWNobm9s
b2d5TWFrZUZpcnN0UmVzcG9uZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDYzMThj
NWI2NWVjMC4uN2M4NmU0YTNjZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTYxLDYg
KzE2MSwyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3Rp
ZmljYXRpb246OkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKFJlZjxXZWJQYWdl
PiBwYWdlLCBBdXRvbWF0aWNhbGx5U2VuZCBhdXRvbWF0aWNhbGx5U2VuZCkKKyAgICA6IG1fcGFn
ZShwYWdlKQorICAgICwgbV9hdXRvbWF0aWNhbGx5U2VuZChhdXRvbWF0aWNhbGx5U2VuZCkKK3sK
KyAgICBpZiAobV9hdXRvbWF0aWNhbGx5U2VuZCA9PSBBdXRvbWF0aWNhbGx5U2VuZDo6WWVzKQor
ICAgICAgICBzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKHRydWUpOworfQorCitBWFJlbGF5UHJv
Y2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6fkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZp
Y2F0aW9uKCkKK3sKKyAgICBpZiAobV9hdXRvbWF0aWNhbGx5U2VuZCA9PSBBdXRvbWF0aWNhbGx5
U2VuZDo6WWVzKQorICAgICAgICBzZW5kUHJvY2Vzc1N1c3BlbmRNZXNzYWdlKGZhbHNlKTsKK30K
KworI2lmICFQTEFURk9STShDT0NPQSkKK3ZvaWQgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3Rp
ZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UoYm9vbCkgeyB9CisjZW5kaWYKKwog
V2ViQ2hyb21lQ2xpZW50OjpXZWJDaHJvbWVDbGllbnQoV2ViUGFnZSYgcGFnZSkKICAgICA6IG1f
cGFnZShwYWdlKQogewpAQCAtMzIyLDcgKzM0MCw3IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlV2luZG93KExvY2FsRnJhbWUmIGZyYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2lu
CiAKICAgICBhdXRvIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpOwog
Ci0gICAgYXV0byBzZW5kUmVzdWx0ID0gd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlKHdlYkZy
YW1lLT5pbmZvKCksIHdlYkZyYW1lLT5wYWdlKCktPndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwg
bmF2aWdhdGlvbkFjdGlvbi5yZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVyZXMsIG5hdmln
YXRpb25BY3Rpb25EYXRhKSwgcGFnZSgpLmlkZW50aWZpZXIoKSwgSVBDOjpUaW1lb3V0OjppbmZp
bml0eSgpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNN
ZXNzYWdlcywgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1
c3BlbmQgfSk7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQ
YWdlKHdlYkZyYW1lLT5pbmZvKCksIHdlYkZyYW1lLT5wYWdlKCktPndlYlBhZ2VQcm94eUlkZW50
aWZpZXIoKSwgbmF2aWdhdGlvbkFjdGlvbi5yZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVy
ZXMsIG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgcGFnZSgpLmlkZW50aWZpZXIoKSwgSVBDOjpUaW1l
b3V0OjppbmZpbml0eSgpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdX
aXRoQXN5bmNNZXNzYWdlcyB9KTsKICAgICBpZiAoIXNlbmRSZXN1bHQuc3VjY2VlZGVkKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC00NTcsNyArNDc1LDEwIEBAIGJvb2wgV2ViQ2hy
b21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBMb2NhbEZyCiAKICAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRp
c2FibGVyOwogCi0gICAgYXV0byBzZW5kUmVzdWx0ID0gcHJvdGVjdGVkUGFnZSgpLT5zZW5kU3lu
Y1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIG1lc3Nh
Z2UpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCk7CisgICAgYXV0byBwYWdlID0gcHJvdGVjdGVkUGFnZSgpOworICAgIGF1dG8gcmVsYXkgPSBB
WFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihwYWdlKTsKKworICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwod2ViRnJhbWUtPmZyYW1lSUQoKSwg
d2ViRnJhbWUtPmluZm8oKSwgbWVzc2FnZSkpOwogICAgIGF1dG8gW3Nob3VsZENsb3NlXSA9IHNl
bmRSZXN1bHQudGFrZVJlcGx5T3IoZmFsc2UpOwogICAgIHJldHVybiBzaG91bGRDbG9zZTsKIH0K
QEAgLTUwNSw3ICs1MjYsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFs
ZXJ0KExvY2FsRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIGFsZXJ0VAogICAgIEhhbmdEZXRl
Y3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAgICAgSVBDOjpVbmJvdW5kZWRT
eW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7CiAKLSAgICBw
YWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVu
SmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5pbmZvKCksIGFs
ZXJ0VGV4dCksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3lu
Y01lc3NhZ2VzLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxs
U3VzcGVuZCB9KTsKKyAgICBhdXRvIHJlbGF5ID0gQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3Rp
ZmljYXRpb24ocGFnZSk7CisKKyAgICBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlE
KCksIHdlYkZyYW1lLT5pbmZvKCksIGFsZXJ0VGV4dCksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6
TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzIH0pOwogfQogCiBib29sIFdlYkNocm9t
ZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKQEAgLTUyNCw3ICs1NDcsOSBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6
cnVuSmF2YVNjcmlwdENvbmZpcm0oTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVz
cwogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlzYWJsZXI7CiAgICAg
SVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBD
U2NvcGU7CiAKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVk
UmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJh
bWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgbWVzc2FnZSksIHsgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzLCBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCB9KTsKKyAgICBhdXRvIHJl
bGF5ID0gQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24ocGFnZSk7CisKKyAgICBh
dXRvIHNlbmRSZXN1bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwg
d2ViRnJhbWUtPmluZm8oKSwgbWVzc2FnZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRh
aW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzIH0pOwogICAgIGF1dG8gW3Jlc3VsdF0gPSBzZW5k
UmVzdWx0LnRha2VSZXBseU9yKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTQ1
LDcgKzU3MCw5IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KExv
Y2FsRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhCiAgICAgSGFuZ0RldGVjdGlvbkRp
c2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKICAgICBJUEM6OlVuYm91bmRlZFN5bmNocm9u
b3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKIAotICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1l
LT5pbmZvKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6
TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJ
bmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCB9KTsKKyAgICBhdXRvIHJlbGF5ID0gQVhS
ZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24ocGFnZSk7CisKKyAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+
aW5mbygpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLCB7IElQQzo6U2VuZFN5bmNPcHRpb246Ok1h
aW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyB9KTsKICAgICBpZiAoIXNlbmRSZXN1bHQu
c3VjY2VlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzc4LDkgKzgwNSwxMSBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cHJpbnQoTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0
cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlKQogI2VuZGlmCiAKICAgICBhdXRvIHRydW5jYXRlZFRp
dGxlID0gdHJ1bmNhdGVGcm9tRW5kKHRpdGxlLCBtYXhUaXRsZUxlbmd0aCk7CisgICAgYXV0byBw
YWdlID0gcHJvdGVjdGVkUGFnZSgpOworICAgIGF1dG8gcmVsYXkgPSBBWFJlbGF5UHJvY2Vzc1N1
c3BlbmRlZE5vdGlmaWNhdGlvbihwYWdlKTsKIAogICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25v
dXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlOwotICAgIHByb3RlY3RlZFBh
Z2UoKS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBy
aW50RnJhbWUod2ViRnJhbWUtPmZyYW1lSUQoKSwgdHJ1bmNhdGVkVGl0bGUuc3RyaW5nLCBwZGZG
aXJzdFBhZ2VTaXplKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNz
V2lsbFN1c3BlbmQpOworICAgIHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpQcmludEZyYW1lKHdlYkZyYW1lLT5mcmFtZUlEKCksIHRydW5jYXRl
ZFRpdGxlLnN0cmluZywgcGRmRmlyc3RQYWdlU2l6ZSkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90KQpAQCAtODAwLDcgKzgyOSw5IEBA
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sCiAgICAgaWYgKCFjYWNoZVN0b3JhZ2UuY2FsY3VsYXRl
UXVvdGFGb3JPcmlnaW4ob3JpZ2luLCBjdXJyZW50UXVvdGEpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHNlbmRSZXN1bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShv
cmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpLCBjdXJyZW50UXVvdGEsIHRvdGFsQnl0
ZXNOZWVkZWQpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxs
U3VzcGVuZCk7CisgICAgYXV0byByZWxheSA9IEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZp
Y2F0aW9uKHBhZ2UpOworCisgICAgYXV0byBzZW5kUmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRo
RGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEob3JpZ2luLmRhdGEoKS5kYXRhYmFzZUlkZW50aWZpZXIoKSwgY3VycmVu
dFF1b3RhLCB0b3RhbEJ5dGVzTmVlZGVkKSk7CiAgICAgYXV0byBbbmV3UXVvdGFdID0gc2VuZFJl
c3VsdC50YWtlUmVwbHlPcigwKTsKIAogICAgIGNhY2hlU3RvcmFnZS5zdG9yZVVwZGF0ZWRRdW90
YUZvck9yaWdpbigmb3JpZ2luLCBuZXdRdW90YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggYzhj
Mjg3YzVhZDYyLi4yZDA5YWY3MGE4YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTUyLDYgKzUy
LDEwIEBAIHB1YmxpYzoKICAgICBXZWJQYWdlJiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
LmdldCgpOyB9CiAgICAgUmVmPFdlYlBhZ2U+IHByb3RlY3RlZFBhZ2UoKSBjb25zdDsKIAorI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0YWluUHRyPE5TRGF0YT4mKSBjb25zdCBmaW5h
bDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZvaWQgY2hyb21lRGVzdHJveWVkKCkgZmluYWw7
CiAgICAgCkBAIC00OTYsNCArNTAwLDE3IEBAIHByaXZhdGU6CiAgICAgQ2hlY2tlZFJlZjxXZWJQ
YWdlPiBtX3BhZ2U7CiB9OwogCitjbGFzcyBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNh
dGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBBdXRvbWF0aWNhbGx5U2VuZCA6IGJvb2wg
eyBObywgWWVzIH07CisKKyAgICBleHBsaWNpdCBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlm
aWNhdGlvbihSZWY8V2ViUGFnZT4sIEF1dG9tYXRpY2FsbHlTZW5kID0gQXV0b21hdGljYWxseVNl
bmQ6Olllcyk7CisgICAgfkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKCk7CisK
KyAgICB2b2lkIHNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UoYm9vbCBzdXNwZW5kZWQpOworcHJp
dmF0ZToKKyAgICBDaGVja2VkUmVmPFdlYlBhZ2U+IG1fcGFnZTsKKyAgICBBdXRvbWF0aWNhbGx5
U2VuZCBtX2F1dG9tYXRpY2FsbHlTZW5kOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0KaW5kZXggNDQxMzAxMDM0OWU4Li5lYTRhYzA3NGZk
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0KQEAgLTI5LDggKzI5LDE4IEBACiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAKICNpbXBvcnQgIldlYkljb25VdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9JY29uLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkFwcGxp
Y2F0aW9uU2VydmljZXNTUEkuaCIKKworZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5v
dGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7CisKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTM5LDYgKzQ5LDIwIEBAIFJlZlB0cjxJY29uPiBXZWJDaHJvbWVDbGllbnQ6OmNy
ZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzCiAgICAgcmV0
dXJuIEljb246OmNyZWF0ZShpY29uRm9yRmlsZXMoZmlsZW5hbWVzKS5nZXQoKSk7CiB9CiAKK3Zv
aWQgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVu
ZE1lc3NhZ2UoYm9vbCBzdXNwZW5kZWQpCit7CisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgX0FYVUlFbGVtZW50Tm90aWZ5UHJvY2Vzc1N1c3BlbmRTdGF0dXMoc3VzcGVuZGVkID8g
QVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkIDogQVhTdXNwZW5kU3RhdHVzUnVubmluZyk7CisjZWxz
ZQorICAgIE5TRGljdGlvbmFyeSAqbWVzc2FnZSA9IEB7IEAicGlkIiA6IEAoZ2V0cGlkKCkpLCBA
InN1c3BlbmRlZCIgOiBAKHN1c3BlbmRlZCkgfTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNLZXll
ZEFyY2hpdmVyIGFyY2hpdmVkRGF0YVdpdGhSb290T2JqZWN0Om1lc3NhZ2UgcmVxdWlyaW5nU2Vj
dXJlQ29kaW5nOllFUyBlcnJvcjpuaWxdOworICAgIG1fcGFnZS0+cmVsYXlBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uKCJBWFByb2Nlc3NTdXNwZW5kZWQiX3MsIGRhdGEpOworI2VuZGlmCit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkNo
cm9tZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCmluZGV4IGY3NWQwYzExNzY0Yi4uZTZjYTQ0MDMx
MGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
aW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQpAQCAtMTc5LDYgKzE3OSwx
MSBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6c2hvd0RhdGFEZXRlY3RvcnNVSUZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lk
IFdlYkNocm9tZUNsaWVudDo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0
cmluZyYgbm90aWZpY2F0aW9uTmFtZSwgY29uc3QgUmV0YWluUHRyPE5TRGF0YT4mIG5vdGlmaWNh
dGlvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb3RlY3RlZFBhZ2UoKS0+cmVsYXlBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNhdGlvbkRhdGEp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19G
QU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IDNjYWNlMTZiZjZiZC4uN2YzYzdiOTU0NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNzg5Niw3ICs3ODk2LDEwIEBAIFdlYkNvcmU6
OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgV2ViUGFnZTo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKFdl
YkNvcmU6OkRPTVBhc3RlCiAgICAgLy8gc2hvdWxkIGJlIHJlbW92ZWQgb25jZSA8cmRhcjovL3By
b2JsZW0vMTYyMDcwMDI+IGlzIHJlc29sdmVkLgogICAgIHByZWVtcHRpdmVseVNlbmRBdXRvY29y
cmVjdGlvbkNvbnRleHQoKTsKICNlbmRpZgotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
V2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0RE9NUGFzdGVB
Y2Nlc3MocGFzdGVBY2Nlc3NDYXRlZ29yeSwgcmVjdEZvckVsZW1lbnRBdEludGVyYWN0aW9uTG9j
YXRpb24oKSwgb3JpZ2luSWRlbnRpZmllciksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBs
YXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKTsKKworICAgIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVk
Tm90aWZpY2F0aW9uKCp0aGlzKTsKKworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jV2l0
aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0RE9NUGFzdGVBY2Nl
c3MocGFzdGVBY2Nlc3NDYXRlZ29yeSwgcmVjdEZvckVsZW1lbnRBdEludGVyYWN0aW9uTG9jYXRp
b24oKSwgb3JpZ2luSWRlbnRpZmllcikpOwogICAgIGF1dG8gW3Jlc3BvbnNlXSA9IHNlbmRSZXN1
bHQudGFrZVJlcGx5T3IoV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZTo6RGVuaWVkRm9y
R2VzdHVyZSk7CiAgICAgcmV0dXJuIHJlc3BvbnNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDNiMDlhMjE0NGI1OS4uODcwYTI5MTNkZDY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03NzMsNiAr
NzczLDkgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJp
bGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICBXZWJD
b3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVsYXlBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJldGFpblB0cjxOU0Rh
dGE+Jik7CisjZW5kaWYKIAogICAgIFJlZlB0cjxXZWJJbWFnZT4gc2NhbGVkU25hcHNob3RXaXRo
T3B0aW9ucyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZG91YmxlIGFkZGl0aW9uYWxTY2FsZUZh
Y3RvciwgU25hcHNob3RPcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAyMDVhMTY2YjhiYjQuLjM3OTQwNGFk
ODVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTI1Niw2ICsyNTYsMTQgQEAgUmV0YWluUHRyPE5TRGF0YT4gV2ViUGFn
ZTo6YWNjZXNzaWJpbGl0eVJlbW90ZVRva2VuRGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIG5ld0Fj
Y2Vzc2liaWxpdHlSZW1vdGVUb2tlbihbTlNVVUlEIFVVSURdKTsKIH0KIAordm9pZCBXZWJQYWdl
OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRp
b25OYW1lLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYgbm90aWZpY2F0aW9uRGF0YSkKK3sKKyAg
ICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVRva2VuID0geyB9OworICAgIGlmIChbbm90aWZpY2F0
aW9uRGF0YSBsZW5ndGhdKQorICAgICAgICBkYXRhVG9rZW4gPSBJUEM6OkRhdGFSZWZlcmVuY2Uo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oW25vdGlmaWNhdGlvbkRhdGEgYnl0ZXNd
KSwgW25vdGlmaWNhdGlvbkRhdGEgbGVuZ3RoXSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uTmFtZSwg
ZGF0YVRva2VuKSk7Cit9CisKIHN0YXRpYyB2b2lkIGNvbXB1dGVFZGl0YWJsZVJvb3RIYXNDb250
ZW50QW5kUGxhaW5UZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRWRpdG9y
U3RhdGU6OlBvc3RMYXlvdXREYXRhJiBkYXRhKQogewogICAgIGRhdGEuaGFzQ29udGVudCA9IGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDQyZTJhZGNh
YTI4Yi4uYzlmYzZhZDI0ZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiV2ViQmFkZ2VDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJCcm9hZGNhc3RDaGFubmVsUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJDYWNoZVN0
b3JhZ2VQcm92aWRlci5oIgorI2luY2x1ZGUgIldlYkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUg
IldlYkNvbm5lY3Rpb25Ub1VJUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtNjg2LDcgKzY4Nyw4IEBAIHZv
aWQgV2ViUHJvY2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZShib29sIGlzSW5Qcm9jZXNzQ2FjaGUp
CiAKICAgICB1cGRhdGVQcm9jZXNzTmFtZShJc0luUHJvY2Vzc0luaXRpYWxpemF0aW9uOjpObyk7
CiAKLSAgICBJUEM6OkFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGlz
SW5Qcm9jZXNzQ2FjaGUpOworICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gZm9jdXNlZFdlYlBhZ2Uo
KSkKKyAgICAgICAgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oKndlYlBhZ2Us
IEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjpBdXRvbWF0aWNhbGx5U2VuZDo6
Tm8pLnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UoaXNJblByb2Nlc3NDYWNoZSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShpc0luUHJvY2Vzc0NhY2hlKTsKICNlbmRpZgpAQCAtMTYxNSw3ICsx
NjE3LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpwcmVwYXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5z
aW9uSW1taW5lbnQsIE1vbm90b25pY1RpbWUgZXN0aW0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBJUEM6OkFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZp
Y2F0aW9uKHRydWUpOworICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gZm9jdXNlZFdlYlBhZ2UoKSkK
KyAgICAgICAgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oKndlYlBhZ2UsIEFY
UmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjpBdXRvbWF0aWNhbGx5U2VuZDo6Tm8p
LnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UodHJ1ZSk7CiAgICAgdXBkYXRlRnJlZXplclN0YXR1
cygpOwogI2VuZGlmCiAKQEAgLTE2ODAsNyArMTY4Myw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cHJv
Y2Vzc0RpZFJlc3VtZSgpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
SVBDOjpBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihmYWxzZSk7Cisg
ICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSBmb2N1c2VkV2ViUGFnZSgpKQorICAgICAgICBBWFJlbGF5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbigqd2ViUGFnZSwgQVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb246OkF1dG9tYXRpY2FsbHlTZW5kOjpObykuc2VuZFByb2Nlc3NTdXNw
ZW5kTWVzc2FnZShmYWxzZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dElPUy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50SU9TLmgKaW5kZXggYWNiMzdjMzlhOGRhLi5lMDJkODhkYTU2ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElP
Uy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZWxlY3RJ
dGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkgZmluYWw7CiAgICAgUmVm
UHRyPFdlYkNvcmU6OlBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVu
dUNsaWVudCYpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1cE1l
bnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQmKSBjb25z
dCBmaW5hbDsKLQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFJldGFpblB0cjxOU0RhdGE+JikgY29uc3QgZmluYWwgeyB9CiAgICAg
dm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVkKCkgZmluYWw7CiAgICAgdm9pZCBmb2N1c2Vk
RWxlbWVudENoYW5nZWQoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIFdlYkNvcmU6OlJvdXRlU2hhcmluZ1Bv
bGljeSwgY29uc3QgU3RyaW5nJikgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468200</attachid>
            <date>2023-10-12 23:59:09 -0700</date>
            <delta_ts>2023-10-13 10:29:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-262960-20231012235908.patch</filename>
            <type>text/plain</type>
            <size>46999</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">RnJvbSA3Y2Y4NjIwNzhhNjQwZDQ5NDNmMDU2NjQwZTFkMmY2ZDhhMzI0OGNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHJpcyBGbGVpemFjaCA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4K
RGF0ZTogVHVlLCAxMCBPY3QgMjAyMyAwODo1OTozOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFY
OiBSZW1vdmUgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXItc3lzdGVtd2lkZSIgc2FuZGJveAog
ZXhjZXB0aW9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI5NjAg
cmRhcjovLzExNjM4NzYxNQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpSZW1vdmUgdGhl
IGV4Y2VwdGlvbiB0byBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gd2lkZSBzZXJ2ZXIgZnJvbSBXZWJD
b250ZW50LgoKSW5zdGVhZCByZWxheSBub3RpZmljYXRpb25zIGJhY2sgdG8gdGhlIENsaWVudCBz
byB0aGF0IHRoYXQgcHJvY2VzcyBjYW4gcmVsYXkgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIHRo
ZSBzeXN0ZW0gc2VydmVyLgoKVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZSBJbmZvcm1TdXNw
ZW5kIG9wdGlvbiBpbiBDb25uZWN0aW9uIGJlY2F1c2UgaXQgY2FuIGJlIGhhbmRsZWQgYXQgYSBo
aWdoZXIgbGV2ZWwuCgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1Mu
bW06CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24pOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToK
KiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5U2Nyb2xsOl0pOgooLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOl0pOgooLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBoYW5kbGVOb3RpZmljYXRpb25SZWxheVRvQ2hyb21l
Om5vdGlmaWNhdGlvbkRhdGE6XSk6CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHBv
c3ROb3RpZmljYXRpb246XSk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcDoKKFdlYkNvcmU6OkNo
cm9tZTo6cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIGNvbnN0KToKKiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oOgoqIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmg6
CiogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oOgoqIFNvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgooSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yU3lu
Y1JlcGx5KToKKiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6CiogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tOgooSVBDOjpB
Y2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6IERlbGV0ZWQuCihJUEM6
OkNvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UpOiBEZWxldGVkLgooSVBDOjpDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKiBTb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94
UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbjoKKiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbToKKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrQWNjZXNzaWJpbGl0eVNlcnZlcklmTmVlZGVkKToKKiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CiogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5oOgoqIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbik6CiogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToK
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOgoq
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6QVhSZWxh
eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24pOgooV2ViS2l0OjpBWFJlbGF5UHJvY2Vzc1N1
c3BlbmRlZE5vdGlmaWNhdGlvbjo6fkFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9j
ZXNzU3VzcGVuZE1lc3NhZ2UpOgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRv
dyk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQpOgooV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpwcmludCk6CihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbToKKFdlYktpdDo6QVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb246OnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UpOgoqIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
OgooV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
biBjb25zdCk6CiogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CihXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyk6CiogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgooV2ViS2l0OjpXZWJQYWdlOjpyZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24pOgoqIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0SXNJblByb2Nlc3NDYWNoZSk6CihXZWJL
aXQ6OldlYlByb2Nlc3M6OnByZXBhcmVUb1N1c3BlbmQpOgooV2ViS2l0OjpXZWJQcm9jZXNzOjpw
cm9jZXNzRGlkUmVzdW1lKToKKiBTb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRJT1MuaDoKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCAgfCAgNCArKwogLi4uL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0gICAgIHwgMjIgKysrKystLS0tCiAuLi4vaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmggICAgfCAgNyArKy0KIC4uLi9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0gICB8IDIxICsrKysrKy0tLQogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcCAgICAgICAgICAgICAgICB8ICA3ICsrKwogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaCAgICAgICAgICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmggICAgICAgICAgICB8ICAzICsrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0
V2luZG93LmggICAgICAgICAgfCAgNyArKysKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwICAgICB8IDEzICstLS0tLQogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Q29ubmVjdGlvbi5oICAgICAgIHwgMTMgKystLS0tCiAuLi4vUGxhdGZvcm0vSVBDL2NvY29hL0Nv
bm5lY3Rpb25Db2NvYS5tbSAgICAgfCAzOSAtLS0tLS0tLS0tLS0tLS0tCiAuLi4vUGxhdGZvcm0v
SVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwICAgICAgfCAgOCAtLS0tCiAuLi4vV2ViS2l0L1Bs
YXRmb3JtL0lQQy93aW4vQ29ubmVjdGlvbldpbi5jcHAgfCAgOCAtLS0tCiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2UubW0gICAgfCAgMiArCiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCAgICAgfCAgMSArCiAuLi4vaW9zL2NvbS5hcHBsZS5X
ZWJLaXQuV2ViQ29udGVudC5zYi5pbiAgICAgfCAgMSAtCiAuLi4vVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQcm94eUNvY29hLm1tICAgfCAgMiArLQogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oICAgICAgICAgIHwgIDMgKysKIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oICAgICAgICB8ICAzICsrCiAuLi4vV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4gfCAgMyArKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmggIHwgIDEgKwogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tIHwgIDkgKysrLQogLi4uL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQ
cm94eUlPUy5tbSAgIHwgIDcgKysrCiAuLi4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcCAgICAgICAgfCA0NSArKysrKysrKysrKysrKysrLS0tCiAuLi4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmggICAgICAgICAgfCAxNyArKysrKysrCiAuLi4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Q29jb2EubW0gICAgfCAyNCArKysrKysrKysrCiAuLi4vV2ViQ29y
ZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbSAgfCAgNSArKysKIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwICB8ICA1ICsrLQogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oICAgIHwgIDMgKysKIC4uLi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gICAgICB8ICA4ICsrKysKIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCAgICAgICB8IDE4ICsrKysrKy0tCiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oICAgICAgICAgfCAgMSArCiAuLi4vaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5oICAgfCAgMiArLQogMzQgZmlsZXMgY2hhbmdl
ZCwgMjEwIGluc2VydGlvbnMoKyksIDEwOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IGFkMmI0YzVkM2JiMy4uNDg5M2Y2
YWE3YzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aApAQCAtNDc2LDYgKzQ3NiwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
QVhJRD4+IHJlbGF0ZWRPYmplY3RJRHNGb3IoY29uc3QgQVhDb3JlT2JqZWN0JiwgQVhSZWxhdGlv
blR5cGUpOwogICAgIHZvaWQgdXBkYXRlUmVsYXRpb25zKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgcmVsYXlOb3Rp
ZmljYXRpb24oY29uc3QgU3RyaW5nJiwgUmV0YWluUHRyPE5TRGF0YT4pOworI2VuZGlmCisKICNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIHZvaWQgc2NoZWR1bGVP
YmplY3RSZWdpb25zVXBkYXRlKGJvb2wgc2NoZWR1bGVJbW1lZGlhdGVseSA9IGZhbHNlKSB7IG1f
Z2VvbWV0cnlNYW5hZ2VyLT5zY2hlZHVsZU9iamVjdFJlZ2lvbnNVcGRhdGUoc2NoZWR1bGVJbW1l
ZGlhdGVseSk7IH0KICAgICB2b2lkIHdpbGxVcGRhdGVPYmplY3RSZWdpb25zKCkgeyBtX2dlb21l
dHJ5TWFuYWdlci0+d2lsbFVwZGF0ZU9iamVjdFJlZ2lvbnMoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KaW5kZXggNWIy
ZjljYWFiODkwLi43NWE5YzUwNjg5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL0FYT2JqZWN0Q2FjaGVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQpAQCAtMjksOCArMjksOSBAQAogI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaW1wb3J0
ICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5oIgorI2ltcG9ydCAiQ2hyb21lLmgiCiAjaW1wb3J0ICJSZW5kZXJPYmplY3Qu
aCIKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgiCiAKICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtOTAsMjQgKzkxLDI3IEBAIEFTQ0lJTGl0ZXJhbCBB
WE9iamVjdENhY2hlOjpub3RpZmljYXRpb25QbGF0Zm9ybU5hbWUoQVhOb3RpZmljYXRpb24gbm90
aWZpY2F0aW9uCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cmVs
YXlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBSZXRhaW5QdHI8
TlNEYXRhPiBub3RpZmljYXRpb25EYXRhKQoreworICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1l
bnQoKS5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLnJlbGF5QWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3RpZmljYXRpb25EYXRhKTsKK30KKwogdm9p
ZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBv
YmplY3QsIEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKICAgICBpZiAoIW9iamVjdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gaU9TIG5vdGlmaWNhdGlvbnMgbXVzdCB1bHRpbWF0
ZWx5IGNhbGwgVUlLaXQgVUlBY2Nlc3NpYmlsaXR5UG9zdE5vdGlmaWNhdGlvbi4KLSAgICAvLyBC
dXQgV2ViQ29yZSBpcyBub3QgbGlua2VkIHdpdGggVUlLaXQuIFNvIGEgd29ya2Fyb3VuZCBpcyB0
byBvdmVycmlkZSB0aGUgd3JhcHBlcidzCi0gICAgLy8gcG9zdE5vdGlmaWNhdGlvbiBtZXRob2Qg
aW4gdGhlIHN5c3RlbSBXZWJLaXRBY2Nlc3NpYmlsaXR5IGJ1bmRsZSB0aGF0IGRvZXMgbGluayBV
SUtpdC4KLSAgICBhdXRvIG5vdGlmaWNhdGlvbk5hbWUgPSBub3RpZmljYXRpb25QbGF0Zm9ybU5h
bWUobm90aWZpY2F0aW9uKTsKLSAgICBpZiAobm90aWZpY2F0aW9uTmFtZS5pc051bGwoKSkKKyAg
ICBhdXRvIHN0cmluZ05vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvblBsYXRmb3JtTmFtZShub3Rp
ZmljYXRpb24pOworICAgIGlmIChzdHJpbmdOb3RpZmljYXRpb24uaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIG5zTm90aWZpY2F0aW9uTmFtZSA9IG5vdGlmaWNhdGlvbk5h
bWUuY3JlYXRlTlNTdHJpbmcoKTsKLSAgICBbb2JqZWN0LT53cmFwcGVyKCkgcG9zdE5vdGlmaWNh
dGlvbjpuc05vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOworICAgIGF1dG8gbm90aWZpY2F0aW9uTmFt
ZSA9IHN0cmluZ05vdGlmaWNhdGlvbi5jcmVhdGVOU1N0cmluZygpOworICAgIFtvYmplY3QtPndy
YXBwZXIoKSBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZpY2F0aW9uOm5vdGlmaWNh
dGlvbk5hbWUuZ2V0KCldOwogCiAgICAgLy8gVG8gc2ltdWxhdGUgQVggbm90aWZpY2F0aW9ucyBm
b3IgTGF5b3V0VGVzdHMgb24gdGhlIHNpbXVsYXRvciwgY2FsbAogICAgIC8vIHRoZSB3cmFwcGVy
J3MgYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbi4KLSAgICBbb2JqZWN0LT53cmFwcGVy
KCkgYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjpuc05vdGlmaWNhdGlvbk5hbWUuZ2V0
KCldOworICAgIFtvYmplY3QtPndyYXBwZXIoKSBhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0
aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOwogfQogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBv
c3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmplY3QsIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaAppbmRleCA2YzZi
YjkxZjgwYzAuLjIyMjMyYzZjOTczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5oCkBAIC03Niw3ICs3NiwxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vz
c2liaWxpdHlBY2NlcHRlZElubGluZVRleHRDb21wbGV0aW9uID0gQCJVSUFjY2VzcwogCiAtIChC
T09MKWlzQXR0YWNobWVudDsKIAotLSAodm9pZClwb3N0Tm90aWZpY2F0aW9uOihOU1N0cmluZyAq
KW5vdGlmaWNhdGlvbk5hbWU7CisvLyBUaGlzIGludGVyYWN0cyB3aXRoIEFjY2Vzc2liaWxpdHkg
c3lzdGVtIHRvIHBvc3QtcHJvY2VzcyBzb21lIG5vdGlmaWNhdGlvbnMuCistICh2b2lkKWFjY2Vz
c2liaWxpdHlPdmVycmlkZVByb2Nlc3NOb3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0
aW9uTmFtZTsKKworLy8gVGhpcyBpcyBjYWxsZWQgYnkgdGhlIEFjY2Vzc2liaWxpdHkgc3lzdGVt
IHRvIHJlbGF5IGJhY2sgdG8gdGhlIGNocm9tZS4KKy0gKHZvaWQpaGFuZGxlTm90aWZpY2F0aW9u
UmVsYXlUb0Nocm9tZTooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lIG5vdGlmaWNhdGlvbkRh
dGE6KE5TRGF0YSAqKW5vdGlmaWNhdGlvbkRhdGE7CisKIEBlbmQKIAogI2VuZGlmIC8vIEVOQUJM
RShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBhYjMxOTM4Njk0YmEuLjliYjdlNThiMDZhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTE2ODcsNyArMTY4
Nyw3IEBAIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVNjcm9sbDooVUlBY2Nlc3NpYmlsaXR5U2Nyb2xs
RGlyZWN0aW9uKWRpcmVjdGlvbgogCiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICBhdXRvIG5v
dGlmaWNhdGlvbk5hbWUgPSBBWE9iamVjdENhY2hlOjpub3RpZmljYXRpb25QbGF0Zm9ybU5hbWUo
QVhPYmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb246OkFYUGFnZVNjcm9sbGVkKS5jcmVhdGVOU1N0
cmluZygpOwotICAgICAgICBbc2VsZiBwb3N0Tm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUu
Z2V0KCldOworICAgICAgICBbc2VsZiBhY2Nlc3NpYmlsaXR5T3ZlcnJpZGVQcm9jZXNzTm90aWZp
Y2F0aW9uOm5vdGlmaWNhdGlvbk5hbWUuZ2V0KCldOwogCiAgICAgICAgIENHUG9pbnQgc2Nyb2xs
UG9zID0gW3NlbGYgX2FjY2Vzc2liaWxpdHlTY3JvbGxQb3NpdGlvbl07CiAgICAgICAgIE5TU3Ry
aW5nICp0ZXN0U3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJBWFNjcm9sbCBb
cG9zaXRpb246ICUuMmYgJS4yZl0iLCBzY3JvbGxQb3MueCwgc2Nyb2xsUG9zLnldOwpAQCAtMTY5
OCw2ICsxNjk4LDIwIEBAIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVNjcm9sbDooVUlBY2Nlc3NpYmls
aXR5U2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy0g
KHZvaWQpYWNjZXNzaWJpbGl0eU92ZXJyaWRlUHJvY2Vzc05vdGlmaWNhdGlvbjooTlNTdHJpbmcg
Kilub3RpZmljYXRpb25OYW1lCit7CisgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGJ5IHRoZSBB
Y2Nlc3NpYmlsaXR5IHN5c3RlbSB0byBwb3N0LXByb2Nlc3Mgbm90aWZpY2F0aW9ucy4KKyAgICAv
LyBXaGVuIGl0IGlzIGRvbmUsIGl0IHdpbGwgY2FsbCBiYWNrIGludG8gaGFuZGxlTm90aWZpY2F0
aW9uUmVsYXlUb0Nocm9tZS4KK30KKworLSAodm9pZCloYW5kbGVOb3RpZmljYXRpb25SZWxheVRv
Q2hyb21lOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUgbm90aWZpY2F0aW9uRGF0YTooTlNE
YXRhICopbm90aWZpY2F0aW9uRGF0YQoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVybjsKKworICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCktPnJlbGF5Tm90aWZpY2F0aW9uKHsgbm90aWZpY2F0aW9uTmFtZSB9
LCBub3RpZmljYXRpb25EYXRhKTsKK30KKwogLSAoQ0dSZWN0KV9hY2Nlc3NpYmlsaXR5UmVsYXRp
dmVGcmFtZQogewogICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzbmFwcGVkSW50UmVjdChzZWxm
LmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJlY3QoKSkpOwpAQCAtMjA0NiwxMSArMjA2MCw2IEBA
IC0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzooaWQpc3VidmlldwogICAgIHJl
dHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpcG9zdE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3Rp
ZmljYXRpb25OYW1lCi17Ci0gICAgLy8gVGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3
aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFwcHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4KLX0KLQogLy8g
VGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRoZSBVSUtpdCB3cmFwcGVyIHRvIGNhbGN1bGF0ZSBhbiBh
cHByb3ByaWF0ZSBkZXNjcmlwdGlvbiBvZiBzY3JvbGwgc3RhdHVzLgogLSAoQ0dQb2ludClfYWNj
ZXNzaWJpbGl0eVNjcm9sbFBvc2l0aW9uCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKaW5kZXggMDdhZTA1N2U3NGZhLi45ZDNmMzAwYWFjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKQEAgLTExNyw2ICsxMTcsOSBAQCBjbGFzcyBFbXB0eUNocm9tZUNsaWVu
dCA6IHB1YmxpYyBDaHJvbWVDbGllbnQgewogICAgIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihj
b25zdCBJbnRSZWN0JiByKSBjb25zdCBmaW5hbCB7IHJldHVybiByOyB9CiAgICAgSW50UG9pbnQg
YWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHA7IH07CiAgICAgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNj
cmVlbihjb25zdCBJbnRSZWN0JiByKSBjb25zdCBmaW5hbCB7IHJldHVybiByOyB9OworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0YWluUHRyPE5TRGF0YT4mKSBjb25zdCBmaW5hbCB7
IH07CisjZW5kaWYKIAogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVudChI
VE1MSW1hZ2VFbGVtZW50JikgZmluYWwgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBh
ZmI4YTcwNjc3NGYuLjVhMzBhM2VjZWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtMTI3
LDYgKzEyNywxMyBAQCBJbnRSZWN0IENocm9tZTo6cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3Jl
ZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKICAgICByZXR1cm4gbV9jbGllbnQtPnJvb3RW
aWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKHJlY3QpOwogfQogCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKK3ZvaWQgQ2hyb21lOjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3Qg
U3RyaW5nJiBub3RpZmljYXRpb25OYW1lLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYgbm90aWZp
Y2F0aW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPnJlbGF5QWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBub3RpZmljYXRpb25EYXRhKTsKK30K
KyNlbmRpZgorCiBQbGF0Zm9ybVBhZ2VDbGllbnQgQ2hyb21lOjpwbGF0Zm9ybVBhZ2VDbGllbnQo
KSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuaAppbmRleCBmODAzMzA1ODFkYmUuLjIwN2YyY2NiNDM1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCkBAIC0xMDUsNiArMTA1LDkgQEAgcHVibGljOgogICAgIEludFBvaW50IGFjY2Vz
c2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNs
aWVudCgpIGNvbnN0IG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9p
ZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0
YWluUHRyPE5TRGF0YT4mKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAppbmRleCAzMzI5M2YzNzMxMGQuLjUzMzYwNDMzZTM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCkBAIC0yMjUsNiArMjI1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVj
dCByb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlT
Y3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIHZpcnR1YWwgdm9pZCByZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3Qg
U3RyaW5nJiwgY29uc3QgUmV0YWluUHRyPE5TRGF0YT4mKSBjb25zdCA9IDA7CisjZW5kaWYKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KEhUTUxJbWFn
ZUVsZW1lbnQmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hv
c3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCBj
YjY1Mjk5OWY2OTMuLjZhNzFjNmI3NjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaApAQCAtMjgsNiArMjgsMTAgQEAKICNpbmNsdWRlICJHcmFwaGljc0NsaWVudC5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK09CSkNfQ0xBU1Mg
TlNEYXRhOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOwpA
QCAtNTcsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9T
Y3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFBvaW50IGFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBJ
bnRSZWN0JikgY29uc3QgPSAwOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdmlydHVh
bCB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25z
dCBSZXRhaW5QdHI8TlNEYXRhPiYpIGNvbnN0ID0gMDsKKyNlbmRpZgogCiAgICAgLy8gTWV0aG9k
IGZvciByZXRyaWV2aW5nIHRoZSBuYXRpdmUgY2xpZW50IG9mIHRoZSBwYWdlLgogICAgIHZpcnR1
YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKaW5kZXggMTZhMDU2MzA4ODM4
Li4yYzcxNzY4ZTQ1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nv
bm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24u
Y3BwCkBAIC03OTcsOCArNzk3LDYgQEAgYXV0byBDb25uZWN0aW9uOjp3YWl0Rm9yU3luY1JlcGx5
KFN5bmNSZXF1ZXN0SUQgc3luY1JlcXVlc3RJRCwgTWVzc2FnZU5hbWUgbWVzc2EKIHsKICAgICB0
aW1lb3V0ID0gdGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcodGltZW91
dCk7CiAKLSAgICB3aWxsU2VuZFN5bmNNZXNzYWdlKHNlbmRTeW5jT3B0aW9ucyk7Ci0KICAgICBi
b29sIHRpbWVkT3V0ID0gZmFsc2U7CiAgICAgd2hpbGUgKCF0aW1lZE91dCkgewogICAgICAgICAv
LyBGaXJzdCwgY2hlY2sgaWYgd2UgaGF2ZSBhbnkgbWVzc2FnZXMgdGhhdCB3ZSBuZWVkIHRvIHBy
b2Nlc3MuCkBAIC04MTQsMTYgKzgxMiwxMiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5j
UmVwbHkoU3luY1JlcXVlc3RJRCBzeW5jUmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChzeW5jUmVxdWVzdElELCBwZW5kaW5nU3luY1JlcGx5LnN5
bmNSZXF1ZXN0SUQgPT0gc3luY1JlcXVlc3RJRCk7CiAKICAgICAgICAgICAgIC8vIFdlIGZvdW5k
IHRoZSBzeW5jIHJlcGx5LgotICAgICAgICAgICAgaWYgKHBlbmRpbmdTeW5jUmVwbHkuZGlkUmVj
ZWl2ZVJlcGx5KSB7Ci0gICAgICAgICAgICAgICAgZGlkUmVjZWl2ZVN5bmNSZXBseShzZW5kU3lu
Y09wdGlvbnMpOworICAgICAgICAgICAgaWYgKHBlbmRpbmdTeW5jUmVwbHkuZGlkUmVjZWl2ZVJl
cGx5KQogICAgICAgICAgICAgICAgIHJldHVybiB7IFdURk1vdmUocGVuZGluZ1N5bmNSZXBseS5y
ZXBseURlY29kZXIpIH07Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFRoZSBjb25u
ZWN0aW9uIHdhcyBjbG9zZWQuCi0gICAgICAgICAgICBpZiAoIW1fc2hvdWxkV2FpdEZvclN5bmNS
ZXBsaWVzKSB7Ci0gICAgICAgICAgICAgICAgZGlkUmVjZWl2ZVN5bmNSZXBseShzZW5kU3luY09w
dGlvbnMpOworICAgICAgICAgICAgaWYgKCFtX3Nob3VsZFdhaXRGb3JTeW5jUmVwbGllcykKICAg
ICAgICAgICAgICAgICByZXR1cm4gRXJyb3I6OkludmFsaWRDb25uZWN0aW9uOwotICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gUHJvY2Vzc2luZyBhIHN5bmMgbWVzc2FnZSBj
b3VsZCBjYXVzZSB0aGUgY29ubmVjdGlvbiB0byBiZSBpbnZhbGlkYXRlZC4KQEAgLTgzMiw3ICs4
MjYsNiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHkoU3luY1JlcXVlc3RJRCBz
eW5jUmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogICAgICAgICAvLyBhbnkgbW9yZSBpbmNv
bWluZyBtZXNzYWdlcy4KICAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKElQQywgIkNvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHk6IENvbm5l
Y3Rpb24gbm8gbG9uZ2VyIHZhbGlkLCBpZD0lIiBQUkl1NjQsIHN5bmNSZXF1ZXN0SUQudG9VSW50
NjQoKSk7Ci0gICAgICAgICAgICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0aW9ucyk7
CiAgICAgICAgICAgICByZXR1cm4gRXJyb3I6OkludmFsaWRDb25uZWN0aW9uOwogICAgICAgICB9
CiAKQEAgLTg0OCw4ICs4NDEsNiBAQCBhdXRvIENvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHko
U3luY1JlcXVlc3RJRCBzeW5jUmVxdWVzdElELCBNZXNzYWdlTmFtZSBtZXNzYQogICAgIFJFTEVB
U0VfTE9HX0VSUk9SKElQQywgIkNvbm5lY3Rpb246OndhaXRGb3JTeW5jUmVwbHk6IFRpbWVkLW91
dCB3aGlsZSB3YWl0aW5nIGZvciByZXBseSBmb3IgJXMsIGlkPSUiIFBSSXU2NCwgZGVzY3JpcHRp
b24obWVzc2FnZU5hbWUpLCBzeW5jUmVxdWVzdElELnRvVUludDY0KCkpOwogI2VuZGlmCiAKLSAg
ICBkaWRSZWNlaXZlU3luY1JlcGx5KHNlbmRTeW5jT3B0aW9ucyk7Ci0KICAgICByZXR1cm4gRXJy
b3I6OlRpbWVvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApp
bmRleCBjNjNiYmUyNmQ1NGEuLmZjZmY4MTk4YWY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0Nvbm5lY3Rpb24uaApAQCAtODUsMTEgKzg1LDkgQEAgZW51bSBjbGFzcyBTZW5kT3B0aW9u
IDogdWludDhfdCB7CiB9OwogCiBlbnVtIGNsYXNzIFNlbmRTeW5jT3B0aW9uIDogdWludDhfdCB7
Ci0gICAgLy8gVXNlIHRoaXMgdG8gaW5mb3JtIHRoYXQgdGhpcyBzeW5jIGNhbGwgd2lsbCBzdXNw
ZW5kIHRoaXMgcHJvY2VzcyB1bnRpbCB0aGUgdXNlciByZXNwb25kcyB3aXRoIGlucHV0LgotICAg
IEluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kID0gMSA8PCAwLAotICAgIFVzZUZ1bGx5
U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZyA9IDEgPDwgMSwKLSAgICBGb3JjZURpc3BhdGNoV2hl
bkRlc3RpbmF0aW9uSXNXYWl0aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5ID0gMSA8PCAyLAotICAg
IE1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyA9IDEgPDwgMywKKyAgICBVc2VGdWxs
eVN5bmNocm9ub3VzTW9kZUZvclRlc3RpbmcgPSAxIDw8IDAsCisgICAgRm9yY2VEaXNwYXRjaFdo
ZW5EZXN0aW5hdGlvbklzV2FpdGluZ0ZvclVuYm91bmRlZFN5bmNSZXBseSA9IDEgPDwgMSwKKyAg
ICBNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMgPSAxIDw8IDIsCiB9OwogCiBlbnVt
IGNsYXNzIFdhaXRGb3JPcHRpb24gewpAQCAtNTMwLDkgKzUyOCw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBlbnF1ZXVlSW5jb21pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPikgV1RG
X1JFUVVJUkVTX0xPQ0sobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7CiAgICAgc2l6ZV90IGluY29t
aW5nTWVzc2FnZXNEaXNwYXRjaGluZ0JhdGNoU2l6ZSgpIGNvbnN0OwogCi0gICAgdm9pZCB3aWxs
U2VuZFN5bmNNZXNzYWdlKE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4pOwotICAgIHZvaWQgZGlk
UmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKLQogICAgIFRpbWVv
dXQgdGltZW91dFJlc3BlY3RpbmdJZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoVGltZW91dCkgY29u
c3Q7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTg5OSw2ICs4OTQsNCBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gdW5ib3VuZGVkU3luY2hyb25vdXNJUEND
b3VudDsKIH07CiAKLXZvaWQgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRp
b24oYm9vbCBzdXNwZW5kZWQpOwotCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQppbmRleCBlZTky
YTg1MjkyZDIuLmY2ZWYzMGViNDcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQpAQCAtNDksMjUgKzQ5LDkgQEAKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJQcm9jZXNzQXNzZXJ0aW9uLmgiCi0jaW1w
b3J0IDxVSUtpdC9VSUFjY2Vzc2liaWxpdHkuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9T
REspCi0jaW1wb3J0IDxBWFJ1bnRpbWUvQVhEZWZpbmVzLmg+Ci0jaW1wb3J0IDxBWFJ1bnRpbWUv
QVhOb3RpZmljYXRpb25Db25zdGFudHMuaD4KLSNlbHNlCi0jZGVmaW5lIGtBWFBpZFN0YXR1c0No
YW5nZWROb3RpZmljYXRpb24gMAogI2VuZGlmCiAKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFD
KQotCi0jaW1wb3J0ICJBcHBsaWNhdGlvblNlcnZpY2VzU1BJLmgiCi0KLWV4dGVybiAiQyIgQVhF
cnJvciBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhBWFN1c3BlbmRTdGF0
dXMpOwotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBuYW1lc3BhY2UgSVBDIHsKIAogc3Rh
dGljIGNvbnN0IHNpemVfdCBpbmxpbmVNZXNzYWdlTWF4U2l6ZSA9IDQwOTY7CkBAIC01OTAsMjkg
KzU3NCw2IEBAIGJvb2wgQ29ubmVjdGlvbjo6a2lsbCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGJvb2wgc3Vz
cGVuZGVkKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBfQVhVSUVsZW1lbnROb3RpZnlQcm9j
ZXNzU3VzcGVuZFN0YXR1cyhzdXNwZW5kZWQgPyBBWFN1c3BlbmRTdGF0dXNTdXNwZW5kZWQgOiBB
WFN1c3BlbmRTdGF0dXNSdW5uaW5nKTsKLSNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
VUlBY2Nlc3NpYmlsaXR5UG9zdE5vdGlmaWNhdGlvbihrQVhQaWRTdGF0dXNDaGFuZ2VkTm90aWZp
Y2F0aW9uLCBAeyBAInBpZCIgOiBAKGdldHBpZCgpKSwgQCJzdXNwZW5kZWQiIDogQChzdXNwZW5k
ZWQpIH0pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3VzcGVuZGVkKTsKLSNlbmRpZgotfQot
Ci12b2lkIENvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5j
T3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCi17Ci0gICAgaWYgKHNlbmRTeW5jT3B0aW9ucy5jb250
YWlucyhJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVu
ZCkgJiYgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24odHJ1ZSk7Ci19
Ci0KLXZvaWQgQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKLXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNv
bnRhaW5zKElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNw
ZW5kKSAmJiBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQot
ICAgICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihmYWxzZSk7
Ci19Ci0KIHBpZF90IENvbm5lY3Rpb246OnJlbW90ZVByb2Nlc3NJRCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3hwY0Nvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCmluZGV4IGUyZTkyMjUzOGJjZS4uODcyN2Q4YjQ3YmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rpb25V
bml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rpb25V
bml4LmNwcApAQCAtNTY2LDE0ICs1NjYsNiBAQCBTb2NrZXRQYWlyIGNyZWF0ZVBsYXRmb3JtQ29u
bmVjdGlvbih1bnNpZ25lZCBvcHRpb25zKQogICAgIHJldHVybiBzb2NrZXRQYWlyOwogfQogCi12
b2lkIENvbm5lY3Rpb246OndpbGxTZW5kU3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0
aW9uPikKLXsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlv
blNldDxTZW5kU3luY09wdGlvbj4pCi17Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29ubmVjdGlvbjo6
Q29ubmVjdGlvbklkZW50aWZpZXJQYWlyPiBDb25uZWN0aW9uOjpjcmVhdGVDb25uZWN0aW9uSWRl
bnRpZmllclBhaXIoKQogewogICAgIFNvY2tldFBhaXIgc29ja2V0UGFpciA9IGNyZWF0ZVBsYXRm
b3JtQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
d2luL0Nvbm5lY3Rpb25XaW4uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvd2luL0Nv
bm5lY3Rpb25XaW4uY3BwCmluZGV4IGYxN2I2NjY1MTU1MC4uZWEwMWM1ODFiN2VmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy93aW4vQ29ubmVjdGlvbldpbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvd2luL0Nvbm5lY3Rpb25XaW4uY3BwCkBAIC0z
MTQsMTQgKzMxNCw2IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShVbmlx
dWVSZWY8RW5jb2Rlcj4mJiBlbmNvZGVyKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBD
b25uZWN0aW9uOjp3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4p
Ci17Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8
U2VuZFN5bmNPcHRpb24+KQotewotfQotCiB2b2lkIENvbm5lY3Rpb246OkV2ZW50TGlzdGVuZXI6
Om9wZW4oRnVuY3Rpb248dm9pZCgpPiYmIGhhbmRsZXIpCiB7CiAgICAgbV9oYW5kbGVyID0gV1RG
TW92ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2Ev
Q29jb2FJbWFnZS5tbSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvQ29jb2FJbWFnZS5t
bQppbmRleCAzZWI5YjFkYTJmZTguLjFlZDMwZGY3ZjZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vY29jb2EvQ29jb2FJbWFnZS5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCA8Q29y
ZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgogI2VuZGlmCiAKKyNpbXBvcnQgPEltYWdlSU8vSW1h
Z2VJTy5oPgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUmV0YWluUHRyPE5TRGF0YT4gdHJhbnNj
b2RlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHR5cGVJZGVudGlmaWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAyYmQ3ZGExMzZkYzkuLjA5
MWQwNGE4MDVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgK
QEAgLTExMDYsNiArMTEwNiw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBfVUlTY3Jv
bGxEZXZpY2VDYXRlZ29yeSkgewogLSAoVUlTY3JvbGxWaWV3ICopX3Njcm9sbGVyOwogLSAoQ0dQ
b2ludClhY2Nlc3NpYmlsaXR5Q29udmVydFBvaW50RnJvbVNjZW5lUmVmZXJlbmNlQ29vcmRpbmF0
ZXM6KENHUG9pbnQpcG9pbnQ7CiAtIChDR1JlY3QpYWNjZXNzaWJpbGl0eUNvbnZlcnRSZWN0VG9T
Y2VuZVJlZmVyZW5jZUNvb3JkaW5hdGVzOihDR1JlY3QpcmVjdDsKKy0gKHZvaWQpYWNjZXNzaWJp
bGl0eVJlbGF5Tm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUgbm90aWZp
Y2F0aW9uRGF0YTooTlNEYXRhICopbm90aWZpY2F0aW9uRGF0YTsKIC0gKFVJUmVjdEVkZ2UpX2Vk
Z2VzQXBwbHlpbmdTYWZlQXJlYUluc2V0c1RvQ29udGVudEluc2V0OwogQGVuZAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBs
ZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1NhbmRi
b3hQcm9maWxlcy9pb3MvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnNiLmluCmluZGV4IDgz
YzcyYmM0NDc4My4uYjZhNWQ2YjUyMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Jlc291
cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5h
cHBsZS5XZWJLaXQuV2ViQ29udGVudC5zYi5pbgpAQCAtOTI3LDcgKzkyNyw2IEBACiAgICAgICAg
IChleHRlbnNpb24gImNvbS5hcHBsZS53ZWJraXQuZXh0ZW5zaW9uLm1hY2giKQogICAgICAgICAo
Z2xvYmFsLW5hbWUKICAgICAgICAgICAgICJjb20uYXBwbGUuZnJvbnRib2FyZC5zeXN0ZW1hcHBz
ZXJ2aWNlcyIKLSAgICAgICAgICAgICJjb20uYXBwbGUuaXBob25lLmF4c2VydmVyLXN5c3RlbXdp
ZGUiCiAgICAgICAgICAgICAiY29tLmFwcGxlLm1vYmlsZWFzc2V0ZC52MiIKICAgICAgICAgICAg
ICJjb20uYXBwbGUubW9iaWxlZ2VzdGFsdC54cGMiKSkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggOWQ2N2Rj
YWYyMmM5Li5lZjg0ZjI4ODk2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tBY2Nlc3NpYmlsaXR5U2VydmVySWZOZWVkZWQoKQog
CiAgICAgVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gaGFuZGxlQXJyYXk7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBoYW5kbGVBcnJheSA9IFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKHsgImNvbS5hcHBsZS5pcGhvbmUuYXhzZXJ2ZXIt
c3lzdGVtd2lkZSJfcywgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIl9z
IH0sIGF1ZGl0VG9rZW4oKSwgU2FuZGJveEV4dGVuc2lvbjo6TWFjaEJvb3RzdHJhcE9wdGlvbnM6
OkVuYWJsZU1hY2hCb290c3RyYXApOworICAgIGhhbmRsZUFycmF5ID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXAoeyAiY29tLmFwcGxlLmZyb250Ym9hcmQuc3lz
dGVtYXBwc2VydmljZXMiX3MgfSwgYXVkaXRUb2tlbigpLCBTYW5kYm94RXh0ZW5zaW9uOjpNYWNo
Qm9vdHN0cmFwT3B0aW9uczo6RW5hYmxlTWFjaEJvb3RzdHJhcCk7CiAjZW5kaWYKIAogICAgIHNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVuYmxvY2tTZXJ2aWNlc1JlcXVpcmVkQnlBY2Nlc3Np
YmlsaXR5KGhhbmRsZUFycmF5KSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
aW5kZXggZTVjZWI1NDQ2ZTIzLi45YTBiMmQ1NGU0MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKQEAgLTM0Niw2ICszNDYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFjY2Vzc2liaWxpdHlTY3JlZW5Ub1Jv
b3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCByb290Vmlld1RvQWNjZXNzaWJpbGl0eVNjcmVlbihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdmlydHVhbCB2b2lk
IHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBSZXRh
aW5QdHI8TlNEYXRhPiYpID0gMDsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IGZiYzU2Mzk0MzAwNC4uN2U0OTZkOWIxNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaApAQCAtMjM5Nyw2ICsyMzk3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJv
b3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld1JlY3QsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpPiYmKTsKICAgICB2b2lkIGFj
Y2Vzc2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3Jl
ZW5Qb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpJbnRQb2ludCk+JiYpOwog
ICAgIHZvaWQgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlld1JlY3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6SW50UmVjdCk+
JiYpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7
CisjZW5kaWYKICAgICB2b2lkIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIsIEZyYW1lSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGRpZENoYW5nZVZpZXdw
b3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKICAgICB2
b2lkIHBhZ2VEaWRTY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4NjcwYTVj
ZDA5ZDkuLjBkMzI1ZDg2NGNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtNTMsNiArNTMsOSBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlUHJveHkgewogICAgIFJvb3RWaWV3VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAt
PiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkgU3luY2hyb25vdXMKICAgICBBY2Nlc3Np
YmlsaXR5U2NyZWVuVG9Sb290VmlldyhXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Qb2ludCkgLT4g
KFdlYkNvcmU6OkludFBvaW50IHdpbmRvd1BvaW50KSBTeW5jaHJvbm91cwogICAgIFJvb3RWaWV3
VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKFdlYkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFdlYkNvcmU6
OkludFJlY3Qgc2NyZWVuRnJhbWUpIFN5bmNocm9ub3VzCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBSZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oU3RyaW5nIG5vdGlmaWNhdGlv
bk5hbWUsIElQQzo6RGF0YVJlZmVyZW5jZSBub3RpZmljYXRpb25EYXRhKQorI2VuZGlmCiAKICNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFNob3dWYWxpZGF0aW9uTWVz
c2FnZShXZWJDb3JlOjpJbnRSZWN0IGFuY2hvclJlY3QsIFN0cmluZyBtZXNzYWdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCBkNTY0
NzY5YjRlYjYuLjY5NmM3MzE2ZmNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAg
IFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRv
Um9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bihjb25zdCBTdHJpbmcmLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAg
ICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJv
b2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCBhNWQyMmZiMmRlZDEuLjM0N2I0MDkw
N2U1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5tbQpAQCAtNDUzLDcgKzQ1MywxNCBAQCBJbnRQb2ludCBQYWdlQ2xpZW50SW1wbDo6YWNj
ZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KQogICAgICAg
ICByb290Vmlld1BvaW50ID0gW2NvbnRlbnRWaWV3IGFjY2Vzc2liaWxpdHlDb252ZXJ0UG9pbnRG
cm9tU2NlbmVSZWZlcmVuY2VDb29yZGluYXRlczpyb290Vmlld1BvaW50XTsKICAgICByZXR1cm4g
SW50UG9pbnQocm9vdFZpZXdQb2ludCk7CiB9Ci0gICAgCisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlv
bk5hbWUsIGNvbnN0IFJldGFpblB0cjxOU0RhdGE+JiBub3RpZmljYXRpb25EYXRhKQoreworICAg
IGF1dG8gY29udGVudFZpZXcgPSB0aGlzLT5jb250ZW50VmlldygpOworICAgIGlmIChbY29udGVu
dFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihhY2Nlc3NpYmlsaXR5UmVsYXlOb3Rp
ZmljYXRpb246bm90aWZpY2F0aW9uRGF0YTopXSkKKyAgICAgICAgW2NvbnRlbnRWaWV3IGFjY2Vz
c2liaWxpdHlSZWxheU5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25OYW1lIG5vdGlmaWNhdGlvbkRh
dGE6bm90aWZpY2F0aW9uRGF0YS5nZXQoKV07Cit9CisKIEludFJlY3QgUGFnZUNsaWVudEltcGw6
OnJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgQ0dSZWN0IHJvb3RWaWV3UmVjdCA9IHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBlYTVhZmMwZWRkNWEuLjc5OTcwZjg5YTE0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
CkBAIC03NzYsNiArNzc2LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlcldlYlByb2Nl
c3NBY2Nlc3NpYmlsaXR5VG9rZW4oY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlCiAgICAgcGFnZUNs
aWVudCgpLmFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChkYXRhKTsKIH0gICAg
CiAKKwordm9pZCBXZWJQYWdlUHJveHk6OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihj
b25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbk5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YSkKK3sKKyAgICBOU0RhdGEgKm5vdGlmaWNhdGlvbkRhdGEgPSBbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6ZGF0YS5kYXRhKCkgbGVuZ3RoOmRhdGEuc2l6ZSgpXTsKKyAgICBwYWdlQ2xpZW50KCku
cmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk5hbWUsIG5vdGlmaWNh
dGlvbkRhdGEpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6YXNzaXN0aXZlVGVjaG5vbG9neU1h
a2VGaXJzdFJlc3BvbmRlcigpCiB7CiAgICAgcGFnZUNsaWVudCgpLmFzc2lzdGl2ZVRlY2hub2xv
Z3lNYWtlRmlyc3RSZXNwb25kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggNjMxOGM1
YjY1ZWMwLi43Yzg2ZTRhM2NkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0xNjEsNiAr
MTYxLDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlm
aWNhdGlvbjo6QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oUmVmPFdlYlBhZ2U+
IHBhZ2UsIEF1dG9tYXRpY2FsbHlTZW5kIGF1dG9tYXRpY2FsbHlTZW5kKQorICAgIDogbV9wYWdl
KHBhZ2UpCisgICAgLCBtX2F1dG9tYXRpY2FsbHlTZW5kKGF1dG9tYXRpY2FsbHlTZW5kKQorewor
ICAgIGlmIChtX2F1dG9tYXRpY2FsbHlTZW5kID09IEF1dG9tYXRpY2FsbHlTZW5kOjpZZXMpCisg
ICAgICAgIHNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UodHJ1ZSk7Cit9CisKK0FYUmVsYXlQcm9j
ZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uOjp+QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmlj
YXRpb24oKQoreworICAgIGlmIChtX2F1dG9tYXRpY2FsbHlTZW5kID09IEF1dG9tYXRpY2FsbHlT
ZW5kOjpZZXMpCisgICAgICAgIHNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2UoZmFsc2UpOworfQor
CisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlm
aWNhdGlvbjo6c2VuZFByb2Nlc3NTdXNwZW5kTWVzc2FnZShib29sKSB7IH0KKyNlbmRpZgorCiBX
ZWJDaHJvbWVDbGllbnQ6OldlYkNocm9tZUNsaWVudChXZWJQYWdlJiBwYWdlKQogICAgIDogbV9w
YWdlKHBhZ2UpCiB7CkBAIC0zMjIsNyArMzQwLDcgQEAgUGFnZSogV2ViQ2hyb21lQ2xpZW50Ojpj
cmVhdGVXaW5kb3coTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW4K
IAogICAgIGF1dG8gd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShmcmFtZSk7CiAK
LSAgICBhdXRvIHNlbmRSZXN1bHQgPSB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJh
bWUtPmluZm8oKSwgd2ViRnJhbWUtPnBhZ2UoKS0+d2ViUGFnZVByb3h5SWRlbnRpZmllcigpLCBu
YXZpZ2F0aW9uQWN0aW9uLnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywgbmF2aWdh
dGlvbkFjdGlvbkRhdGEpLCBwYWdlKCkuaWRlbnRpZmllcigpLCBJUEM6OlRpbWVvdXQ6OmluZmlu
aXR5KCksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01l
c3NhZ2VzLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3Vz
cGVuZCB9KTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1Bh
Z2Uod2ViRnJhbWUtPmluZm8oKSwgd2ViRnJhbWUtPnBhZ2UoKS0+d2ViUGFnZVByb3h5SWRlbnRp
ZmllcigpLCBuYXZpZ2F0aW9uQWN0aW9uLnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJl
cywgbmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBwYWdlKCkuaWRlbnRpZmllcigpLCBJUEM6OlRpbWVv
dXQ6OmluZmluaXR5KCksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dp
dGhBc3luY01lc3NhZ2VzIH0pOwogICAgIGlmICghc2VuZFJlc3VsdC5zdWNjZWVkZWQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTQ1Nyw3ICs0NzUsMTAgQEAgYm9vbCBXZWJDaHJv
bWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIExvY2FsRnIKIAogICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9uRGlz
YWJsZXI7CiAKLSAgICBhdXRvIHNlbmRSZXN1bHQgPSBwcm90ZWN0ZWRQYWdlKCktPnNlbmRTeW5j
V2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRD
b25maXJtUGFuZWwod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgbWVzc2Fn
ZSksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5k
KTsKKyAgICBhdXRvIHBhZ2UgPSBwcm90ZWN0ZWRQYWdlKCk7CisgICAgYXV0byByZWxheSA9IEFY
UmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKHBhZ2UpOworCisgICAgYXV0byBzZW5k
UmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3
ZWJGcmFtZS0+aW5mbygpLCBtZXNzYWdlKSk7CiAgICAgYXV0byBbc2hvdWxkQ2xvc2VdID0gc2Vu
ZFJlc3VsdC50YWtlUmVwbHlPcihmYWxzZSk7CiAgICAgcmV0dXJuIHNob3VsZENsb3NlOwogfQpA
QCAtNTA1LDcgKzUyNiw5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxl
cnQoTG9jYWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgYWxlcnRUCiAgICAgSGFuZ0RldGVj
dGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKICAgICBJUEM6OlVuYm91bmRlZFN5
bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZTsKIAotICAgIHBh
Z2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5K
YXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUtPmluZm8oKSwgYWxl
cnRUZXh0KSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5j
TWVzc2FnZXMsIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxT
dXNwZW5kIH0pOworICAgIGF1dG8gcmVsYXkgPSBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlm
aWNhdGlvbihwYWdlKTsKKworICAgIHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQo
KSwgd2ViRnJhbWUtPmluZm8oKSwgYWxlcnRUZXh0KSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpN
YWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMgfSk7CiB9CiAKIGJvb2wgV2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShMb2NhbEZyYW1lJiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQpAQCAtNTI0LDcgKzU0Nyw5IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojpy
dW5KYXZhU2NyaXB0Q29uZmlybShMb2NhbEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNz
CiAgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKICAgICBJ
UEM6OlVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGUgdW5ib3VuZGVkU3luY2hyb25vdXNJUENT
Y29wZTsKIAotICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRS
ZXBseShNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFt
ZS0+ZnJhbWVJRCgpLCB3ZWJGcmFtZS0+aW5mbygpLCBtZXNzYWdlKSwgeyBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMsIElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kIH0pOworICAgIGF1dG8gcmVs
YXkgPSBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihwYWdlKTsKKworICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB3
ZWJGcmFtZS0+aW5mbygpLCBtZXNzYWdlKSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFp
bk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMgfSk7CiAgICAgYXV0byBbcmVzdWx0XSA9IHNlbmRS
ZXN1bHQudGFrZVJlcGx5T3IoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC01NDUs
NyArNTcwLDkgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoTG9j
YWxGcmFtZSYgZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2EKICAgICBIYW5nRGV0ZWN0aW9uRGlz
YWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwogICAgIElQQzo6VW5ib3VuZGVkU3luY2hyb25v
dXNJUENTY29wZSB1bmJvdW5kZWRTeW5jaHJvbm91c0lQQ1Njb3BlOwogCi0gICAgYXV0byBzZW5k
UmVzdWx0ID0gcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwgd2ViRnJhbWUt
PmluZm8oKSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlKSwgeyBJUEM6OlNlbmRTeW5jT3B0aW9uOjpN
YWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMsIElQQzo6U2VuZFN5bmNPcHRpb246Oklu
Zm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kIH0pOworICAgIGF1dG8gcmVsYXkgPSBBWFJl
bGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihwYWdlKTsKKworICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIHdlYkZyYW1lLT5p
bmZvKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIHsgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFp
bnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzIH0pOwogICAgIGlmICghc2VuZFJlc3VsdC5z
dWNjZWVkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03NzgsOSArODA1LDExIEBA
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChMb2NhbEZyYW1lJiBmcmFtZSwgY29uc3QgU3Ry
aW5nV2l0aERpcmVjdGlvbiYgdGl0bGUpCiAjZW5kaWYKIAogICAgIGF1dG8gdHJ1bmNhdGVkVGl0
bGUgPSB0cnVuY2F0ZUZyb21FbmQodGl0bGUsIG1heFRpdGxlTGVuZ3RoKTsKKyAgICBhdXRvIHBh
Z2UgPSBwcm90ZWN0ZWRQYWdlKCk7CisgICAgYXV0byByZWxheSA9IEFYUmVsYXlQcm9jZXNzU3Vz
cGVuZGVkTm90aWZpY2F0aW9uKHBhZ2UpOwogCiAgICAgSVBDOjpVbmJvdW5kZWRTeW5jaHJvbm91
c0lQQ1Njb3BlIHVuYm91bmRlZFN5bmNocm9ub3VzSVBDU2NvcGU7Ci0gICAgcHJvdGVjdGVkUGFn
ZSgpLT5zZW5kU3luY1dpdGhEZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJp
bnRGcmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCB0cnVuY2F0ZWRUaXRsZS5zdHJpbmcsIHBkZkZp
cnN0UGFnZVNpemUpLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NX
aWxsU3VzcGVuZCk7CisgICAgcGFnZS0+c2VuZFN5bmNXaXRoRGVsYXllZFJlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlByaW50RnJhbWUod2ViRnJhbWUtPmZyYW1lSUQoKSwgdHJ1bmNhdGVk
VGl0bGUuc3RyaW5nLCBwZGZGaXJzdFBhZ2VTaXplKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3QpCkBAIC04MDAsNyArODI5LDkgQEAg
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEo
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwKICAgICBpZiAoIWNhY2hlU3RvcmFnZS5jYWxjdWxhdGVR
dW90YUZvck9yaWdpbihvcmlnaW4sIGN1cnJlbnRRdW90YSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gc2VuZFJlc3VsdCA9IHBhZ2UtPnNlbmRTeW5jV2l0aERlbGF5ZWRSZXBseShNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKG9y
aWdpbi5kYXRhKCkuZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90YSwgdG90YWxCeXRl
c05lZWRlZCksIElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxT
dXNwZW5kKTsKKyAgICBhdXRvIHJlbGF5ID0gQVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmlj
YXRpb24ocGFnZSk7CisKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBwYWdlLT5zZW5kU3luY1dpdGhE
ZWxheWVkUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YShvcmlnaW4uZGF0YSgpLmRhdGFiYXNlSWRlbnRpZmllcigpLCBjdXJyZW50
UXVvdGEsIHRvdGFsQnl0ZXNOZWVkZWQpKTsKICAgICBhdXRvIFtuZXdRdW90YV0gPSBzZW5kUmVz
dWx0LnRha2VSZXBseU9yKDApOwogCiAgICAgY2FjaGVTdG9yYWdlLnN0b3JlVXBkYXRlZFF1b3Rh
Rm9yT3JpZ2luKCZvcmlnaW4sIG5ld1F1b3RhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBjOGMy
ODdjNWFkNjIuLjJkMDlhZjcwYThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtNTIsNiArNTIs
MTAgQEAgcHVibGljOgogICAgIFdlYlBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2Uu
Z2V0KCk7IH0KICAgICBSZWY8V2ViUGFnZT4gcHJvdGVjdGVkUGFnZSgpIGNvbnN0OwogCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYpIGNvbnN0IGZpbmFs
OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKSBmaW5hbDsK
ICAgICAKQEAgLTQ5Niw0ICs1MDAsMTcgQEAgcHJpdmF0ZToKICAgICBDaGVja2VkUmVmPFdlYlBh
Z2U+IG1fcGFnZTsKIH07CiAKK2NsYXNzIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0
aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEF1dG9tYXRpY2FsbHlTZW5kIDogYm9vbCB7
IE5vLCBZZXMgfTsKKworICAgIGV4cGxpY2l0IEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZp
Y2F0aW9uKFJlZjxXZWJQYWdlPiwgQXV0b21hdGljYWxseVNlbmQgPSBBdXRvbWF0aWNhbGx5U2Vu
ZDo6WWVzKTsKKyAgICB+QVhSZWxheVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oKTsKKwor
ICAgIHZvaWQgc2VuZFByb2Nlc3NTdXNwZW5kTWVzc2FnZShib29sIHN1c3BlbmRlZCk7Citwcml2
YXRlOgorICAgIENoZWNrZWRSZWY8V2ViUGFnZT4gbV9wYWdlOworICAgIEF1dG9tYXRpY2FsbHlT
ZW5kIG1fYXV0b21hdGljYWxseVNlbmQ7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbQppbmRleCA0NDEzMDEwMzQ5ZTguLmVhNGFjMDc0ZmQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRDb2NvYS5tbQpAQCAtMjksOCArMjksMTggQEAKICNp
ZiBQTEFURk9STShDT0NPQSkKIAogI2ltcG9ydCAiV2ViSWNvblV0aWxpdGllcy5oIgorI2ltcG9y
dCAiV2ViUGFnZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ljb24uaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiQXBwbGlj
YXRpb25TZXJ2aWNlc1NQSS5oIgorCitleHRlcm4gIkMiIEFYRXJyb3IgX0FYVUlFbGVtZW50Tm90
aWZ5UHJvY2Vzc1N1c3BlbmRTdGF0dXMoQVhTdXNwZW5kU3RhdHVzKTsKKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApAQCAtMzksNiArNDksMjAgQEAgUmVmUHRyPEljb24+IFdlYkNocm9tZUNsaWVudDo6Y3Jl
YXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMKICAgICByZXR1
cm4gSWNvbjo6Y3JlYXRlKGljb25Gb3JGaWxlcyhmaWxlbmFtZXMpLmdldCgpKTsKIH0KIAordm9p
ZCBBWFJlbGF5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbjo6c2VuZFByb2Nlc3NTdXNwZW5k
TWVzc2FnZShib29sIHN1c3BlbmRlZCkKK3sKKyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhzdXNwZW5kZWQgPyBB
WFN1c3BlbmRTdGF0dXNTdXNwZW5kZWQgOiBBWFN1c3BlbmRTdGF0dXNSdW5uaW5nKTsKKyNlbHNl
CisgICAgTlNEaWN0aW9uYXJ5ICptZXNzYWdlID0gQHsgQCJwaWQiIDogQChnZXRwaWQoKSksIEAi
c3VzcGVuZGVkIiA6IEAoc3VzcGVuZGVkKSB9OworICAgIE5TRGF0YSAqZGF0YSA9IFtOU0tleWVk
QXJjaGl2ZXIgYXJjaGl2ZWREYXRhV2l0aFJvb3RPYmplY3Q6bWVzc2FnZSByZXF1aXJpbmdTZWN1
cmVDb2Rpbmc6WUVTIGVycm9yOm5pbF07CisgICAgbV9wYWdlLT5yZWxheUFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb24oIkFYUHJvY2Vzc1N1c3BlbmRlZCJfcywgZGF0YSk7CisjZW5kaWYKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hy
b21lQ2xpZW50SU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0KaW5kZXggZjc1ZDBjMTE3NjRiLi5lNmNhNDQwMzEw
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9p
b3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCkBAIC0xNzksNiArMTc5LDEx
IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG93RGF0YURldGVjdG9yc1VJRm9yRWxlbWVudChj
b25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpyZWxheUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3Ry
aW5nJiBub3RpZmljYXRpb25OYW1lLCBjb25zdCBSZXRhaW5QdHI8TlNEYXRhPiYgbm90aWZpY2F0
aW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvdGVjdGVkUGFnZSgpLT5yZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uTmFtZSwgbm90aWZpY2F0aW9uRGF0YSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZB
TUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5k
ZXggM2NhY2UxNmJmNmJkLi43ZjNjN2I5NTQ0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC03ODk2LDcgKzc4OTYsMTAgQEAgV2ViQ29yZTo6
RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSBXZWJQYWdlOjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoV2Vi
Q29yZTo6RE9NUGFzdGUKICAgICAvLyBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIDxyZGFyOi8vcHJv
YmxlbS8xNjIwNzAwMj4gaXMgcmVzb2x2ZWQuCiAgICAgcHJlZW1wdGl2ZWx5U2VuZEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dCgpOwogI2VuZGlmCi0gICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmNX
aXRoRGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RET01QYXN0ZUFj
Y2VzcyhwYXN0ZUFjY2Vzc0NhdGVnb3J5LCByZWN0Rm9yRWxlbWVudEF0SW50ZXJhY3Rpb25Mb2Nh
dGlvbigpLCBvcmlnaW5JZGVudGlmaWVyKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxh
dGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworCisgICAgQVhSZWxheVByb2Nlc3NTdXNwZW5kZWRO
b3RpZmljYXRpb24oKnRoaXMpOworCisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmNXaXRo
RGVsYXllZFJlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RET01QYXN0ZUFjY2Vz
cyhwYXN0ZUFjY2Vzc0NhdGVnb3J5LCByZWN0Rm9yRWxlbWVudEF0SW50ZXJhY3Rpb25Mb2NhdGlv
bigpLCBvcmlnaW5JZGVudGlmaWVyKSk7CiAgICAgYXV0byBbcmVzcG9uc2VdID0gc2VuZFJlc3Vs
dC50YWtlUmVwbHlPcihXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpEZW5pZWRGb3JH
ZXN0dXJlKTsKICAgICByZXR1cm4gcmVzcG9uc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggM2IwOWEyMTQ0YjU5Li44NzBhMjkxM2RkNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTc3Myw2ICs3
NzMsOSBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBhY2Nlc3NpYmls
aXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIFdlYkNv
cmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCByZWxheUFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgUmV0YWluUHRyPE5TRGF0
YT4mKTsKKyNlbmRpZgogCiAgICAgUmVmUHRyPFdlYkltYWdlPiBzY2FsZWRTbmFwc2hvdFdpdGhP
cHRpb25zKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBkb3VibGUgYWRkaXRpb25hbFNjYWxlRmFj
dG9yLCBTbmFwc2hvdE9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDIwNWExNjZiOGJiNC4uMzc5NDA0YWQ4
NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQpAQCAtMjU2LDYgKzI1NiwxNCBAQCBSZXRhaW5QdHI8TlNEYXRhPiBXZWJQYWdl
OjphY2Nlc3NpYmlsaXR5UmVtb3RlVG9rZW5EYXRhKCkgY29uc3QKICAgICByZXR1cm4gbmV3QWNj
ZXNzaWJpbGl0eVJlbW90ZVRva2VuKFtOU1VVSUQgVVVJRF0pOwogfQogCit2b2lkIFdlYlBhZ2U6
OnJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlv
bk5hbWUsIGNvbnN0IFJldGFpblB0cjxOU0RhdGE+JiBub3RpZmljYXRpb25EYXRhKQoreworICAg
IElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhVG9rZW4gPSB7IH07CisgICAgaWYgKFtub3RpZmljYXRp
b25EYXRhIGxlbmd0aF0pCisgICAgICAgIGRhdGFUb2tlbiA9IElQQzo6RGF0YVJlZmVyZW5jZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihbbm90aWZpY2F0aW9uRGF0YSBieXRlc10p
LCBbbm90aWZpY2F0aW9uRGF0YSBsZW5ndGhdKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJlbGF5QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25OYW1lLCBk
YXRhVG9rZW4pKTsKK30KKwogc3RhdGljIHZvaWQgY29tcHV0ZUVkaXRhYmxlUm9vdEhhc0NvbnRl
bnRBbmRQbGFpblRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBFZGl0b3JT
dGF0ZTo6UG9zdExheW91dERhdGEmIGRhdGEpCiB7CiAgICAgZGF0YS5oYXNDb250ZW50ID0gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNDJlMmFkY2Fh
MjhiLi41MTI1ODk1ZDYyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJXZWJCYWRnZUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYkJyb2FkY2FzdENoYW5uZWxSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYkNhY2hlU3Rv
cmFnZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llSmFyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC02ODUsOCArNjg2LDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpzZXRJc0luUHJvY2Vzc0NhY2hlKGJvb2wgaXNJblByb2Nlc3NDYWNoZSkK
ICAgICB9CiAKICAgICB1cGRhdGVQcm9jZXNzTmFtZShJc0luUHJvY2Vzc0luaXRpYWxpemF0aW9u
OjpObyk7Ci0KLSAgICBJUEM6OkFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0
aW9uKGlzSW5Qcm9jZXNzQ2FjaGUpOworICAgIGFjY2Vzc2liaWxpdHlSZWxheVByb2Nlc3NTdXNw
ZW5kZWQoaXNJblByb2Nlc3NDYWNoZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0luUHJv
Y2Vzc0NhY2hlKTsKICNlbmRpZgpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgdm9pZCBXZWJQcm9jZXNz
OjpwcmVwYXJlVG9TdXNwZW5kKGJvb2wgaXNTdXNwZW5zaW9uSW1taW5lbnQsIE1vbm90b25pY1Rp
bWUgZXN0aW0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBJUEM6OkFj
Y2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKHRydWUpOworICAgIGFjY2Vz
c2liaWxpdHlSZWxheVByb2Nlc3NTdXNwZW5kZWQodHJ1ZSk7CiAgICAgdXBkYXRlRnJlZXplclN0
YXR1cygpOwogI2VuZGlmCiAKQEAgLTE2MjUsNiArMTYyNSwxNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OnByZXBhcmVUb1N1c3BlbmQoYm9vbCBpc1N1c3BlbnNpb25JbW1pbmVudCwgTW9ub3RvbmljVGlt
ZSBlc3RpbQogICAgIH0pOwogfQogCit2b2lkIFdlYlByb2Nlc3M6OmFjY2Vzc2liaWxpdHlSZWxh
eVByb2Nlc3NTdXNwZW5kZWQoYm9vbCBzdXNwZW5kZWQpCit7CisgICAgaWYgKG1fcGFnZU1hcC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRha2UgdGhlIGZpcnN0IHdlYnBh
Z2UuIFdlIG9ubHkgbmVlZCB0byBoYXZlIHRoZSBwcm9jZXNzIG9uIHRoZSBvdGhlciBzaWRlIHJl
bGF5IHRoaXMgZm9yIHRoZSBXZWJQcm9jZXNzLgorICAgIGF1dG8qIHdlYlBhZ2UgPSBtX3BhZ2VN
YXAudmFsdWVzKCkuYmVnaW4oKS5nZXQoKS0+Z2V0KCk7CisgICAgQVhSZWxheVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb24oKndlYlBhZ2UsIEFYUmVsYXlQcm9jZXNzU3VzcGVuZGVkTm90aWZp
Y2F0aW9uOjpBdXRvbWF0aWNhbGx5U2VuZDo6Tm8pLnNlbmRQcm9jZXNzU3VzcGVuZE1lc3NhZ2Uo
c3VzcGVuZGVkKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzOjptYXJrQWxsTGF5ZXJzVm9sYXRpbGUo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFdF
QlBST0NFU1NfUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJtYXJrQWxsTGF5ZXJzVm9s
YXRpbGU6Iik7CkBAIC0xNjgwLDcgKzE2OTAsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NE
aWRSZXN1bWUoKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIElQQzo6
QWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRpb24oZmFsc2UpOworICAgIGFj
Y2Vzc2liaWxpdHlSZWxheVByb2Nlc3NTdXNwZW5kZWQoZmFsc2UpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCBiNzcx
Y2UyNTEzNWIuLjc5Y2MyZjE4NzY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCkBAIC02NDYsNiArNjQ2LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgdm9pZCBzZXRO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25JRChJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEKTsKKyAg
ICB2b2lkIGFjY2Vzc2liaWxpdHlSZWxheVByb2Nlc3NTdXNwZW5kZWQoYm9vbCk7CiAKICAgICBS
ZWZQdHI8V2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzPiBtX3dlYkNvbm5lY3Rpb247CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudElPUy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50SU9TLmgKaW5kZXggYWNiMzdjMzlhOGRhLi5lMDJkODhkYTU2ZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudElPUy5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZWxl
Y3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkgZmluYWw7CiAgICAg
UmVmUHRyPFdlYkNvcmU6OlBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVw
TWVudUNsaWVudCYpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1
cE1lbnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQmKSBj
b25zdCBmaW5hbDsKLQorICAgIHZvaWQgcmVsYXlBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFJldGFpblB0cjxOU0RhdGE+JikgY29uc3QgZmluYWwgeyB9CiAg
ICAgdm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVkKCkgZmluYWw7CiAgICAgdm9pZCBmb2N1
c2VkRWxlbWVudENoYW5nZWQoV2ViQ29yZTo6RWxlbWVudCopIGZpbmFsOwogICAgIHZvaWQgc2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIFdlYkNvcmU6OlJvdXRlU2hhcmlu
Z1BvbGljeSwgY29uc3QgU3RyaW5nJikgZmluYWw7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>