<?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>265683</bug_id>
          
          <creation_ts>2023-12-01 11:02:56 -0800</creation_ts>
          <short_desc>AX: add Mac API to get selected text range overlapping static text element</short_desc>
          <delta_ts>2023-12-06 11:26:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>Safari Technology Preview</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="Dominic Mazzoni">dm_mazzoni</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jhoffman23</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1996284</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-01 11:02:56 -0800</bug_when>
    <thetext>One of the things preventing VoiceOver from being able to use WebKit entirely off the main thread is that it wants to be able to access the range of a static text element that&apos;s part of the document selection, if any.

Doing that using text ranges is complex and hard for WebKit to optimize. A new API that provides this information directly can be computed efficiently using the isolated tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996285</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-12-01 11:03:09 -0800</bug_when>
    <thetext>&lt;rdar://problem/119042064&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996296</commentid>
    <comment_count>2</comment_count>
      <attachid>468835</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-01 11:40:49 -0800</bug_when>
    <thetext>Created attachment 468835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996312</commentid>
    <comment_count>3</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-01 12:32:06 -0800</bug_when>
    <thetext>I can rename to selectedTextRangeIntersectingElement if that sounds more clear to everyone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996313</commentid>
    <comment_count>4</comment_count>
      <attachid>468835</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-12-01 12:34:33 -0800</bug_when>
    <thetext>Comment on attachment 468835
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1378
&gt; +    Node* node = m_renderer-&gt;node();

auto*

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1381
&gt; +    VisiblePositionRange intersection = WebCore::intersection(selectedVisiblePositionRange, nodeVisibleRange);

i think we can use auto for all of these

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:1281
&gt; +
&gt; +    AXTextMarkerRange range = tree()-&gt;selectedTextMarkerRange();

auto

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:1562
&gt; +        NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@&quot;{%lu, %lu}&quot;, static_cast&lt;unsigned long&gt;(range.location), static_cast&lt;unsigned long&gt;(range.length)];

NSMutableString *

also i don&apos;t think this needs to be mutable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996353</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-12-01 14:46:16 -0800</bug_when>
    <thetext>(In reply to Dominic Mazzoni from comment #2)
&gt; Created attachment 468835 [details]
&gt; Patch

diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
index a47d458c0c23..0ec64c61c922 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
@@ -1274,6 +1274,29 @@ bool AXIsolatedObject::isNativeTextControl() const
     return false;
 }

+std::optional&lt;CharacterRange&gt; AXIsolatedObject::selectedStaticTextRange() const
+{
+    ASSERT(isStaticText());
+
+    AXTextMarkerRange range = tree()-&gt;selectedTextMarkerRange();
+    if (range.start().treeID() != tree()-&gt;treeID() || range.end().treeID() != tree()-&gt;treeID())
+        return std::nullopt;
+
+    if (range.start().objectID() == range.end().objectID()) {
+        if (range.start().objectID() != objectID())
+            return std::nullopt;
+
+        std::make_optional(CharacterRange(range.start().characterOffset(), range.end().characterOffset()));

AG: missing return ?

+    }
+
+    return Accessibility::retrieveValueFromMainThread&lt;std::optional&lt;CharacterRange&gt;&gt;([this] () -&gt; std::optional&lt;CharacterRange&gt; {
+        if (auto* axObject = associatedAXObject())
+            return axObject-&gt;selectedStaticTextRange();
+
+        return std::nullopt;
+    });
+}
+
 int AXIsolatedObject::insertionPointLineNumber() const
 {
     return Accessibility::retrieveValueFromMainThread&lt;int&gt;([this] () -&gt; int {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996354</commentid>
    <comment_count>6</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-12-01 14:49:07 -0800</bug_when>
    <thetext>(In reply to Dominic Mazzoni from comment #3)
&gt; I can rename to selectedTextRangeIntersectingElement if that sounds more
&gt; clear to everyone.

Maybe something like AXIntersectionWithSelectionRange ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996355</commentid>
    <comment_count>7</comment_count>
      <attachid>468835</attachid>
    <who name="Joshua Hoffman">jhoffman23</who>
    <bug_when>2023-12-01 14:53:14 -0800</bug_when>
    <thetext>Comment on attachment 468835
Patch

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

&gt; LayoutTests/accessibility/mac/selected-static-text-range.html:10
&gt; +&lt;!--
&gt; +  Note: run this test with --accessibility-isolated-tree
&gt; +--&gt;

This comment is probably not necessary.

&gt; LayoutTests/accessibility/mac/selected-static-text-range.html:59
&gt; +        dumpAccessibilityTree(accessibilityController.rootElement, null, 0, true, false, true);

Is it necessary to dump the accessibility tree here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996369</commentid>
    <comment_count>8</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-01 15:44:51 -0800</bug_when>
    <thetext>(In reply to Joshua Hoffman from comment #7)
&gt; &gt; LayoutTests/accessibility/mac/selected-static-text-range.html:59
&gt; &gt; +        dumpAccessibilityTree(accessibilityController.rootElement, null, 0, true, false, true);
&gt; 
&gt; Is it necessary to dump the accessibility tree here?

Oddly, yes. If I don&apos;t do this, the isolated objects don&apos;t exist.

Is this a known issue, is there a better or more clear workaround?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996374</commentid>
    <comment_count>9</comment_count>
      <attachid>468838</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-01 16:15:00 -0800</bug_when>
    <thetext>Created attachment 468838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996830</commentid>
    <comment_count>10</comment_count>
      <attachid>468874</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-04 13:06:24 -0800</bug_when>
    <thetext>Created attachment 468874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1996832</commentid>
    <comment_count>11</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-04 13:07:34 -0800</bug_when>
    <thetext>Just rebasing. I&apos;m going to try Andres&apos;s idea of using the same public API but implementing using text marker ranges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997018</commentid>
    <comment_count>12</comment_count>
      <attachid>468884</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-04 23:07:28 -0800</bug_when>
    <thetext>Created attachment 468884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997027</commentid>
    <comment_count>13</comment_count>
      <attachid>468884</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-12-04 23:50:12 -0800</bug_when>
    <thetext>Comment on attachment 468884
Patch

a few test failures to cleanup, but otherwise lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997093</commentid>
    <comment_count>14</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-12-05 07:17:40 -0800</bug_when>
    <thetext>(In reply to Dominic Mazzoni from comment #12)
&gt; Created attachment 468884 [details]
&gt; Patch

Thanks for doing this, looks good overall, just a few more comments.

diff --git a/Source/WebCore/accessibility/AXTextMarker.cpp b/Source/WebCore/accessibility/AXTextMarker.cpp
index d75920ae9a14..69022fc47757 100644
--- a/Source/WebCore/accessibility/AXTextMarker.cpp
+++ b/Source/WebCore/accessibility/AXTextMarker.cpp
@@ -299,6 +299,38 @@ std::optional&lt;CharacterRange&gt; AXTextMarkerRange::characterRange() const
     return { { m_start.m_data.characterOffset, m_end.m_data.characterOffset - m_start.m_data.characterOffset } };
 }

+std::optional&lt;AXTextMarkerRange&gt; AXTextMarkerRange::intersectionWith(const AXTextMarkerRange&amp; other) const
+{
+    if (m_start.m_data.treeID != m_end.m_data.treeID
+        || other.m_start.m_data.treeID != other.m_end.m_data.treeID
+        || m_start.m_data.treeID != other.m_start.m_data.treeID) {

AG: you may want to enclose this bool expression in UNLIKELY(...).

+        ASSERT_NOT_REACHED();
+        return std::nullopt;
+    }
+
+    // Fast path: both ranges span one object
+    if (m_start.m_data.objectID == m_end.m_data.objectID
+        &amp;&amp; other.m_start.m_data.objectID == other.m_end.m_data.objectID) {
+        if (m_start.m_data.objectID != other.m_start.m_data.objectID)
+            return std::nullopt;
+
+        unsigned startOffset = std::max(m_start.m_data.characterOffset, other.m_start.m_data.characterOffset);
+        unsigned endOffset = std::min(m_end.m_data.characterOffset, other.m_end.m_data.characterOffset);
+
+        auto startMarker = AXTextMarker({ (AXID)m_start.m_data.treeID, (AXID)m_start.m_data.objectID, nullptr, startOffset, Position::PositionIsOffsetInAnchor, Affinity::Downstream, 0, startOffset });

AG: instead of casting (AXID), you can do m_start.m_data.treeID() and .objectID().

+        auto endMarker = AXTextMarker({ (AXID)m_start.m_data.treeID, (AXID)m_start.m_data.objectID, nullptr, endOffset, Position::PositionIsOffsetInAnchor, Affinity::Downstream, 0, endOffset });

AG: same here.

+        return { { startMarker, endMarker } };

AG: do we need to check whether startOffset &lt;= endOffset? Otherwise I think we can get a range when there is no intersection.

+    }
+
+    return Accessibility::retrieveValueFromMainThread&lt;std::optional&lt;AXTextMarkerRange&gt;&gt;([this, &amp;other] () -&gt; std::optional&lt;AXTextMarkerRange&gt; {
+        auto intersection = WebCore::intersection(*this, other);
+        if (intersection.isNull())
+            return std::nullopt;
+
+        return { AXTextMarkerRange(intersection) };
+    });
+}
+
 String AXTextMarkerRange::debugDescription() const
 {
     return makeString(&quot;start: {&quot;, m_start.debugDescription(), &quot;}\nend: {&quot;, m_end.debugDescription(), &quot;}&quot;);
diff --git a/Source/WebCore/accessibility/AXTextMarker.h b/Source/WebCore/accessibility/AXTextMarker.h
index 2ffaeec026f0..2136c4fae872 100644
--- a/Source/WebCore/accessibility/AXTextMarker.h
+++ b/Source/WebCore/accessibility/AXTextMarker.h
@@ -156,6 +156,8 @@ public:
     std::optional&lt;SimpleRange&gt; simpleRange() const;
     std::optional&lt;CharacterRange&gt; characterRange() const;

+    std::optional&lt;AXTextMarkerRange&gt; intersectionWith(const AXTextMarkerRange&amp; other) const;
+
 #if PLATFORM(MAC)
     RetainPtr&lt;AXTextMarkerRangeRef&gt; platformData() const;
     operator AXTextMarkerRangeRef() const { return platformData().autorelease(); }
diff --git a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
index f603c3f035b7..426333dc1f08 100644
--- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
+++ b/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
@@ -292,6 +292,10 @@ using namespace WebCore;
 #define NSAccessibilitySelectTextWithCriteriaParameterizedAttribute @&quot;AXSelectTextWithCriteria&quot;
 #endif

+#ifndef NSAccessibilityIntersectionWithSelectionRangeAttribute
+#define NSAccessibilityIntersectionWithSelectionRangeAttribute @&quot;AXIntersectionWithSelectionRange&quot;
+#endif
+
 // Text search

 #ifndef NSAccessibilitySearchTextWithCriteriaParameterizedAttribute
@@ -1159,6 +1163,11 @@ ALLOW_DEPRECATED_IMPLEMENTATIONS_END
         [tempArray addObject:NSAccessibilityURLAttribute];
         return tempArray;
     }();
+    static NeverDestroyed staticTextAttrs = [] {
+        auto tempArray = adoptNS([[NSMutableArray alloc] initWithArray:attributes.get().get()]);
+        [tempArray addObject:NSAccessibilityIntersectionWithSelectionRangeAttribute];
+        return tempArray;
+    }();

     NSArray *objectAttributes = attributes.get().get();

@@ -1166,6 +1175,8 @@ ALLOW_DEPRECATED_IMPLEMENTATIONS_END
         objectAttributes = secureFieldAttributes.get().get();
     else if (backingObject-&gt;isWebArea())
         objectAttributes = webAreaAttrs.get().get();
+    else if (backingObject-&gt;isStaticText())
+        objectAttributes = staticTextAttrs.get().get();
     else if (backingObject-&gt;isTextControl())
         objectAttributes = textAttrs.get().get();
     else if (backingObject-&gt;isLink())
@@ -1626,6 +1637,11 @@ ALLOW_DEPRECATED_IMPLEMENTATIONS_END
         }
     }

+    if (backingObject-&gt;isStaticText()) {
+        if ([attributeName isEqualToString:NSAccessibilityIntersectionWithSelectionRangeAttribute])
+            return [self intersectionWithSelectionRange];
+    }
+
     if ([attributeName isEqualToString:NSAccessibilityVisibleCharacterRangeAttribute]) {
         if (backingObject-&gt;isSecureField())
             return nil;
@@ -2235,6 +2251,25 @@ ALLOW_DEPRECATED_IMPLEMENTATIONS_END
     return nil;
 }

+- (NSValue *)intersectionWithSelectionRange
+{
+    RefPtr&lt;AXCoreObject&gt; backingObject = self.updateObjectBackingStore;
+    if (!backingObject)
+        return nil;
+
+    auto objectRange = backingObject-&gt;textMarkerRange();
+    auto selectionRange = backingObject-&gt;selectedTextMarkerRange();
+
+    auto intersection = selectionRange.intersectionWith(objectRange);
+    if (intersection.has_value()) {
+        auto intersectionCharacterRange = intersection-&gt;characterRange();
+        if (intersectionCharacterRange.has_value())
+            return [NSValue valueWithRange:intersectionCharacterRange.value()];
+    }
+
+    return nil;
+}
+
 - (NSString *)accessibilityPlatformMathSubscriptKey
 {
     return NSAccessibilityMathSubscriptAttribute;
diff --git a/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h b/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h
index c682f1d19750..0f38df2383c3 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h
+++ b/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h
@@ -178,6 +178,7 @@ public:
     unsigned numberOfCharacters() const;
     int insertionPointLineNumber();
     JSRetainPtr&lt;JSStringRef&gt; selectedTextRange();
+    JSRetainPtr&lt;JSStringRef&gt; intersectionWithSelectionRange();
     JSRetainPtr&lt;JSStringRef&gt; textInputMarkedRange() const;
     bool isAtomicLiveRegion() const;
     bool isBusy() const;
diff --git a/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl b/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl
index dc7bfc9d1c12..a5102e5f7a69 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl
+++ b/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl
@@ -60,6 +60,7 @@
     readonly attribute unsigned long numberOfCharacters;
     readonly attribute long insertionPointLineNumber;
     readonly attribute DOMString selectedTextRange;
+  readonly attribute DOMString intersectionWithSelectionRange;
     readonly attribute DOMString textInputMarkedRange;

     DOMString stringDescriptionOfAttributeValue(DOMString attr);
diff --git a/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp b/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp
index 4efe8d005d39..089243e47f62 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp
@@ -1426,6 +1426,11 @@ JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::selectedTextRange()
     return OpaqueJSString::tryCreate(range).leakRef();
 }

+JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::intersectionWithSelectionRange()
+{
+    return nullptr;
+}
+
 bool AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
 {
     if (!m_element-&gt;interfaces().contains(WebCore::AccessibilityObjectAtspi::Interface::Text))
diff --git a/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm b/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm
index 2d566783d910..b708005c52cc 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm
+++ b/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm
@@ -986,6 +986,11 @@ JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::selectedTextRange()
     return [rangeDescription createJSStringRef];
 }

+JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::intersectionWithSelectionRange()
+{
+    return nullptr;
+}
+
 bool AccessibilityUIElement::setSelectedTextMarkerRange(AccessibilityTextMarkerRange*)
 {
     return false;
diff --git a/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm b/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
index b5532f4af0ba..f44996db29ef 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
+++ b/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
@@ -89,6 +89,10 @@
 #define NSAccessibilityTextInputMarkedTextMarkerRangeAttribute @&quot;AXTextInputMarkedTextMarkerRange&quot;
 #endif

+#ifndef NSAccessibilityIntersectionWithSelectionRangeAttribute
+#define NSAccessibilityIntersectionWithSelectionRangeAttribute @&quot;AXIntersectionWithSelectionRange&quot;
+#endif
+
 typedef void (*AXPostedNotificationCallback)(id element, NSString* notification, void* context);

 @interface NSObject (WebKitAccessibilityAdditions)
@@ -134,7 +138,15 @@ bool AccessibilityUIElement::isEqual(AccessibilityUIElement* otherElement)
 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
 bool AccessibilityUIElement::isIsolatedObject() const
 {
-    return [m_element isIsolatedObject];
+    BOOL value;
+
+    BEGIN_AX_OBJC_EXCEPTIONS
+    s_controller-&gt;executeOnAXThreadAndWait([this, &amp;value] {
+        value = [m_element isIsolatedObject];
+    });
+    END_AX_OBJC_EXCEPTIONS
+
+    return value;
 }
 #endif

@@ -1542,13 +1554,27 @@ JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::selectedTextRange()
     auto indexRange = attributeValue(NSAccessibilitySelectedTextRangeAttribute);
     if (indexRange)
         range = [indexRange rangeValue];
-    NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@&quot;{%lu, %lu}&quot;, static_cast&lt;unsigned long&gt;(range.location), static_cast&lt;unsigned long&gt;(range.length)];
+    NSString *rangeDescription = [NSString stringWithFormat:@&quot;{%lu, %lu}&quot;, static_cast&lt;unsigned long&gt;(range.location), static_cast&lt;unsigned long&gt;(range.length)];
     return [rangeDescription createJSStringRef];
     END_AX_OBJC_EXCEPTIONS

     return nullptr;
 }

+JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::intersectionWithSelectionRange()
+{
+    BEGIN_AX_OBJC_EXCEPTIONS
+    auto rangeAttribute = attributeValue(NSAccessibilityIntersectionWithSelectionRangeAttribute);
+    if (rangeAttribute) {
+        NSRange range = [rangeAttribute rangeValue];
+        NSMutableString* rangeDescription = [NSMutableString stringWithFormat:@&quot;{%lu, %lu}&quot;, static_cast&lt;unsigned long&gt;(range.location), static_cast&lt;unsigned long&gt;(range.length)];

AG: NSMutableString* rangeDescription -&gt; NSString *rangeDescription

+        return [rangeDescription createJSStringRef];
+    }
+    END_AX_OBJC_EXCEPTIONS
+
+    return nullptr;
+}
+
 bool AccessibilityUIElement::setSelectedTextRange(unsigned location, unsigned length)
 {
     NSRange textRange = NSMakeRange(location, length);
diff --git a/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp b/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp
index ff11fb7be199..b22e62ee8d02 100644
--- a/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp
+++ b/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp
@@ -658,6 +658,12 @@ JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::selectedTextRange()
     return nullptr;
 }

+JSRetainPtr&lt;JSStringRef&gt; AccessibilityUIElement::intersectionWithSelectionRange()
+{
+    notImplemented();
+    return nullptr;
+}
+
 bool AccessibilityUIElement::setSelectedTextRange(unsigned, unsigned)
 {
     notImplemented();
diff --git a/LayoutTests/accessibility/mac/intersection-with-selection-range-expected.txt b/LayoutTests/accessibility/mac/intersection-with-selection-range-expected.txt
new file mode 100644
index 000000000000..214287c6c542
--- /dev/null
+++ b/LayoutTests/accessibility/mac/intersection-with-selection-range-expected.txt
@@ -0,0 +1,46 @@
+This tests the intersectionWithSelectionRange api, which returns the range of characters in a static text node that are part of the document selection, if any.
+
+Trying range: text1:0 - text1:5 : Alpha
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text1:6 - text1:11 : Bravo
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text2:2 - text2:9 : Charlie
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text2:11 - text2:16 : Delta
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text1:6 - text2:9 : Bravo
+Charlie
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text1:0 - text1:5 : Alpha
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+Trying range: text1:6 - text2:9 : Bravo
+Charlie
+PASS: window.getSelection().toString() === expectedText
+PASS: axStaticText.role === &quot;AXRole: AXStaticText&quot;
+PASS: axStaticText.intersectionWithSelectionRange === expectedAccessibleRange
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Alpha Bravo
+Charlie Delta
+
diff --git a/LayoutTests/accessibility/mac/intersection-with-selection-range.html b/LayoutTests/accessibility/mac/intersection-with-selection-range.html
new file mode 100644
index 000000000000..db826a965400
--- /dev/null
+++ b/LayoutTests/accessibility/mac/intersection-with-selection-range.html
@@ -0,0 +1,64 @@
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/accessibility-helper.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;div id=&quot;text1&quot;&gt;Alpha Bravo&lt;/div&gt;
+&lt;div id=&quot;text2&quot;&gt;  Charlie  Delta  &lt;/div&gt;
+
+&lt;pre id=&quot;tree&quot;&gt;&lt;/pre&gt;
+
+&lt;script&gt;
+    var output = &quot;This tests the intersectionWithSelectionRange api, which returns the range of characters in a static text node that are part of the document selection, if any.\n\n&quot;;
+
+    async function selectNodeIdRange(nodeId0, offset0, nodeId1, offset1) {
+        let root = accessibilityController.rootElement;
+        let previousAXSelection = root.stringForTextMarkerRange(root.selectedTextMarkerRange())
+        let sel = window.getSelection();
+        let range = document.createRange();
+        range.setStart(document.getElementById(nodeId0).firstChild, offset0);
+        range.setEnd(document.getElementById(nodeId1).firstChild, offset1);
+        sel.removeAllRanges();
+        sel.addRange(range);
+        if (root.isIsolatedObject) {

AG: we shouldn&apos;t need this, isIsolatedObject is a leftover that should be removed along with the test that is using it. Client shouldn&apos;t need to know whether it is isolated or not.

+            await waitFor(() =&gt; previousAXSelection != root.stringForTextMarkerRange(root.selectedTextMarkerRange()));
+        }
+    }
+
+    async function runTest(nodeId0, offset0, nodeId1, offset1,
+                     expectedText,
+                     accessibleElementId, expectedAccessibleRange) {
+        output += `Trying range: ${nodeId0}:${offset0} - ${nodeId1}:${offset1} : ${expectedText}\n`;
+        await selectNodeIdRange(nodeId0, offset0, nodeId1, offset1);
+        window.expectedText = expectedText;
+        output += expect(&apos;window.getSelection().toString()&apos;, &apos;expectedText&apos;);
+
+        axElement = accessibilityController.accessibleElementById(accessibleElementId);
+        axStaticText = axElement.childAtIndex(0);
+        output += expect(&apos;axStaticText.role&apos;, &apos;&quot;AXRole: AXStaticText&quot;&apos;);
+        window.expectedAccessibleRange = expectedAccessibleRange
+        output += expect(&apos;axStaticText.intersectionWithSelectionRange&apos;, &apos;expectedAccessibleRange&apos;);
+
+        output += &apos;\n&apos;;
+    }
+
+    if (window.accessibilityController) {
+        window.jsTestIsAsync = true;
+        setTimeout(async () =&gt; {
+            //dumpAccessibilityTree(accessibilityController.rootElement, null, 0, true, false, true);

AG: remove commented line.

+            await runTest(&apos;text1&apos;, 0, &apos;text1&apos;, 5, &apos;Alpha&apos;, &apos;text1&apos;, &apos;{0, 5}&apos;);
+            await runTest(&apos;text1&apos;, 6, &apos;text1&apos;, 11, &apos;Bravo&apos;, &apos;text1&apos;, &apos;{6, 5}&apos;);
+            await runTest(&apos;text2&apos;, 2, &apos;text2&apos;, 9, &apos;Charlie&apos;, &apos;text2&apos;, &apos;{0, 7}&apos;);
+            await runTest(&apos;text2&apos;, 11, &apos;text2&apos;, 16, &apos;Delta&apos;, &apos;text2&apos;, &apos;{8, 5}&apos;);
+            await runTest(&apos;text1&apos;, 6, &apos;text2&apos;, 9, &apos;Bravo\nCharlie&apos;, &apos;text1&apos;, &apos;{6, 5}&apos;);
+            await runTest(&apos;text1&apos;, 0, &apos;text1&apos;, 5, &apos;Alpha&apos;, &apos;text2&apos;, null);
+            await runTest(&apos;text1&apos;, 6, &apos;text2&apos;, 9, &apos;Bravo\nCharlie&apos;, &apos;text2&apos;, &apos;{0, 7}&apos;);
+            debug(output);
+            finishJSTest();
+        }, 0);
+    }
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997118</commentid>
    <comment_count>15</comment_count>
      <attachid>468896</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 08:54:28 -0800</bug_when>
    <thetext>Created attachment 468896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997152</commentid>
    <comment_count>16</comment_count>
      <attachid>468896</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-12-05 10:43:17 -0800</bug_when>
    <thetext>Comment on attachment 468896
Patch

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

&gt; Source/WebCore/accessibility/AXTextMarker.h:159
&gt; +    std::optional&lt;AXTextMarkerRange&gt; intersectionWith(const AXTextMarkerRange&amp; other) const;

std::optional&lt;AXTextMarkerRange&gt; intersectionWith(const AXTextMarkerRange&amp;) const;

&gt; Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:63
&gt; +  readonly attribute DOMString intersectionWithSelectionRange;

indentation

&gt; Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:1568
&gt; +    if (rangeAttribute) {

if (auto *rangeAttribute = attributeValue(NSAccessibilityIntersectionWithSelectionRangeAttribute)) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997157</commentid>
    <comment_count>17</comment_count>
      <attachid>468901</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 11:06:43 -0800</bug_when>
    <thetext>Created attachment 468901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997198</commentid>
    <comment_count>18</comment_count>
      <attachid>468902</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 13:25:15 -0800</bug_when>
    <thetext>Created attachment 468902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997199</commentid>
    <comment_count>19</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 13:27:08 -0800</bug_when>
    <thetext>Thanks for the reviews! I believe I addressed all of the feedback now and figured out how to get rid of the isIsolatedObject workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997219</commentid>
    <comment_count>20</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2023-12-05 14:03:58 -0800</bug_when>
    <thetext>(In reply to Dominic Mazzoni from comment #19)
&gt; Thanks for the reviews! I believe I addressed all of the feedback now and
&gt; figured out how to get rid of the isIsolatedObject workaround.

Thanks! If you have two ranges r1 = (start = = 1, end = 2) and r2 = (start = 3, end = 4), and you do

+        unsigned startOffset = std::max(m_start.m_data.characterOffset, other.m_start.m_data.characterOffset);
+        unsigned endOffset = std::min(m_end.m_data.characterOffset, other.m_end.m_data.characterOffset);
+
+        auto startMarker = AXTextMarker({ m_start.treeID(), m_start.objectID(), nullptr, startOffset, Position::PositionIsOffsetInAnchor, Affinity::Downstream, 0, startOffset });
+        auto endMarker = AXTextMarker({ m_start.treeID(), m_start.objectID(), nullptr, endOffset, Position::PositionIsOffsetInAnchor, Affinity::Downstream, 0, endOffset });
+        return { { startMarker, endMarker } };

I think we return a range (start = 3, end = 2) which behaves the same as (2, 3), but we should return null or an empty range in that case.

Minor style nit:

+        NSString* rangeDescription = [NSString stringWithFormat:@&quot;{%lu, %lu}&quot;, static_cast&lt;unsigned long&gt;(range.location), static_cast&lt;unsigned long&gt;(range.length)];

WebKit coding standard calls for the * on the other side of the space for ObjC types, e.g., NSString *rangeDescription;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997224</commentid>
    <comment_count>21</comment_count>
      <attachid>468903</attachid>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 14:21:45 -0800</bug_when>
    <thetext>Created attachment 468903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997228</commentid>
    <comment_count>22</comment_count>
    <who name="Dominic Mazzoni">dm_mazzoni</who>
    <bug_when>2023-12-05 14:27:20 -0800</bug_when>
    <thetext>Thanks. Fixed so that it returns an empty range in that case, and fixed the style nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997447</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-12-06 11:25:57 -0800</bug_when>
    <thetext>Committed 271621@main (dbf11589ce2f): &lt;https://commits.webkit.org/271621@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 468903.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468835</attachid>
            <date>2023-12-01 11:40:49 -0800</date>
            <delta_ts>2023-12-01 16:14:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231201114048.patch</filename>
            <type>text/plain</type>
            <size>25084</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSAwNmFmNWQ1NzY5Zjk2OTRmODdkYTUxZTZmMjI4NTdkNDI3ZmJmMDA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHNlbGVjdGVkIHRleHQgcmFuZ2Ugb3ZlcmxhcHBpbmcgc3Rh
dGljCiB0ZXh0IGVsZW1lbnQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI2NTY4MyBJbmNsdWRlIGEgUmFkYXIKIGxpbmsgKE9PUFMhKS4KClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKT25lIG9mIHRoZSB0aGluZ3MgcHJldmVudGluZyBWb2ljZU92ZXIgZnJvbSBi
ZWluZyBhYmxlIHRvIHVzZSBXZWJLaXQKZW50aXJlbHkgb2ZmIHRoZSBtYWluIHRocmVhZCBpcyB0
aGF0IGl0IHdhbnRzIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZQpyYW5nZSBvZiBhIHN0YXRpYyB0
ZXh0IGVsZW1lbnQgdGhhdCdzIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNlbGVjdGlvbiwKaWYgYW55
LgoKRG9pbmcgdGhhdCB1c2luZyB0ZXh0IHJhbmdlcyBpcyBjb21wbGV4IGFuZCBoYXJkIGZvciBX
ZWJLaXQgdG8Kb3B0aW1pemUuIEEgbmV3IEFQSSB0aGF0IHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRp
b24gZGlyZWN0bHkgY2FuIGJlCmNvbXB1dGVkIGVmZmljaWVudGx5IHVzaW5nIHRoZSBpc29sYXRl
ZCB0cmVlLgoKVGhpcyBwYXRjaCBoYXMgYSBnZW5lcmFsIGltcGxlbWVudGF0aW9uIGluIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QKdGhhdCBhbHdheXMgY29ycmVjdGx5IGNvbXB1dGVzIHRoZSBw
b3J0aW9uIG9mIHRoZSBkb2N1bWVudCByYW5nZSB0aGF0Cm92ZXJsYXBzIGEgc3RhdGljIHRleHQg
ZWxlbWVudCwgdGhlbiBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBpbgpBWElzb2xhdGVkT2JqZWN0IHRo
YXQgY2FuIHJldHVybiBxdWlja2x5IG9mZiB0aGUgbWFpbiB0aHJlYWQgaWYgdGhlCnNlbGVjdGlv
biBpcyBlbnRpcmVseSB3aXRoaW4gdGhhdCBub2RlLCBvciBlbnRpcmVseSBvbiBhIGRpZmZlcmVu
dApub2RlLiBJZiB0aGUgc2VsZWN0aW9uIHNwYW5zIG11bHRpcGxlIG5vZGVzIGl0IHB1bnRzIHRv
IHRoZSBtYWluIHRocmVhZC4KCiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVP
YmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoo
V2ViQ29yZTo6QVhUZXh0TWFya2VyOjpjaGFyYWN0ZXJTdGFydCBjb25zdCk6CihXZWJDb3JlOjpB
WFRleHRNYXJrZXI6OmNoYXJhY3Rlck9mZnNldCBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlIGNvbnN0KToKKiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0
LmNwcDoKKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdl
IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORF0pOgooLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6Ciog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Lmg6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbDoKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHA6CihXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKToKKiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFN0YXRpY1RleHRS
YW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Vs
ZWN0ZWRTdGF0aWNUZXh0UmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwOgooV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWxlY3RlZFN0YXRpY1RleHRSYW5nZSk6CiogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvc2VsZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9zZWxlY3RlZC1zdGF0aWMtdGV4
dC1yYW5nZS5odG1sOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
Q29yZU9iamVjdC5oICAgfCAgMSArCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oICAgfCAgMyArCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmggICAgICAgfCAgMSArCiAuLi4vQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgICAgICAg
ICAgICAgfCAzMCArKysrKysKIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaCB8ICAxICsKIC4uLi9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgICAg
ICAgICB8IDIzICsrKysrCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaCAgICAg
ICAgICAgfCAgMSArCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
ICAgfCAyMCArKysrCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
ICAgfCAgMSArCiAuLi4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAgICAg
fCAgMSArCiAuLi4vYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcCAgICAgfCAg
NSArCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gICAgICAgICAgfCAgNSAr
CiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAgICAgICAgfCAxOCArKysr
CiAuLi4vd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwICAgICAgICAgfCAgNiArKwog
Li4uL3NlbGVjdGVkLXN0YXRpYy10ZXh0LXJhbmdlLWV4cGVjdGVkLnR4dCAgIHwgOTEgKysrKysr
KysrKysrKysrKysrKwogLi4uL21hYy9zZWxlY3RlZC1zdGF0aWMtdGV4dC1yYW5nZS5odG1sICAg
ICAgIHwgNjkgKysrKysrKysrKysrKysKIDE2IGZpbGVzIGNoYW5nZWQsIDI3NiBpbnNlcnRpb25z
KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvc2Vs
ZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvc2VsZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2Uu
aHRtbAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCmluZGV4
IDk5Y2YyMjI1NDkyNC4uMDNhNjI4ZDk1ZTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhDb3JlT2JqZWN0LmgKQEAgLTExNTQsNiArMTE1NCw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgc2hvdWxkUmV0dXJuRW1wdHlTZWxlY3RlZFRleHQoKSBjb25zdCB7IHJldHVybiBpc1Nl
Y3VyZUZpZWxkKCk7IH0KICAgICB2aXJ0dWFsIENoYXJhY3RlclJhbmdlIHNlbGVjdGVkVGV4dFJh
bmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5n
ZT4gc2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQg
aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBVUkwg
dXJsKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWFRleHRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFy
a2VyLmgKaW5kZXggNjBjOGUxZDE3M2U4Li4yM2ZjNTczMTMwODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApAQCAtMTMwLDYgKzEzMCw5IEBAIHB1Ymxp
YzoKICAgICBOb2RlKiBub2RlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lnbm9yZWQoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuaWdub3JlZDsgfQogCisgICAgdW5zaWduZWQgY2hhcmFjdGVyU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyU3RhcnQ7IH0KKyAgICB1bnNpZ25lZCBj
aGFyYWN0ZXJPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyT2Zmc2V0OyB9
CisKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCA1ZDg4Y2M2MTI4YzMuLjk3ZGM3NjJkMDM0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgKQEAgLTQzNyw2ICs0MzcsNyBAQCBwdWJsaWM6CiAKICAgICBUZXh0SXRlcmF0b3JCZWhh
dmlvcnMgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjb25zdDsKICAgICBDaGFy
YWN0ZXJSYW5nZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHsg
fTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IHNlbGVjdGVkU3RhdGljVGV4
dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgaW50
IGluc2VydGlvblBvaW50TGluZU51bWJlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIC0xOyB9
CiAKICAgICBVUkwgdXJsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVVJMKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCmluZGV4IDBkZTIyY2I3YWE3MS4uMDk2MDZjMzUwZjE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTEzNjQsNiArMTM2NCwzNiBAQCBDaGFyYWN0ZXJSYW5nZSBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJu
IGRvY3VtZW50QmFzZWRTZWxlY3RlZFRleHRSYW5nZSgpOwogfQogCitzdGQ6Om9wdGlvbmFsPENo
YXJhY3RlclJhbmdlPiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFN0YXRpY1Rl
eHRSYW5nZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzU3RhdGljVGV4dCgpKTsKKworICAgIGlm
ICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+bm9kZSgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYXV0byBzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlID0gdGhp
cy0+c2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIGlmIChzZWxlY3RlZFZpc2li
bGVQb3NpdGlvblJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKKyAgICBTaW1wbGVSYW5nZSBu
b2RlU2ltcGxlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygqbm9k
ZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugbm9kZVZpc2libGVSYW5nZSA9IG1ha2VWaXNp
YmxlUG9zaXRpb25SYW5nZShub2RlU2ltcGxlUmFuZ2UpOworICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIGludGVyc2VjdGlvbiA9IFdlYkNvcmU6OmludGVyc2VjdGlvbihzZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlLCBub2RlVmlzaWJsZVJhbmdlKTsKKyAgICBpZiAoaW50ZXJzZWN0aW9uLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKGludGVyc2Vj
dGlvbi5zdGFydCA+IGludGVyc2VjdGlvbi5lbmQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBpbnRlcnNlY3Rpb25TaW1wbGVS
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShpbnRlcnNlY3Rpb24pOworICAgIGlmICghaW50ZXJzZWN0
aW9uU2ltcGxlUmFuZ2UuaGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICB1bnNpZ25lZCBzdGFydENvdW50ID0gQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFu
Z2UoeyBub2RlU2ltcGxlUmFuZ2Uuc3RhcnQsIGludGVyc2VjdGlvblNpbXBsZVJhbmdlLT5zdGFy
dCB9KTsKKyAgICB1bnNpZ25lZCBlbmRDb3VudCA9IEFYT2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJh
bmdlKHsgbm9kZVNpbXBsZVJhbmdlLnN0YXJ0LCBpbnRlcnNlY3Rpb25TaW1wbGVSYW5nZS0+ZW5k
IH0pOworICAgIHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWwoQ2hhcmFjdGVyUmFuZ2Uoc3RhcnRD
b3VudCwgZW5kQ291bnQpKTsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlu
c2VydGlvblBvaW50TGluZU51bWJlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVGV4dENvbnRy
b2woKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IDc3MDQ1YzA1MmZjOS4uMTY2ZGU3YmFhYTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuaApAQCAtOTQsNiArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBVUkwgdXJs
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBzZWxl
Y3RlZFN0YXRpY1RleHRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBpbnNlcnRpb25Q
b2ludExpbmVOdW1iZXIoKSBjb25zdCBvdmVycmlkZTsKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUo
KSBjb25zdCBvdmVycmlkZTsKICAgICBTdHJpbmcgaGVscFRleHQoKSBjb25zdCBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggYTQ3ZDQ1OGMwYzIzLi4wZWM2NGM2MWM5
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC0xMjc0LDYgKzEyNzQsMjkgQEAg
Ym9vbCBBWElzb2xhdGVkT2JqZWN0Ojppc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFYSXNvbGF0
ZWRPYmplY3Q6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aXNTdGF0aWNUZXh0KCkpOworCisgICAgQVhUZXh0TWFya2VyUmFuZ2UgcmFuZ2UgPSB0cmVlKCkt
PnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CisgICAgaWYgKHJhbmdlLnN0YXJ0KCkudHJlZUlE
KCkgIT0gdHJlZSgpLT50cmVlSUQoKSB8fCByYW5nZS5lbmQoKS50cmVlSUQoKSAhPSB0cmVlKCkt
PnRyZWVJRCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKHJhbmdl
LnN0YXJ0KCkub2JqZWN0SUQoKSA9PSByYW5nZS5lbmQoKS5vYmplY3RJRCgpKSB7CisgICAgICAg
IGlmIChyYW5nZS5zdGFydCgpLm9iamVjdElEKCkgIT0gb2JqZWN0SUQoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgc3RkOjptYWtlX29wdGlvbmFsKENoYXJh
Y3RlclJhbmdlKHJhbmdlLnN0YXJ0KCkuY2hhcmFjdGVyT2Zmc2V0KCksIHJhbmdlLmVuZCgpLmNo
YXJhY3Rlck9mZnNldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPj4o
W3RoaXNdICgpIC0+IHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IHsKKyAgICAgICAgaWYg
KGF1dG8qIGF4T2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1
cm4gYXhPYmplY3QtPnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKCk7CisKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9KTsKK30KKwogaW50IEFYSXNvbGF0ZWRPYmplY3Q6Omluc2Vy
dGlvblBvaW50TGluZU51bWJlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpbnQ+KFt0aGlzXSAoKSAtPiBpbnQgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5oCmluZGV4IGE4Y2IzMmRjZTI4Ni4uMjExOGJiNjc3YmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC0zNDMsNiArMzQzLDcgQEAgcHJpdmF0ZToKIAogICAg
IC8vIENoYXJhY3RlclJhbmdlIHN1cHBvcnQuCiAgICAgQ2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRU
ZXh0UmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBwcm9wZXJ0eVZhbHVlPENoYXJhY3RlclJh
bmdlPihBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRUZXh0UmFuZ2UpOyB9CisgICAgc3RkOjpvcHRp
b25hbDxDaGFyYWN0ZXJSYW5nZT4gc2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UoKSBjb25zdCBmaW5h
bDsKICAgICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkgY29uc3QgZmluYWw7CiAgICAg
Q2hhcmFjdGVyUmFuZ2UgZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3QgZmluYWw7CiAg
ICAgU3RyaW5nIGRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBDaGFyYWN0ZXJSYW5nZSYpIGNvbnN0
IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCAzZjcy
YTM0ZDY4MTYuLjc0OWRlN2M3ZDM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0KQEAgLTI5Miw2ICsyOTIsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVNlbGVjdFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVk
QXR0cmlidXRlIEAiQVhTZWxlY3RUZXh0V2l0aENyaXRlcmlhIgogI2VuZGlmCiAKKyNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2VBdHRyaWJ1dGUgQCJBWFNlbGVj
dGVkU3RhdGljVGV4dFJhbmdlIgorI2VuZGlmCisKIC8vIFRleHQgc2VhcmNoCiAKICNpZm5kZWYg
TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGUKQEAgLTExNTksNiArMTE2MywxMSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VVJMQXR0
cmlidXRlXTsKICAgICAgICAgcmV0dXJuIHRlbXBBcnJheTsKICAgICB9KCk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkIHN0YXRpY1RleHRBdHRycyA9IFtdIHsKKyAgICAgICAgYXV0byB0ZW1w
QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQXJyYXk6YXR0
cmlidXRlcy5nZXQoKS5nZXQoKV0pOworICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlTZWxlY3RlZFN0YXRpY1RleHRSYW5nZUF0dHJpYnV0ZV07CisgICAgICAgIHJl
dHVybiB0ZW1wQXJyYXk7CisgICAgfSgpOwogCiAgICAgTlNBcnJheSAqb2JqZWN0QXR0cmlidXRl
cyA9IGF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAKQEAgLTExNjYsNiArMTE3NSw4IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gc2VjdXJlRmllbGRBdHRyaWJ1dGVzLmdldCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzV2ViQXJlYSgpKQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gd2ViQXJl
YUF0dHJzLmdldCgpLmdldCgpOworICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzU3RhdGlj
VGV4dCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc3RhdGljVGV4dEF0dHJzLmdldCgp
LmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAg
ICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRleHRBdHRycy5nZXQoKS5nZXQoKTsKICAgICBlbHNl
IGlmIChiYWNraW5nT2JqZWN0LT5pc0xpbmsoKSkKQEAgLTE2MjMsNiArMTYzNCwxNSBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgfQogICAgIH0KIAorICAg
IGlmIChiYWNraW5nT2JqZWN0LT5pc1N0YXRpY1RleHQoKSkgeworICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkU3RhdGljVGV4
dFJhbmdlQXR0cmlidXRlXSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJS
YW5nZT4gb3B0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5zZWxlY3RlZFN0YXRpY1RleHRSYW5nZSgp
OworICAgICAgICAgICAgaWYgKG9wdFJhbmdlLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpvcHRSYW5nZS52YWx1ZSgpXTsKKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5n
ZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzU2VjdXJlRmllbGQo
KSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmlu
ZGV4IGM2ODJmMWQxOTc1MC4uNjEzMTZmNjQ1OWU4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaApAQCAtMTc4LDYgKzE3OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNo
YXJhY3RlcnMoKSBjb25zdDsKICAgICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCk7CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlbGVjdGVkVGV4dFJhbmdlKCk7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKCk7CiAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc0F0b21pY0xpdmVSZWdpb24oKSBjb25zdDsKICAgICBib29sIGlzQnVzeSgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKaW5kZXgg
ZGM3YmZjOWQxYzEyLi5kNDJiY2ZkYzkxZDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmlkbApAQCAtNjAsNiArNjAsNyBAQAogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhcmFjdGVyczsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgbG9uZyBpbnNlcnRpb25Qb2ludExpbmVOdW1iZXI7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBzZWxlY3RlZFRleHRSYW5nZTsKKyAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHNlbGVjdGVkU3RhdGljVGV4dFJhbmdlOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgdGV4dElucHV0TWFya2VkUmFuZ2U7CiAKICAgICBET01TdHJpbmcgc3Ry
aW5nRGVzY3JpcHRpb25PZkF0dHJpYnV0ZVZhbHVlKERPTVN0cmluZyBhdHRyKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0c3BpLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcAppbmRleCA0ZWZlOGQw
MDVkMzkuLmQxM2ZhODc0ZWZlMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudEF0c3BpLmNwcApAQCAtMTQyNiw2ICsxNDI2LDExIEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiAg
ICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUocmFuZ2UpLmxlYWtSZWYoKTsKIH0K
IAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVj
dGVkU3RhdGljVGV4dFJhbmdlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2Nh
dGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2Vz
KCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6
OlRleHQpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXgg
MmQ1NjY3ODNkOTEwLi5iMjU3NDkwY2JhOTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudElPUy5tbQpAQCAtOTg2LDYgKzk4NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHJl
dHVybiBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKK0pTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFN0YXRpY1Rl
eHRSYW5nZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggYjU1MzJmNGFmMGJhLi4zZmE1ODk2ZjkyYzMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpAQCAtODksNiArODks
MTAgQEAKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCiAjZW5kaWYK
IAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFN0YXRpY1RleHRSYW5nZUF0dHJpYnV0
ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFN0YXRpY1RleHRSYW5nZUF0dHJpYnV0
ZSBAIkFYU2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgq
QVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlm
aWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFj
Y2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNTQ5LDYgKzE1NTMsMjAgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKCkKK3sKKyAgICBCRUdJ
Tl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBhdXRvIHJhbmdlQXR0cmlidXRlID0gYXR0cmlidXRl
VmFsdWUoTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2VBdHRyaWJ1dGUpOwor
ICAgIGlmIChyYW5nZUF0dHJpYnV0ZSkgeworICAgICAgICBOU1JhbmdlIHJhbmdlID0gW3Jhbmdl
QXR0cmlidXRlIHJhbmdlVmFsdWVdOworICAgICAgICBOU011dGFibGVTdHJpbmcqIHJhbmdlRGVz
Y3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgcmV0dXJuIFtyYW5nZURl
c2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsKKyAgICB9CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBOU1JhbmdlIHRleHRSYW5nZSA9IE5TTWFrZVJhbmdlKGxvY2F0aW9u
LCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcApp
bmRleCBmZjExZmI3YmUxOTkuLmM1ZjQ4M2QzYmQ3YyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNz
aWJpbGl0eVVJRWxlbWVudFdpbi5jcHAKQEAgLTY1OCw2ICs2NTgsMTIgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvc2VsZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvc2VsZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWRjY2QzZjBj
NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvc2Vs
ZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOTEgQEAKK1Ro
aXMgdGVzdHMgdGhlIHNlbGVjdGVkU3RhdGljVGV4dFJhbmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0
aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhIHN0YXRpYyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFy
dCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLCBpZiBhbnkuCisKK0lzb2xhdGVkIHRyZWUgZW5h
YmxlZDoKK1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFTUzogd2lu
ZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhT
dGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGlj
VGV4dC5zZWxlY3RlZFN0YXRpY1RleHRSYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UK
KworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0gdGV4dDE6MTEgOiBCcmF2bworUEFTUzogd2luZG93
LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0
aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4
dC5zZWxlY3RlZFN0YXRpY1RleHRSYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKwor
VHJ5aW5nIHJhbmdlOiB0ZXh0MjoyIC0gdGV4dDI6OSA6IENoYXJsaWUKK1BBU1M6IHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGlj
VGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQu
c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1Ry
eWluZyByYW5nZTogdGV4dDI6MTEgLSB0ZXh0MjoxNiA6IERlbHRhCitQQVNTOiB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1Rl
eHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LnNl
bGVjdGVkU3RhdGljVGV4dFJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlp
bmcgcmFuZ2U6IHRleHQxOjAgLSB0ZXh0MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5y
b2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuc2VsZWN0
ZWRTdGF0aWNUZXh0UmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyBy
YW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFTUzogd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNU
ZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5z
ZWxlY3RlZFN0YXRpY1RleHRSYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5
aW5nIHJhbmdlOiB0ZXh0MTo2IC0gdGV4dDI6OSA6IEJyYXZvCitDaGFybGllCitQQVNTOiB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0
YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNU
ZXh0LnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQor
CitJc29sYXRlZCB0cmVlIGRpc2FibGVkOgorVHJ5aW5nIHJhbmdlOiB0ZXh0MTowIC0gdGV4dDE6
NSA6IEFscGhhCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhw
ZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNU
ZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlID09PSBleHBl
Y3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0MToxMSA6
IEJyYXZvCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0
ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0
IgorUEFTUzogYXhTdGF0aWNUZXh0LnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlID09PSBleHBlY3Rl
ZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQyOjIgLSB0ZXh0Mjo5IDogQ2hh
cmxpZQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVk
VGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIK
K1BBU1M6IGF4U3RhdGljVGV4dC5zZWxlY3RlZFN0YXRpY1RleHRSYW5nZSA9PT0gZXhwZWN0ZWRB
Y2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MjoxMSAtIHRleHQyOjE2IDogRGVs
dGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRl
eHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQ
QVNTOiBheFN0YXRpY1RleHQuc2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UgPT09IGV4cGVjdGVkQWNj
ZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQor
UEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAor
UEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6
IGF4U3RhdGljVGV4dC5zZWxlY3RlZFN0YXRpY1RleHRSYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3Np
YmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0gdGV4dDI6OSA6IEJyYXZvCitDaGFy
bGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRU
ZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0Igor
UEFTUzogYXhTdGF0aWNUZXh0LnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlID09PSBleHBlY3RlZEFj
Y2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJhdm8K
K0NoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBl
Y3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1Rl
eHQiCitQQVNTOiBheFN0YXRpY1RleHQuc2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UgPT09IGV4cGVj
dGVkQWNjZXNzaWJsZVJhbmdlCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCitBbHBoYSBCcmF2bworQ2hhcmxpZSBEZWx0YQorQVhSb2xlOiBBWFNj
cm9sbEFyZWEgQVhTdWJyb2xlOiAgQVhWYWx1ZToKKyAgICBBWFJvbGU6IEFYV2ViQXJlYSBBWFN1
YnJvbGU6ICBBWFZhbHVlOgorICAgICAgICBBWFJvbGU6IEFYR3JvdXAgQVhTdWJyb2xlOiAgQVhW
YWx1ZToKKyAgICAgICAgICAgIEFYUm9sZTogQVhTdGF0aWNUZXh0IEFYU3Vicm9sZTogIEFYVmFs
dWU6IEFscGhhIEJyYXZvCisgICAgICAgIEFYUm9sZTogQVhHcm91cCBBWFN1YnJvbGU6ICBBWFZh
bHVlOgorICAgICAgICAgICAgQVhSb2xlOiBBWFN0YXRpY1RleHQgQVhTdWJyb2xlOiAgQVhWYWx1
ZTogQ2hhcmxpZSBEZWx0YQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9zZWxlY3RlZC1zdGF0aWMtdGV4dC1yYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvc2VsZWN0ZWQtc3RhdGljLXRleHQtcmFuZ2UuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjcxOWZmZWNmOTYxMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3NlbGVjdGVkLXN0YXRpYy10ZXh0LXJh
bmdlLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCis8IS0tCisgIE5vdGU6IHJ1biB0aGlzIHRlc3Qgd2l0aCAtLWFjY2Vzc2liaWxpdHkt
aXNvbGF0ZWQtdHJlZQorLS0+CisKKzxkaXYgaWQ9InRleHQxIj5BbHBoYSBCcmF2bzwvZGl2Pgor
PGRpdiBpZD0idGV4dDIiPiAgQ2hhcmxpZSAgRGVsdGEgIDwvZGl2PgorCis8cHJlIGlkPSJ0cmVl
Ij48L3ByZT4KKworPHNjcmlwdD4KKyAgICB2YXIgb3V0cHV0ID0gIlRoaXMgdGVzdHMgdGhlIHNl
bGVjdGVkU3RhdGljVGV4dFJhbmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0aGUgcmFuZ2Ugb2YgY2hh
cmFjdGVycyBpbiBhIHN0YXRpYyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFydCBvZiB0aGUgZG9jdW1l
bnQgc2VsZWN0aW9uLCBpZiBhbnkuXG5cbiI7CisKKyAgICBmdW5jdGlvbiBzZWxlY3ROb2RlSWRS
YW5nZShub2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQxKSB7CisgICAgICAgIGxldCBz
ZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGxldCByYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKG5vZGVJZDApLmZpcnN0Q2hpbGQsIG9mZnNldDApOworICAgICAgICByYW5nZS5zZXRF
bmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobm9kZUlkMSkuZmlyc3RDaGlsZCwgb2Zmc2V0MSk7
CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAgICAgc2VsLmFkZFJhbmdlKHJh
bmdlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KG5vZGVJZDAsIG9mZnNldDAsIG5v
ZGVJZDEsIG9mZnNldDEsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFRleHQsCisgICAg
ICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlRWxlbWVudElkLCBleHBlY3RlZEFjY2Vzc2libGVS
YW5nZSkgeworICAgICAgICBvdXRwdXQgKz0gYFRyeWluZyByYW5nZTogJHtub2RlSWQwfToke29m
ZnNldDB9IC0gJHtub2RlSWQxfToke29mZnNldDF9IDogJHtleHBlY3RlZFRleHR9XG5gOworICAg
ICAgICBzZWxlY3ROb2RlSWRSYW5nZShub2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQx
KTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkVGV4dCA9IGV4cGVjdGVkVGV4dDsKKyAgICAgICAg
b3V0cHV0ICs9IGV4cGVjdCgnd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCknLCAnZXhw
ZWN0ZWRUZXh0Jyk7CisKKyAgICAgICAgYXhFbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKGFjY2Vzc2libGVFbGVtZW50SWQpOworICAgICAgICBh
eFN0YXRpY1RleHQgPSBheEVsZW1lbnQuY2hpbGRBdEluZGV4KDApOworICAgICAgICBvdXRwdXQg
Kz0gZXhwZWN0KCdheFN0YXRpY1RleHQucm9sZScsICciQVhSb2xlOiBBWFN0YXRpY1RleHQiJyk7
CisgICAgICAgIHdpbmRvdy5leHBlY3RlZEFjY2Vzc2libGVSYW5nZSA9IGV4cGVjdGVkQWNjZXNz
aWJsZVJhbmdlCisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGljVGV4dC5zZWxlY3Rl
ZFN0YXRpY1RleHRSYW5nZScsICdleHBlY3RlZEFjY2Vzc2libGVSYW5nZScpOworCisgICAgICAg
IG91dHB1dCArPSAnXG4nOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkgeworICAg
ICAgICBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MScsICd7
MCwgNX0nKTsKKyAgICAgICAgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDEnLCAxMSwgJ0JyYXZv
JywgJ3RleHQxJywgJ3s2LCAxMX0nKTsKKyAgICAgICAgcnVuVGVzdCgndGV4dDInLCAyLCAndGV4
dDInLCA5LCAnQ2hhcmxpZScsICd0ZXh0MicsICd7MCwgN30nKTsKKyAgICAgICAgcnVuVGVzdCgn
dGV4dDInLCAxMSwgJ3RleHQyJywgMTYsICdEZWx0YScsICd0ZXh0MicsICd7OCwgMTN9Jyk7Cisg
ICAgICAgIHJ1blRlc3QoJ3RleHQxJywgMCwgJ3RleHQxJywgNSwgJ0FscGhhJywgJ3RleHQyJywg
bnVsbCk7CisgICAgICAgIHJ1blRlc3QoJ3RleHQxJywgNiwgJ3RleHQyJywgOSwgJ0JyYXZvXG5D
aGFybGllJywgJ3RleHQxJywgJ3s2LCAxMX0nKTsKKyAgICAgICAgcnVuVGVzdCgndGV4dDEnLCA2
LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAg
fQorCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICBv
dXRwdXQgKz0gJ0lzb2xhdGVkIHRyZWUgZW5hYmxlZDpcbic7CisgICAgICAgIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLnNldElzb2xhdGVkVHJlZU1vZGUodHJ1ZSk7CisgICAgICAgIGR1bXBBY2Nl
c3NpYmlsaXR5VHJlZShhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290RWxlbWVudCwgbnVsbCwg
MCwgdHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICBydW5UZXN0cygpOworCisgICAgICAgIG91
dHB1dCArPSAnSXNvbGF0ZWQgdHJlZSBkaXNhYmxlZDpcbic7CisgICAgICAgIGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLnNldElzb2xhdGVkVHJlZU1vZGUoZmFsc2UpOworICAgICAgICBydW5UZXN0
cygpOworICAgIH0KKyAgICBkZWJ1ZyhvdXRwdXQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468838</attachid>
            <date>2023-12-01 16:15:00 -0800</date>
            <delta_ts>2023-12-04 13:06:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231201161457.patch</filename>
            <type>text/plain</type>
            <size>25953</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA0YTk0MTY5MzJlNzA4MzMwNTc0ZWQzZWZhOGQ2NTk1MmY3ZDEwMTAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGhhcyBhIGdlbmVyYWwgaW1wbGVtZW50YXRpb24gaW4gQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdAp0aGF0IGFsd2F5cyBjb3JyZWN0bHkgY29tcHV0ZXMgdGhlIHBv
cnRpb24gb2YgdGhlIGRvY3VtZW50IHJhbmdlIHRoYXQKb3ZlcmxhcHMgYSBzdGF0aWMgdGV4dCBl
bGVtZW50LCB0aGVuIGFuIG9wdGltaXplZCB2ZXJzaW9uIGluCkFYSXNvbGF0ZWRPYmplY3QgdGhh
dCBjYW4gcmV0dXJuIHF1aWNrbHkgb2ZmIHRoZSBtYWluIHRocmVhZCBpZiB0aGUKc2VsZWN0aW9u
IGlzIGVudGlyZWx5IHdpdGhpbiB0aGF0IG5vZGUsIG9yIGVudGlyZWx5IG9uIGEgZGlmZmVyZW50
Cm5vZGUuIElmIHRoZSBzZWxlY3Rpb24gc3BhbnMgbXVsdGlwbGUgbm9kZXMgaXQgcHVudHMgdG8g
dGhlIG1haW4gdGhyZWFkLgoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9i
amVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmg6CihX
ZWJDb3JlOjpBWFRleHRNYXJrZXI6OmNoYXJhY3RlclN0YXJ0IGNvbnN0KToKKFdlYkNvcmU6OkFY
VGV4dE1hcmtlcjo6Y2hhcmFjdGVyT2Zmc2V0IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UgY29uc3QpOgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2Ug
Y29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaDoKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcDoKKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UpOgoqIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJ
T1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJh
bmdlKToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxl
Y3RlZFN0YXRpY1RleHRSYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHA6CihXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKToKKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24t
d2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbDogQWRkZWQuCi0tLQogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaCAgIHwgIDEgKwogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwgIDMgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5oICAgICAgIHwgIDEgKwogLi4uL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwICAgICAgICAgICAgIHwgMzAgKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmggfCAgMSArCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRP
YmplY3QuY3BwICAgICAgICAgfCAyMyArKysrKwogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmggICAgICAgICAgIHwgIDEgKwogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbSAgIHwgMjAgKysrKwogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCAgIHwgIDEgKwogLi4uL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsICAgICAgIHwgIDEgKwogLi4uL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNw
aS5jcHAgICAgIHwgIDUgKwogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICAg
ICAgICAgIHwgIDUgKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAg
ICAgIHwgMjAgKysrLQogLi4uL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcCAgICAg
ICAgIHwgIDYgKysKIC4uLnJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4
dCB8IDkxICsrKysrKysrKysrKysrKysrKysKIC4uLi9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rp
b24tcmFuZ2UuaHRtbCAgICB8IDY4ICsrKysrKysrKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCAy
NzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCmluZGV4IDk5Y2YyMjI1NDkyNC4u
NzQ5ODNiNGU0MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
Q29yZU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2Jq
ZWN0LmgKQEAgLTExNTQsNiArMTE1NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkUmV0
dXJuRW1wdHlTZWxlY3RlZFRleHQoKSBjb25zdCB7IHJldHVybiBpc1NlY3VyZUZpZWxkKCk7IH0K
ICAgICB2aXJ0dWFsIENoYXJhY3RlclJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gaW50ZXJzZWN0aW9u
V2l0aFNlbGVjdGlvblJhbmdlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGluc2VydGlv
blBvaW50TGluZU51bWJlcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgVVJMIHVybCgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCmlu
ZGV4IDYwYzhlMWQxNzNlOC4uMjNmYzU3MzEzMDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhUZXh0TWFya2VyLmgKQEAgLTEzMCw2ICsxMzAsOSBAQCBwdWJsaWM6CiAgICAg
Tm9kZSogbm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmlnbm9yZWQ7IH0KIAorICAgIHVuc2lnbmVkIGNoYXJhY3RlclN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmNoYXJhY3RlclN0YXJ0OyB9CisgICAgdW5zaWduZWQgY2hhcmFjdGVy
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNoYXJhY3Rlck9mZnNldDsgfQorCiAjaWYg
RU5BQkxFKFRSRUVfREVCVUdHSU5HKQogICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29u
c3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmgKaW5kZXggNWQ4OGNjNjEyOGMzLi44MjU1YWI1MzAwYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBA
IC00MzcsNiArNDM3LDcgQEAgcHVibGljOgogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIHRl
eHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkgY29uc3Q7CiAgICAgQ2hhcmFjdGVyUmFu
Z2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7IH07IH0KKyAg
ICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9u
UmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBpbnQg
aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gLTE7IH0K
IAogICAgIFVSTCB1cmwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBVUkwoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKaW5kZXggMGRlMjJjYjdhYTcxLi5hOGRlNjk4ZTdjYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcApAQCAtMTM2NCw2ICsxMzY0LDM2IEBAIENoYXJhY3RlclJhbmdlIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICByZXR1cm4g
ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCk7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2hh
cmFjdGVyUmFuZ2U+IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzU3RhdGljVGV4dCgpKTsKKwor
ICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+bm9kZSgpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
ID0gdGhpcy0+c2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSgpOworICAgIGlmIChzZWxlY3Rl
ZFZpc2libGVQb3NpdGlvblJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgYXV0byogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKKyAgICBTaW1wbGVS
YW5nZSBub2RlU2ltcGxlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50
cygqbm9kZSk7CisgICAgYXV0byBub2RlVmlzaWJsZVJhbmdlID0gbWFrZVZpc2libGVQb3NpdGlv
blJhbmdlKG5vZGVTaW1wbGVSYW5nZSk7CisgICAgYXV0byBpbnRlcnNlY3Rpb24gPSBXZWJDb3Jl
OjppbnRlcnNlY3Rpb24oc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSwgbm9kZVZpc2libGVS
YW5nZSk7CisgICAgaWYgKGludGVyc2VjdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmIChpbnRlcnNlY3Rpb24uc3RhcnQgPiBpbnRlcnNlY3Rpb24u
ZW5kKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBpbnRlcnNlY3Rp
b25TaW1wbGVSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShpbnRlcnNlY3Rpb24pOworICAgIGlmICgh
aW50ZXJzZWN0aW9uU2ltcGxlUmFuZ2UuaGFzX3ZhbHVlKCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICB1bnNpZ25lZCBzdGFydENvdW50ID0gQVhPYmplY3RDYWNoZTo6bGVu
Z3RoRm9yUmFuZ2UoeyBub2RlU2ltcGxlUmFuZ2Uuc3RhcnQsIGludGVyc2VjdGlvblNpbXBsZVJh
bmdlLT5zdGFydCB9KTsKKyAgICB1bnNpZ25lZCBlbmRDb3VudCA9IEFYT2JqZWN0Q2FjaGU6Omxl
bmd0aEZvclJhbmdlKHsgbm9kZVNpbXBsZVJhbmdlLnN0YXJ0LCBpbnRlcnNlY3Rpb25TaW1wbGVS
YW5nZS0+ZW5kIH0pOworICAgIHJldHVybiBzdGQ6Om1ha2Vfb3B0aW9uYWwoQ2hhcmFjdGVyUmFu
Z2Uoc3RhcnRDb3VudCwgZW5kQ291bnQpKTsKK30KKwogaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlz
VGV4dENvbnRyb2woKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IDc3MDQ1YzA1MmZjOS4uMWE0NDNm
YzEwNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtOTQsNiArOTQsNyBAQCBwdWJsaWM6CiAKICAg
ICBVUkwgdXJsKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRU
ZXh0UmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJh
bmdlPiBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGhlbHBUZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IGE0N2Q0NThj
MGMyMy4uOGQxMzZlMzlmMGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcApAQCAtMTI3
NCw2ICsxMjc0LDI5IEBAIGJvb2wgQVhJc29sYXRlZE9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJv
bCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGQ6Om9wdGlvbmFsPENoYXJhY3Rl
clJhbmdlPiBBWElzb2xhdGVkT2JqZWN0OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2Uo
KSBjb25zdAoreworICAgIEFTU0VSVChpc1N0YXRpY1RleHQoKSk7CisKKyAgICBhdXRvIHJhbmdl
ID0gdHJlZSgpLT5zZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpOworICAgIGlmIChyYW5nZS5zdGFy
dCgpLnRyZWVJRCgpICE9IHRyZWUoKS0+dHJlZUlEKCkgfHwgcmFuZ2UuZW5kKCkudHJlZUlEKCkg
IT0gdHJlZSgpLT50cmVlSUQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGlmIChyYW5nZS5zdGFydCgpLm9iamVjdElEKCkgPT0gcmFuZ2UuZW5kKCkub2JqZWN0SUQoKSkg
eworICAgICAgICBpZiAocmFuZ2Uuc3RhcnQoKS5vYmplY3RJRCgpICE9IG9iamVjdElEKCkpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2Vfb3B0aW9uYWwoQ2hhcmFjdGVyUmFuZ2UocmFuZ2Uuc3RhcnQoKS5jaGFyYWN0ZXJPZmZzZXQo
KSwgcmFuZ2UuZW5kKCkuY2hhcmFjdGVyT2Zmc2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPHN0ZDo6b3B0aW9uYWw8
Q2hhcmFjdGVyUmFuZ2U+PihbdGhpc10gKCkgLT4gc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5n
ZT4geworICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkK
KyAgICAgICAgICAgIHJldHVybiBheE9iamVjdC0+aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlKCk7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9KTsKK30KKwogaW50
IEFYSXNvbGF0ZWRPYmplY3Q6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpbnQ+
KFt0aGlzXSAoKSAtPiBpbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IGE4Y2IzMmRj
ZTI4Ni4uMjczMTVkY2VmZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCkBAIC0zNDMsNiAr
MzQzLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIENoYXJhY3RlclJhbmdlIHN1cHBvcnQuCiAgICAg
Q2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBw
cm9wZXJ0eVZhbHVlPENoYXJhY3RlclJhbmdlPihBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWRUZXh0
UmFuZ2UpOyB9CisgICAgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gaW50ZXJzZWN0aW9u
V2l0aFNlbGVjdGlvblJhbmdlKCkgY29uc3QgZmluYWw7CiAgICAgaW50IGluc2VydGlvblBvaW50
TGluZU51bWJlcigpIGNvbnN0IGZpbmFsOwogICAgIENoYXJhY3RlclJhbmdlIGRvQVhSYW5nZUZv
ckxpbmUodW5zaWduZWQpIGNvbnN0IGZpbmFsOwogICAgIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFu
Z2UoY29uc3QgQ2hhcmFjdGVyUmFuZ2UmKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggM2Y3MmEzNGQ2ODE2Li42ZjI2ODdiYTYyNWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0yOTIsNiArMjkyLDEw
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTZWxl
Y3RUZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYU2VsZWN0VGV4dFdp
dGhDcml0ZXJpYSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnRl
cnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUgQCJBWEludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSIKKyNlbmRpZgorCiAvLyBUZXh0IHNlYXJjaAogCiAjaWZuZGVmIE5TQWNj
ZXNzaWJpbGl0eVNlYXJjaFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRlCkBA
IC0xMTU5LDYgKzExNjMsMTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0
ZV07CiAgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CiAgICAgfSgpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZCBzdGF0aWNUZXh0QXR0cnMgPSBbXSB7CisgICAgICAgIGF1dG8gdGVtcEFycmF5
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0
ZXMuZ2V0KCkuZ2V0KCldKTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAg
cmV0dXJuIHRlbXBBcnJheTsKKyAgICB9KCk7CiAKICAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1
dGVzID0gYXR0cmlidXRlcy5nZXQoKS5nZXQoKTsKIApAQCAtMTE2Niw2ICsxMTc1LDggQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIG9iamVjdEF0dHJpYnV0
ZXMgPSBzZWN1cmVGaWVsZEF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAoYmFj
a2luZ09iamVjdC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJB
cmVhQXR0cnMuZ2V0KCkuZ2V0KCk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNTdGF0
aWNUZXh0KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzdGF0aWNUZXh0QXR0cnMuZ2V0
KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQog
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVs
c2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGluaygpKQpAQCAtMTYyMyw2ICsxNjM0LDE1IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQogCisg
ICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKSB7CisgICAgICAgIGlmIChbYXR0
cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0
aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxD
aGFyYWN0ZXJSYW5nZT4gb3B0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5pbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgICAgIGlmIChvcHRSYW5nZS5oYXNfdmFsdWUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6b3B0UmFuZ2Uu
dmFsdWUoKV07CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgfQorCiAg
ICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlWaXNp
YmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc1NlY3VyZUZpZWxkKCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaAppbmRleCBjNjgyZjFkMTk3NTAuLjBmMzhkZjIzODNjMyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmgKQEAgLTE3OCw2ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFyYWN0ZXJzKCkgY29uc3Q7CiAgICAgaW50IGluc2VydGlvblBvaW50
TGluZU51bWJlcigpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzZWxlY3RlZFRleHRS
YW5nZSgpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBpbnRlcnNlY3Rpb25XaXRoU2Vs
ZWN0aW9uUmFuZ2UoKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGV4dElucHV0TWFy
a2VkUmFuZ2UoKSBjb25zdDsKICAgICBib29sIGlzQXRvbWljTGl2ZVJlZ2lvbigpIGNvbnN0Owog
ICAgIGJvb2wgaXNCdXN5KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmlkbAppbmRleCBkYzdiZmM5ZDFjMTIuLmE1MTAyZTVmN2E2OSAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCkBAIC02MCw2ICs2
MCw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFy
YWN0ZXJzOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGluc2VydGlvblBvaW50TGluZU51
bWJlcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNlbGVjdGVkVGV4dFJhbmdl
OworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGludGVyc2VjdGlvbldpdGhTZWxlY3Rp
b25SYW5nZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHRJbnB1dE1hcmtl
ZFJhbmdlOwogCiAgICAgRE9NU3RyaW5nIHN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1
ZShET01TdHJpbmcgYXR0cik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRBdHNwaS5jcHAKaW5kZXggNGVmZThkMDA1ZDM5Li4wODkyNDNlNDdmNjIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0c3BpLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKQEAgLTE0MjYs
NiArMTQyNiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5
Q3JlYXRlKHJhbmdlKS5sZWFrUmVmKCk7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgaWYgKCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQppbmRleCAyZDU2Njc4M2Q5MTAuLmI3MDgwMDVj
NTJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC05
ODYsNiArOTg2LDExIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9u
IGNyZWF0ZUpTU3RyaW5nUmVmXTsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0
U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopCiB7
CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRN
YWMubW0KaW5kZXggYjU1MzJmNGFmMGJhLi43OTAwNTRjZTlmN2IgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpAQCAtODksNiArODksMTAgQEAKICNkZWZpbmUg
TlNBY2Nlc3NpYmlsaXR5VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAi
QVhUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2VyUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUKKyNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRl
IEAiQVhJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2
b2lkICgqQVhQb3N0ZWROb3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcq
IG5vdGlmaWNhdGlvbiwgdm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdl
YktpdEFjY2Vzc2liaWxpdHlBZGRpdGlvbnMpCkBAIC0xNTQyLDEzICsxNTQ2LDI3IEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRS
YW5nZSgpCiAgICAgYXV0byBpbmRleFJhbmdlID0gYXR0cmlidXRlVmFsdWUoTlNBY2Nlc3NpYmls
aXR5U2VsZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGUpOwogICAgIGlmIChpbmRleFJhbmdlKQogICAg
ICAgICByYW5nZSA9IFtpbmRleFJhbmdlIHJhbmdlVmFsdWVdOwotICAgIE5TTXV0YWJsZVN0cmlu
ZyogcmFuZ2VEZXNjcmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InslbHUsICVsdX0iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sb2NhdGlvbiks
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxlbmd0aCldOworICAgIE5TU3RyaW5n
ICpyYW5nZURlc2NyaXB0aW9uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAl
bHV9Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKICAgICByZXR1cm4gW3JhbmdlRGVz
Y3JpcHRpb24gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMK
IAogICAgIHJldHVybiBudWxscHRyOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sK
KyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBhdXRvIHJhbmdlQXR0cmlidXRlID0g
YXR0cmlidXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlQXR0cmlidXRlKTsKKyAgICBpZiAocmFuZ2VBdHRyaWJ1dGUpIHsKKyAgICAgICAgTlNSYW5n
ZSByYW5nZSA9IFtyYW5nZUF0dHJpYnV0ZSByYW5nZVZhbHVlXTsKKyAgICAgICAgTlNNdXRhYmxl
U3RyaW5nKiByYW5nZURlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAieyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxvY2F0
aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubGVuZ3RoKV07CisgICAgICAg
IHJldHVybiBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CisgICAgfQorICAg
IEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgTlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01h
a2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudFdpbi5jcHAKaW5kZXggZmYxMWZiN2JlMTk5Li5iMjJlNjJlZThkMDIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRXaW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCkBAIC02NTgsNiArNjU4LDEy
IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxl
Y3RlZFRleHRSYW5nZSgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0pTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0
aW9uUmFuZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2Uo
dW5zaWduZWQsIHVuc2lnbmVkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rp
b24tcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQzZDQzMWVmNzAwMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVj
dGlvbi1yYW5nZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5MSBAQAorVGhpcyB0ZXN0cyB0aGUg
aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0aGUgcmFu
Z2Ugb2YgY2hhcmFjdGVycyBpbiBhIHN0YXRpYyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFydCBvZiB0
aGUgZG9jdW1lbnQgc2VsZWN0aW9uLCBpZiBhbnkuCisKK0lzb2xhdGVkIHRyZWUgZW5hYmxlZDoK
K1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFTUzogd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNU
ZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5p
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdl
CisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQxOjExIDogQnJhdm8KK1BBU1M6IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3Rh
dGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1Rl
eHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVS
YW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQyOjIgLSB0ZXh0Mjo5IDogQ2hhcmxpZQorUEFTUzog
d2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzog
YXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3Rh
dGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNz
aWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDI6MTEgLSB0ZXh0MjoxNiA6IERlbHRhCitQ
QVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQ
QVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzog
YXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRB
Y2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTowIC0gdGV4dDE6NSA6IEFscGhh
CitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0
CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFT
UzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0
ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0gdGV4dDI6OSA6IEJy
YXZvCitDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0g
ZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0
aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0g
dGV4dDI6OSA6IEJyYXZvCitDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9T
dHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFY
Um9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworSXNvbGF0ZWQgdHJl
ZSBkaXNhYmxlZDoKK1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFT
Uzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFT
UzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4
U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNj
ZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQxOjExIDogQnJhdm8K
K1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQK
K1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNT
OiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3Rl
ZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQyOjIgLSB0ZXh0Mjo5IDogQ2hh
cmxpZQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVk
VGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIK
K1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4
cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDI6MTEgLSB0ZXh0Mjox
NiA6IERlbHRhCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhw
ZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNU
ZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9
PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTowIC0gdGV4
dDE6NSA6IEFscGhhCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0g
ZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0
aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0g
dGV4dDI6OSA6IEJyYXZvCitDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9T
dHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFY
Um9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdl
OiB0ZXh0MTo2IC0gdGV4dDI6OSA6IEJyYXZvCitDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQu
cm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVy
c2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKwor
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0FscGhh
IEJyYXZvCitDaGFybGllIERlbHRhCitBWFJvbGU6IEFYU2Nyb2xsQXJlYSBBWFN1YnJvbGU6ICBB
WFZhbHVlOgorICAgIEFYUm9sZTogQVhXZWJBcmVhIEFYU3Vicm9sZTogIEFYVmFsdWU6CisgICAg
ICAgIEFYUm9sZTogQVhHcm91cCBBWFN1YnJvbGU6ICBBWFZhbHVlOgorICAgICAgICAgICAgQVhS
b2xlOiBBWFN0YXRpY1RleHQgQVhTdWJyb2xlOiAgQVhWYWx1ZTogQWxwaGEgQnJhdm8KKyAgICAg
ICAgQVhSb2xlOiBBWEdyb3VwIEFYU3Vicm9sZTogIEFYVmFsdWU6CisgICAgICAgICAgICBBWFJv
bGU6IEFYU3RhdGljVGV4dCBBWFN1YnJvbGU6ICBBWFZhbHVlOiBDaGFybGllIERlbHRhCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRo
LXNlbGVjdGlvbi1yYW5nZS5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi41ZmNjMzJjN2NmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFu
Z2UuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisKKzxkaXYgaWQ9InRleHQxIj5BbHBoYSBCcmF2bzwvZGl2PgorPGRpdiBpZD0idGV4dDIi
PiAgQ2hhcmxpZSAgRGVsdGEgIDwvZGl2PgorCis8cHJlIGlkPSJ0cmVlIj48L3ByZT4KKworPHNj
cmlwdD4KKyAgICB2YXIgb3V0cHV0ID0gIlRoaXMgdGVzdHMgdGhlIGludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSBhcGksIHdoaWNoIHJldHVybnMgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMg
aW4gYSBzdGF0aWMgdGV4dCBub2RlIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNlbGVj
dGlvbiwgaWYgYW55LlxuXG4iOworCisgICAgZnVuY3Rpb24gc2VsZWN0Tm9kZUlkUmFuZ2Uobm9k
ZUlkMCwgb2Zmc2V0MCwgbm9kZUlkMSwgb2Zmc2V0MSkgeworICAgICAgICBsZXQgc2VsID0gd2lu
ZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVS
YW5nZSgpOworICAgICAgICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChu
b2RlSWQwKS5maXJzdENoaWxkLCBvZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKG5vZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOworICAgICAg
ICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdChub2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBv
ZmZzZXQxLAorICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRUZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgYWNjZXNzaWJsZUVsZW1lbnRJZCwgZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UpIHsK
KyAgICAgICAgb3V0cHV0ICs9IGBUcnlpbmcgcmFuZ2U6ICR7bm9kZUlkMH06JHtvZmZzZXQwfSAt
ICR7bm9kZUlkMX06JHtvZmZzZXQxfSA6ICR7ZXhwZWN0ZWRUZXh0fVxuYDsKKyAgICAgICAgc2Vs
ZWN0Tm9kZUlkUmFuZ2Uobm9kZUlkMCwgb2Zmc2V0MCwgbm9kZUlkMSwgb2Zmc2V0MSk7CisgICAg
ICAgIHdpbmRvdy5leHBlY3RlZFRleHQgPSBleHBlY3RlZFRleHQ7CisgICAgICAgIG91dHB1dCAr
PSBleHBlY3QoJ3dpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpJywgJ2V4cGVjdGVkVGV4
dCcpOworCisgICAgICAgIGF4RWxlbWVudCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZChhY2Nlc3NpYmxlRWxlbWVudElkKTsKKyAgICAgICAgYXhTdGF0aWNU
ZXh0ID0gYXhFbGVtZW50LmNoaWxkQXRJbmRleCgwKTsKKyAgICAgICAgb3V0cHV0ICs9IGV4cGVj
dCgnYXhTdGF0aWNUZXh0LnJvbGUnLCAnIkFYUm9sZTogQVhTdGF0aWNUZXh0IicpOworICAgICAg
ICB3aW5kb3cuZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UgPSBleHBlY3RlZEFjY2Vzc2libGVSYW5n
ZQorICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCdheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0
aFNlbGVjdGlvblJhbmdlJywgJ2V4cGVjdGVkQWNjZXNzaWJsZVJhbmdlJyk7CisKKyAgICAgICAg
b3V0cHV0ICs9ICdcbic7CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CisgICAg
ICAgIHJ1blRlc3QoJ3RleHQxJywgMCwgJ3RleHQxJywgNSwgJ0FscGhhJywgJ3RleHQxJywgJ3sw
LCA1fScpOworICAgICAgICBydW5UZXN0KCd0ZXh0MScsIDYsICd0ZXh0MScsIDExLCAnQnJhdm8n
LCAndGV4dDEnLCAnezYsIDExfScpOworICAgICAgICBydW5UZXN0KCd0ZXh0MicsIDIsICd0ZXh0
MicsIDksICdDaGFybGllJywgJ3RleHQyJywgJ3swLCA3fScpOworICAgICAgICBydW5UZXN0KCd0
ZXh0MicsIDExLCAndGV4dDInLCAxNiwgJ0RlbHRhJywgJ3RleHQyJywgJ3s4LCAxM30nKTsKKyAg
ICAgICAgcnVuVGVzdCgndGV4dDEnLCAwLCAndGV4dDEnLCA1LCAnQWxwaGEnLCAndGV4dDInLCBu
dWxsKTsKKyAgICAgICAgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNo
YXJsaWUnLCAndGV4dDEnLCAnezYsIDExfScpOworICAgICAgICBydW5UZXN0KCd0ZXh0MScsIDYs
ICd0ZXh0MicsIDksICdCcmF2b1xuQ2hhcmxpZScsICd0ZXh0MicsICd7MCwgN30nKTsKKyAgICB9
CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIG91
dHB1dCArPSAnSXNvbGF0ZWQgdHJlZSBlbmFibGVkOlxuJzsKKyAgICAgICAgYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuc2V0SXNvbGF0ZWRUcmVlTW9kZSh0cnVlKTsKKworCS8vIE5vdGU6IGlmIHdl
IGRvbid0IGRvIHRoaXMsIHRoZSBpc29sYXRlZCBub2RlcyB3b24ndCBleGlzdCB5ZXQuCisgICAg
ICAgIGR1bXBBY2Nlc3NpYmlsaXR5VHJlZShhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290RWxl
bWVudCwgbnVsbCwgMCwgdHJ1ZSwgZmFsc2UsIHRydWUpOworCisgICAgICAgIHJ1blRlc3RzKCk7
CisKKyAgICAgICAgb3V0cHV0ICs9ICdJc29sYXRlZCB0cmVlIGRpc2FibGVkOlxuJzsKKyAgICAg
ICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc2V0SXNvbGF0ZWRUcmVlTW9kZShmYWxzZSk7Cisg
ICAgICAgIHJ1blRlc3RzKCk7CisgICAgfQorICAgIGRlYnVnKG91dHB1dCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468874</attachid>
            <date>2023-12-04 13:06:24 -0800</date>
            <delta_ts>2023-12-04 23:07:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231204130623.patch</filename>
            <type>text/plain</type>
            <size>26209</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA4Y2E4YTdiYjNkNmY3ZWM2YzIyNTAyZDkzZmEwNGM3NTFkZDBiY2MyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGhhcyBhIGdlbmVyYWwgaW1wbGVtZW50YXRpb24gaW4gQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdAp0aGF0IGFsd2F5cyBjb3JyZWN0bHkgY29tcHV0ZXMgdGhlIHBv
cnRpb24gb2YgdGhlIGRvY3VtZW50IHJhbmdlIHRoYXQKb3ZlcmxhcHMgYSBzdGF0aWMgdGV4dCBl
bGVtZW50LCB0aGVuIGFuIG9wdGltaXplZCB2ZXJzaW9uIGluCkFYSXNvbGF0ZWRPYmplY3QgdGhh
dCBjYW4gcmV0dXJuIHF1aWNrbHkgb2ZmIHRoZSBtYWluIHRocmVhZCBpZiB0aGUKc2VsZWN0aW9u
IGlzIGVudGlyZWx5IHdpdGhpbiB0aGF0IG5vZGUsIG9yIGVudGlyZWx5IG9uIGEgZGlmZmVyZW50
Cm5vZGUuIElmIHRoZSBzZWxlY3Rpb24gc3BhbnMgbXVsdGlwbGUgbm9kZXMgaXQgcHVudHMgdG8g
dGhlIG1haW4gdGhyZWFkLgoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9i
amVjdC5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmg6CihX
ZWJDb3JlOjpBWFRleHRNYXJrZXI6OmNoYXJhY3RlclN0YXJ0IGNvbnN0KToKKFdlYkNvcmU6OkFY
VGV4dE1hcmtlcjo6Y2hhcmFjdGVyT2Zmc2V0IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UgY29uc3QpOgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2Ug
Y29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5EXSk6CigtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaDoKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcDoKKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRTdGF0aWNUZXh0UmFuZ2UpOgoqIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJ
T1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJh
bmdlKToKKiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxl
Y3RlZFN0YXRpY1RleHRSYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHA6CihXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkU3RhdGljVGV4dFJhbmdlKToKKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24t
d2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbDogQWRkZWQuCi0tLQogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaCAgIHwgIDEgKwogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWFRleHRNYXJrZXIuaCAgIHwgIDQgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5oICAgICAgIHwgIDEgKwogLi4uL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwICAgICAgICAgICAgIHwgMzAgKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmggfCAgMSArCiAuLi4vaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRP
YmplY3QuY3BwICAgICAgICAgfCAyMyArKysrKwogLi4uL2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmggICAgICAgICAgIHwgIDMgKwogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbSAgIHwgMjAgKysrKwogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCAgIHwgIDEgKwogLi4uL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsICAgICAgIHwgIDEgKwogLi4uL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNw
aS5jcHAgICAgIHwgIDUgKwogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICAg
ICAgICAgIHwgIDUgKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAg
ICAgIHwgMjAgKysrLQogLi4uL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcCAgICAg
ICAgIHwgIDYgKysKIC4uLnJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4
dCB8IDkxICsrKysrKysrKysrKysrKysrKysKIC4uLi9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rp
b24tcmFuZ2UuaHRtbCAgICB8IDY4ICsrKysrKysrKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCAy
NzkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCmluZGV4IDEwMTE0ZWNiNmRkOC4u
YzQ1YzE5MmVkZmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
Q29yZU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2Jq
ZWN0LmgKQEAgLTExNzMsNiArMTE3Myw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkUmV0
dXJuRW1wdHlTZWxlY3RlZFRleHQoKSBjb25zdCB7IHJldHVybiBpc1NlY3VyZUZpZWxkKCk7IH0K
ICAgICB2aXJ0dWFsIENoYXJhY3RlclJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gaW50ZXJzZWN0aW9u
V2l0aFNlbGVjdGlvblJhbmdlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGluc2VydGlv
blBvaW50TGluZU51bWJlcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgVVJMIHVybCgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCmlu
ZGV4IDJmZmFlZWMwMjZmMC4uYjhjYWU3ZDM0YzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhUZXh0TWFya2VyLmgKQEAgLTEzMCw2ICsxMzAsMTAgQEAgcHVibGljOgogICAg
IE5vZGUqIG5vZGUoKSBjb25zdDsKICAgICBib29sIGlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5pZ25vcmVkOyB9CiAKKyAgICB1bnNpZ25lZCBjaGFyYWN0ZXJTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJTdGFydDsgfQorICAgIHVuc2lnbmVkIGNoYXJhY3Rl
ck9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQ7IH0KKworI2lm
IEVOQUJMRShUUkVFX0RFQlVHR0lORykKICAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNv
bnN0OwogCiAgICAgLy8gU2V0cyBtX2RhdGEubm9kZSB3aGVuIHRoZSBtYXJrZXIgd2FzIGNyZWF0
ZWQgd2l0aCBhIFBsYXRmb3JtVGV4dE1hcmtlckRhdGEgdGhhdCBsYWNrcyB0aGUgbm9kZSBwb2lu
dGVyIGJlY2F1c2UgaXQgd2FzIGNyZWF0ZWQgb2ZmIHRoZSBtYWluIHRocmVhZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXgg
NWQ4OGNjNjEyOGMzLi44MjU1YWI1MzAwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC00MzcsNiArNDM3LDcgQEAgcHVi
bGljOgogCiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JzIHRleHRJdGVyYXRvckJlaGF2aW9yRm9y
VGV4dFJhbmdlKCkgY29uc3Q7CiAgICAgQ2hhcmFjdGVyUmFuZ2Ugc2VsZWN0ZWRUZXh0UmFuZ2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB7IH07IH0KKyAgICBzdGQ6Om9wdGlvbmFsPENoYXJh
Y3RlclJhbmdlPiBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVt
YmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gLTE7IH0KIAogICAgIFVSTCB1cmwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBVUkwoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjhl
ZDQ3ODFkOTQ2Li45YjlhN2M0M2Q2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTM5Miw2
ICsxMzkyLDM2IEBAIFZlY3RvcjxBWFRleHRSdW4+IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnRleHRSdW5zKCkKIH0KICNlbmRpZgogCitzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2Uo
KSBjb25zdAoreworICAgIEFTU0VSVChpc1N0YXRpY1RleHQoKSk7CisKKyAgICBpZiAoIW1fcmVu
ZGVyZXIgfHwgIW1fcmVuZGVyZXItPm5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGF1dG8gc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSA9IHRoaXMtPnNlbGVj
dGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBpZiAoc2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1
dG8qIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CisgICAgU2ltcGxlUmFuZ2Ugbm9kZVNpbXBs
ZVJhbmdlID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpOworICAg
IGF1dG8gbm9kZVZpc2libGVSYW5nZSA9IG1ha2VWaXNpYmxlUG9zaXRpb25SYW5nZShub2RlU2lt
cGxlUmFuZ2UpOworICAgIGF1dG8gaW50ZXJzZWN0aW9uID0gV2ViQ29yZTo6aW50ZXJzZWN0aW9u
KHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UsIG5vZGVWaXNpYmxlUmFuZ2UpOworICAgIGlm
IChpbnRlcnNlY3Rpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBpZiAoaW50ZXJzZWN0aW9uLnN0YXJ0ID4gaW50ZXJzZWN0aW9uLmVuZCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaW50ZXJzZWN0aW9uU2ltcGxlUmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UoaW50ZXJzZWN0aW9uKTsKKyAgICBpZiAoIWludGVyc2VjdGlvblNp
bXBsZVJhbmdlLmhhc192YWx1ZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgdW5zaWduZWQgc3RhcnRDb3VudCA9IEFYT2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKHsg
bm9kZVNpbXBsZVJhbmdlLnN0YXJ0LCBpbnRlcnNlY3Rpb25TaW1wbGVSYW5nZS0+c3RhcnQgfSk7
CisgICAgdW5zaWduZWQgZW5kQ291bnQgPSBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZSh7
IG5vZGVTaW1wbGVSYW5nZS5zdGFydCwgaW50ZXJzZWN0aW9uU2ltcGxlUmFuZ2UtPmVuZCB9KTsK
KyAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENoYXJhY3RlclJhbmdlKHN0YXJ0Q291bnQs
IGVuZENvdW50KSk7Cit9CisKIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnNlcnRp
b25Qb2ludExpbmVOdW1iZXIoKSBjb25zdAogewogICAgIEFTU0VSVChpc1RleHRDb250cm9sKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuaAppbmRleCA3ZTFkNWI4MzMzNDkuLjI0ODU0NzFhOTJiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmgKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGljOgogCiAgICAgVVJMIHVybCgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIENoYXJhY3RlclJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gaW50ZXJzZWN0
aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IGluc2VydGlv
blBvaW50TGluZU51bWJlcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIFN0cmluZyBzdHJpbmdWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0IG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCA5YmNkMTQ5ZjM1OTQuLjI5NjdhYzJi
YzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTEyODIsNiArMTI4MiwyOSBA
QCBib29sIEFYSXNvbGF0ZWRPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorc3RkOjpvcHRpb25hbDxDaGFyYWN0ZXJSYW5nZT4gQVhJc29s
YXRlZE9iamVjdDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaXNTdGF0aWNUZXh0KCkpOworCisgICAgYXV0byByYW5nZSA9IHRyZWUoKS0+c2Vs
ZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICBpZiAocmFuZ2Uuc3RhcnQoKS50cmVlSUQoKSAh
PSB0cmVlKCktPnRyZWVJRCgpIHx8IHJhbmdlLmVuZCgpLnRyZWVJRCgpICE9IHRyZWUoKS0+dHJl
ZUlEKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAocmFuZ2Uuc3Rh
cnQoKS5vYmplY3RJRCgpID09IHJhbmdlLmVuZCgpLm9iamVjdElEKCkpIHsKKyAgICAgICAgaWYg
KHJhbmdlLnN0YXJ0KCkub2JqZWN0SUQoKSAhPSBvYmplY3RJRCgpKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX29wdGlvbmFsKENo
YXJhY3RlclJhbmdlKHJhbmdlLnN0YXJ0KCkuY2hhcmFjdGVyT2Zmc2V0KCksIHJhbmdlLmVuZCgp
LmNoYXJhY3Rlck9mZnNldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdl
Pj4oW3RoaXNdICgpIC0+IHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IHsKKyAgICAgICAg
aWYgKGF1dG8qIGF4T2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gYXhPYmplY3QtPmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpOworCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfSk7Cit9CisKIGludCBBWElzb2xhdGVkT2Jq
ZWN0OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKSBjb25zdAogewogICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aW50PihbdGhpc10gKCkgLT4g
aW50IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAppbmRleCBlNWIzYTZiZjA1MDIuLmZkZmYwODkw
MmI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtMzQzLDkgKzM0MywxMiBAQCBwcml2
YXRlOgogCiAgICAgLy8gQ2hhcmFjdGVyUmFuZ2Ugc3VwcG9ydC4KICAgICBDaGFyYWN0ZXJSYW5n
ZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHByb3BlcnR5VmFsdWU8
Q2hhcmFjdGVyUmFuZ2U+KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZFRleHRSYW5nZSk7IH0KKwog
I2lmIEVOQUJMRShBWF9USFJFQURfVEVYVF9BUElTKQogICAgIFZlY3RvcjxBWFRleHRSdW4+IHRl
eHRSdW5zKCkgZmluYWwgeyByZXR1cm4gdmVjdG9yQXR0cmlidXRlVmFsdWU8QVhUZXh0UnVuPihB
WFByb3BlcnR5TmFtZTo6VGV4dFJ1bnMpOyB9CiAjZW5kaWYKKworICAgIHN0ZDo6b3B0aW9uYWw8
Q2hhcmFjdGVyUmFuZ2U+IGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpIGNvbnN0IGZp
bmFsOwogICAgIGludCBpbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKSBjb25zdCBmaW5hbDsKICAg
ICBDaGFyYWN0ZXJSYW5nZSBkb0FYUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdCBmaW5hbDsK
ICAgICBTdHJpbmcgZG9BWFN0cmluZ0ZvclJhbmdlKGNvbnN0IENoYXJhY3RlclJhbmdlJikgY29u
c3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGY2
MDNjM2YwMzViNy4uZGMxMGY5MWViZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbQpAQCAtMjkyLDYgKzI5MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUgQCJBWFNlbGVjdFRleHRXaXRoQ3JpdGVyaWEiCiAjZW5kaWYKIAorI2lmbmRl
ZiBOU0FjY2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUK
KyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0
cmlidXRlIEAiQVhJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogLy8g
VGV4dCBzZWFyY2gKIAogI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTZWFyY2hUZXh0V2l0aENyaXRl
cmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZQpAQCAtMTE1OSw2ICsxMTYzLDExIEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVj
dDpOU0FjY2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgICAgICByZXR1cm4gdGVtcEFycmF5
OwogICAgIH0oKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQgc3RhdGljVGV4dEF0dHJzID0g
W10geworICAgICAgICBhdXRvIHRlbXBBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzLmdldCgpLmdldCgpXSk7CisgICAgICAgIFt0
ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rp
b25SYW5nZUF0dHJpYnV0ZV07CisgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CisgICAgfSgpOwog
CiAgICAgTlNBcnJheSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7
CiAKQEAgLTExNjYsNiArMTE3NSw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc2VjdXJlRmllbGRBdHRyaWJ1dGVzLmdl
dCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzLmdldCgpLmdldCgpOworICAgIGVs
c2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKQorICAgICAgICBvYmplY3RBdHRy
aWJ1dGVzID0gc3RhdGljVGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRl
eHRBdHRycy5nZXQoKS5nZXQoKTsKICAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpbmso
KSkKQEAgLTE2MjYsNiArMTYzNywxNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1N0YXRp
Y1RleHQoKSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZV0pIHsK
KyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IG9wdFJhbmdlID0gYmFj
a2luZ09iamVjdC0+aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCk7CisgICAgICAgICAg
ICBpZiAob3B0UmFuZ2UuaGFzX3ZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFJhbmdlOm9wdFJhbmdlLnZhbHVlKCldOworICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkg
ewogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTZWN1cmVGaWVsZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKaW5kZXggYzY4MmYxZDE5
NzUwLi4wZjM4ZGYyMzgzYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCkBAIC0xNzgs
NiArMTc4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVycygpIGNv
bnN0OwogICAgIGludCBpbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKTsKICAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gc2VsZWN0ZWRUZXh0UmFuZ2UoKTsKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCk7CiAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHRleHRJbnB1dE1hcmtlZFJhbmdlKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0F0b21pY0xpdmVSZWdpb24oKSBjb25zdDsKICAgICBib29sIGlzQnVzeSgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKaW5kZXggZGM3YmZj
OWQxYzEyLi5hNTEwMmU1ZjdhNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmlkbApAQCAtNjAsNiArNjAsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhcmFjdGVyczsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgbG9uZyBpbnNlcnRpb25Qb2ludExpbmVOdW1iZXI7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBzZWxlY3RlZFRleHRSYW5nZTsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2U7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB0ZXh0SW5wdXRNYXJrZWRSYW5nZTsKIAogICAgIERPTVN0cmluZyBzdHJp
bmdEZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoRE9NU3RyaW5nIGF0dHIpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50QXRzcGkuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCmluZGV4IDRlZmU4ZDAw
NWQzOS4uMDg5MjQzZTQ3ZjYyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRzcGkuY3BwCkBAIC0xNDI2LDYgKzE0MjYsMTEgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAg
ICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShyYW5nZSkubGVha1JlZigpOwogfQog
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwog
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9lbGVtZW50LT5pbnRl
cmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRl
cmZhY2U6OlRleHQpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0K
aW5kZXggMmQ1NjY3ODNkOTEwLi5iNzA4MDA1YzUyY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1Mu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudElPUy5tbQpAQCAtOTg2LDYgKzk4NiwxMSBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQog
ICAgIHJldHVybiBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rp
b25XaXRoU2VsZWN0aW9uUmFuZ2UoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGI1NTMyZjRhZjBiYS4uNzkw
MDU0Y2U5ZjdiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0K
QEAgLTg5LDYgKzg5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtl
ZFRleHRNYXJrZXJSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJh
bmdlIgogI2VuZGlmCiAKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNl
bGVjdGlvblJhbmdlQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZSBAIkFYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlv
blJhbmdlIgorI2VuZGlmCisKIHR5cGVkZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2Fs
bGJhY2spKGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQp
OwogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQpA
QCAtMTU0MiwxMyArMTU0NiwyNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIGF1dG8gaW5kZXhSYW5nZSA9
IGF0dHJpYnV0ZVZhbHVlKE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRl
KTsKICAgICBpZiAoaW5kZXhSYW5nZSkKICAgICAgICAgcmFuZ2UgPSBbaW5kZXhSYW5nZSByYW5n
ZVZhbHVlXTsKLSAgICBOU011dGFibGVTdHJpbmcqIHJhbmdlRGVzY3JpcHRpb24gPSBbTlNNdXRh
YmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihy
YW5nZS5sZW5ndGgpXTsKKyAgICBOU1N0cmluZyAqcmFuZ2VEZXNjcmlwdGlvbiA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KHJhbmdlLmxvY2F0aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubGVu
Z3RoKV07CiAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsK
ICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2Vj
dGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05T
CisgICAgYXV0byByYW5nZUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZVZhbHVlKE5TQWNjZXNzaWJpbGl0
eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZSk7CisgICAgaWYgKHJhbmdl
QXR0cmlidXRlKSB7CisgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbcmFuZ2VBdHRyaWJ1dGUgcmFu
Z2VWYWx1ZV07CisgICAgICAgIE5TTXV0YWJsZVN0cmluZyogcmFuZ2VEZXNjcmlwdGlvbiA9IFtO
U011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInslbHUsICVsdX0iLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihyYW5nZS5sb2NhdGlvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KHJhbmdlLmxlbmd0aCldOworICAgICAgICByZXR1cm4gW3JhbmdlRGVzY3JpcHRpb24gY3Jl
YXRlSlNTdHJpbmdSZWZdOworICAgIH0KKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRT
ZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIE5TUmFuZ2UgdGV4dFJhbmdlID0gTlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCmluZGV4IGZmMTFmYjdi
ZTE5OS4uYjIyZTYyZWU4ZDAyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50V2luLmNwcApAQCAtNjU4LDYgKzY1OCwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5k
M2Q0MzFlZjcwMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsOTEgQEAKK1RoaXMgdGVzdHMgdGhlIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZSBhcGksIHdoaWNoIHJldHVybnMgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gYSBzdGF0aWMg
dGV4dCBub2RlIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNlbGVjdGlvbiwgaWYgYW55
LgorCitJc29sYXRlZCB0cmVlIGVuYWJsZWQ6CitUcnlpbmcgcmFuZ2U6IHRleHQxOjAgLSB0ZXh0
MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBl
eHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRp
Y1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
ID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0
ZXh0MToxMSA6IEJyYXZvCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9
PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhT
dGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0Mjoy
IC0gdGV4dDI6OSA6IENoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmlu
ZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xl
OiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRl
eHQyOjExIC0gdGV4dDI6MTYgOiBEZWx0YQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRv
U3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJB
WFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5n
ZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigp
LnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09
ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25X
aXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyBy
YW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFTUzogd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNU
ZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5p
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdl
CisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFT
Uzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFT
UzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4
U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNj
ZXNzaWJsZVJhbmdlCisKK0lzb2xhdGVkIHRyZWUgZGlzYWJsZWQ6CitUcnlpbmcgcmFuZ2U6IHRl
eHQxOjAgLSB0ZXh0MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0
cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhS
b2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNl
bGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6
IHRleHQxOjYgLSB0ZXh0MToxMSA6IEJyYXZvCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
dG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0g
IkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldp
dGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJh
bmdlOiB0ZXh0MjoyIC0gdGV4dDI6OSA6IENoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xl
ID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0
aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlp
bmcgcmFuZ2U6IHRleHQyOjExIC0gdGV4dDI6MTYgOiBEZWx0YQorUEFTUzogd2luZG93LmdldFNl
bGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0
LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRl
cnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisK
K1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFTUzogd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNU
ZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5p
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdl
CisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFT
Uzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFT
UzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4
U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNj
ZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bwor
Q2hhcmxpZQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVj
dGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4
dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09
IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitBbHBoYSBCcmF2bworQ2hhcmxpZSBEZWx0YQorQVhSb2xl
OiBBWFNjcm9sbEFyZWEgQVhTdWJyb2xlOiAgQVhWYWx1ZToKKyAgICBBWFJvbGU6IEFYV2ViQXJl
YSBBWFN1YnJvbGU6ICBBWFZhbHVlOgorICAgICAgICBBWFJvbGU6IEFYR3JvdXAgQVhTdWJyb2xl
OiAgQVhWYWx1ZToKKyAgICAgICAgICAgIEFYUm9sZTogQVhTdGF0aWNUZXh0IEFYU3Vicm9sZTog
IEFYVmFsdWU6IEFscGhhIEJyYXZvCisgICAgICAgIEFYUm9sZTogQVhHcm91cCBBWFN1YnJvbGU6
ICBBWFZhbHVlOgorICAgICAgICAgICAgQVhSb2xlOiBBWFN0YXRpY1RleHQgQVhTdWJyb2xlOiAg
QVhWYWx1ZTogQ2hhcmxpZSBEZWx0YQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWZjYzMyYzdj
ZjVjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1o
ZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPSJ0ZXh0MSI+QWxwaGEg
QnJhdm88L2Rpdj4KKzxkaXYgaWQ9InRleHQyIj4gIENoYXJsaWUgIERlbHRhICA8L2Rpdj4KKwor
PHByZSBpZD0idHJlZSI+PC9wcmU+CisKKzxzY3JpcHQ+CisgICAgdmFyIG91dHB1dCA9ICJUaGlz
IHRlc3RzIHRoZSBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgYXBpLCB3aGljaCByZXR1
cm5zIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIGEgc3RhdGljIHRleHQgbm9kZSB0aGF0IGFy
ZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBzZWxlY3Rpb24sIGlmIGFueS5cblxuIjsKKworICAgIGZ1
bmN0aW9uIHNlbGVjdE5vZGVJZFJhbmdlKG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEsIG9mZnNl
dDEpIHsKKyAgICAgICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAg
bGV0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2Uuc2V0U3Rh
cnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobm9kZUlkMCkuZmlyc3RDaGlsZCwgb2Zmc2V0MCk7
CisgICAgICAgIHJhbmdlLnNldEVuZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChub2RlSWQxKS5m
aXJzdENoaWxkLCBvZmZzZXQxKTsKKyAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOworICAg
ICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3Qo
bm9kZUlkMCwgb2Zmc2V0MCwgbm9kZUlkMSwgb2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2libGVFbGVtZW50SWQs
IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlKSB7CisgICAgICAgIG91dHB1dCArPSBgVHJ5aW5nIHJh
bmdlOiAke25vZGVJZDB9OiR7b2Zmc2V0MH0gLSAke25vZGVJZDF9OiR7b2Zmc2V0MX0gOiAke2V4
cGVjdGVkVGV4dH1cbmA7CisgICAgICAgIHNlbGVjdE5vZGVJZFJhbmdlKG5vZGVJZDAsIG9mZnNl
dDAsIG5vZGVJZDEsIG9mZnNldDEpOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRUZXh0ID0gZXhw
ZWN0ZWRUZXh0OworICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCd3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkudG9TdHJpbmcoKScsICdleHBlY3RlZFRleHQnKTsKKworICAgICAgICBheEVsZW1lbnQgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoYWNjZXNzaWJsZUVs
ZW1lbnRJZCk7CisgICAgICAgIGF4U3RhdGljVGV4dCA9IGF4RWxlbWVudC5jaGlsZEF0SW5kZXgo
MCk7CisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGljVGV4dC5yb2xlJywgJyJBWFJv
bGU6IEFYU3RhdGljVGV4dCInKTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkQWNjZXNzaWJsZVJh
bmdlID0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKyAgICAgICAgb3V0cHV0ICs9IGV4cGVjdCgn
YXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZScsICdleHBlY3RlZEFj
Y2Vzc2libGVSYW5nZScpOworCisgICAgICAgIG91dHB1dCArPSAnXG4nOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHJ1blRlc3RzKCkgeworICAgICAgICBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0
MScsIDUsICdBbHBoYScsICd0ZXh0MScsICd7MCwgNX0nKTsKKyAgICAgICAgcnVuVGVzdCgndGV4
dDEnLCA2LCAndGV4dDEnLCAxMSwgJ0JyYXZvJywgJ3RleHQxJywgJ3s2LCAxMX0nKTsKKyAgICAg
ICAgcnVuVGVzdCgndGV4dDInLCAyLCAndGV4dDInLCA5LCAnQ2hhcmxpZScsICd0ZXh0MicsICd7
MCwgN30nKTsKKyAgICAgICAgcnVuVGVzdCgndGV4dDInLCAxMSwgJ3RleHQyJywgMTYsICdEZWx0
YScsICd0ZXh0MicsICd7OCwgMTN9Jyk7CisgICAgICAgIHJ1blRlc3QoJ3RleHQxJywgMCwgJ3Rl
eHQxJywgNSwgJ0FscGhhJywgJ3RleHQyJywgbnVsbCk7CisgICAgICAgIHJ1blRlc3QoJ3RleHQx
JywgNiwgJ3RleHQyJywgOSwgJ0JyYXZvXG5DaGFybGllJywgJ3RleHQxJywgJ3s2LCAxMX0nKTsK
KyAgICAgICAgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUn
LCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmls
aXR5Q29udHJvbGxlcikgeworICAgICAgICBvdXRwdXQgKz0gJ0lzb2xhdGVkIHRyZWUgZW5hYmxl
ZDpcbic7CisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnNldElzb2xhdGVkVHJlZU1v
ZGUodHJ1ZSk7CisKKwkvLyBOb3RlOiBpZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGUgaXNvbGF0ZWQg
bm9kZXMgd29uJ3QgZXhpc3QgeWV0LgorICAgICAgICBkdW1wQWNjZXNzaWJpbGl0eVRyZWUoYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIucm9vdEVsZW1lbnQsIG51bGwsIDAsIHRydWUsIGZhbHNlLCB0
cnVlKTsKKworICAgICAgICBydW5UZXN0cygpOworCisgICAgICAgIG91dHB1dCArPSAnSXNvbGF0
ZWQgdHJlZSBkaXNhYmxlZDpcbic7CisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnNl
dElzb2xhdGVkVHJlZU1vZGUoZmFsc2UpOworICAgICAgICBydW5UZXN0cygpOworICAgIH0KKyAg
ICBkZWJ1ZyhvdXRwdXQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468884</attachid>
            <date>2023-12-04 23:07:28 -0800</date>
            <delta_ts>2023-12-05 08:54:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231204230727.patch</filename>
            <type>text/plain</type>
            <size>21011</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA1MjM4YmU2NmViZmM1NDQ2NzI3NTVkZmY1NzAwYzcwNWY1ZGU5ZjA3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhpcyB1c2luZyBhIG5ldyBtZXRob2QgdG8g
Y29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uCm9mIHR3byBBWFRleHRNYXJrZXJSYW5nZXMuIEl0J3Mg
ZWZmaWNpZW50IHdoZW4gYm90aCByYW5nZXMgc3BhbiBhIHNpbmdsZQplbGVtZW50IGVhY2ggKGVp
dGhlciBib3RoIGluIHRoZSBzYW1lIGVsZW1lbnQsIG9yIGJvdGggZGlmZmVyZW50IGVsZW1lbnRz
KSwKYW5kIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGlmIG5vdC4KCiogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWw6IEFkZGVkLgoqIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4dE1hcmtl
clJhbmdlOjppbnRlcnNlY3Rpb25XaXRoIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CigtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZV0pOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwOgooV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UpOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0lzb2xhdGVkT2JqZWN0IGNvbnN0KToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKToKKiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcDoKKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
KToKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAgfCAz
MiArKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5o
ICAgfCAgMiArCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICAg
fCAzNSArKysrKysrKysrCiAuLi4vSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oICAgfCAgMSArCiAuLi4vQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwgICAg
ICAgfCAgMSArCiAuLi4vYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcCAgICAg
fCAgNSArKwogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICAgICAgICAgIHwg
IDUgKysKIC4uLi9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSAgICAgICAgICB8IDMw
ICsrKysrKysrLQogLi4uL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcCAgICAgICAg
IHwgIDYgKysKIC4uLnJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dCB8
IDQ2ICsrKysrKysrKysrKysKIC4uLi9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2Uu
aHRtbCAgICB8IDY0ICsrKysrKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDIyNSBp
bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS1l
eHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcAppbmRleCBkNzU5MjBhZTlhMTQu
LjY5MDIyZmM0Nzc1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WFRleHRNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmNwcApAQCAtMjk5LDYgKzI5OSwzOCBAQCBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJh
bmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6Y2hhcmFjdGVyUmFuZ2UoKSBjb25zdAogICAgIHJldHVy
biB7IHsgbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0LCBtX2VuZC5tX2RhdGEuY2hhcmFj
dGVyT2Zmc2V0IC0gbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0IH0gfTsKIH0KIAorc3Rk
OjpvcHRpb25hbDxBWFRleHRNYXJrZXJSYW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6OmludGVyc2Vj
dGlvbldpdGgoY29uc3QgQVhUZXh0TWFya2VyUmFuZ2UmIG90aGVyKSBjb25zdAoreworICAgIGlm
IChtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJRAorICAgICAgICB8
fCBvdGhlci5tX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gb3RoZXIubV9lbmQubV9kYXRhLnRyZWVJ
RAorICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gb3RoZXIubV9zdGFydC5tX2Rh
dGEudHJlZUlEKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZhc3QgcGF0aDogYm90aCByYW5nZXMg
c3BhbiBvbmUgb2JqZWN0CisgICAgaWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEID09IG1fZW5k
Lm1fZGF0YS5vYmplY3RJRAorICAgICAgICAmJiBvdGhlci5tX3N0YXJ0Lm1fZGF0YS5vYmplY3RJ
RCA9PSBvdGhlci5tX2VuZC5tX2RhdGEub2JqZWN0SUQpIHsKKyAgICAgICAgaWYgKG1fc3RhcnQu
bV9kYXRhLm9iamVjdElEICE9IG90aGVyLm1fc3RhcnQubV9kYXRhLm9iamVjdElEKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dCA9IHN0ZDo6bWF4KG1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgb3RoZXIubV9zdGFy
dC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
c3RkOjptaW4obV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgb3RoZXIubV9lbmQubV9kYXRh
LmNoYXJhY3Rlck9mZnNldCk7CisKKyAgICAgICAgYXV0byBzdGFydE1hcmtlciA9IEFYVGV4dE1h
cmtlcih7IChBWElEKW1fc3RhcnQubV9kYXRhLnRyZWVJRCwgKEFYSUQpbV9zdGFydC5tX2RhdGEu
b2JqZWN0SUQsIG51bGxwdHIsIHN0YXJ0T2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yLCBBZmZpbml0eTo6RG93bnN0cmVhbSwgMCwgc3RhcnRPZmZzZXQgfSk7CisgICAg
ICAgIGF1dG8gZW5kTWFya2VyID0gQVhUZXh0TWFya2VyKHsgKEFYSUQpbV9zdGFydC5tX2RhdGEu
dHJlZUlELCAoQVhJRCltX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCwgbnVsbHB0ciwgZW5kT2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yLCBBZmZpbml0eTo6RG93bnN0cmVh
bSwgMCwgZW5kT2Zmc2V0IH0pOworICAgICAgICByZXR1cm4geyB7IHN0YXJ0TWFya2VyLCBlbmRN
YXJrZXIgfSB9OworICAgIH0KKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZh
bHVlRnJvbU1haW5UaHJlYWQ8c3RkOjpvcHRpb25hbDxBWFRleHRNYXJrZXJSYW5nZT4+KFt0aGlz
LCAmb3RoZXJdICgpIC0+IHN0ZDo6b3B0aW9uYWw8QVhUZXh0TWFya2VyUmFuZ2U+IHsKKyAgICAg
ICAgYXV0byBpbnRlcnNlY3Rpb24gPSBXZWJDb3JlOjppbnRlcnNlY3Rpb24oKnRoaXMsIG90aGVy
KTsKKyAgICAgICAgaWYgKGludGVyc2VjdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgQVhUZXh0TWFya2VyUmFuZ2UoaW50
ZXJzZWN0aW9uKSB9OworICAgIH0pOworfQorCiBTdHJpbmcgQVhUZXh0TWFya2VyUmFuZ2U6OmRl
YnVnRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJzdGFydDog
eyIsIG1fc3RhcnQuZGVidWdEZXNjcmlwdGlvbigpLCAifVxuZW5kOiB7IiwgbV9lbmQuZGVidWdE
ZXNjcmlwdGlvbigpLCAifSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWFRleHRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmgKaW5kZXggMmZmYWVlYzAyNmYwLi4yMTM2YzRmYWU4NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1
YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0
OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29u
c3Q7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEFYVGV4dE1hcmtlclJhbmdlPiBpbnRlcnNlY3Rpb25X
aXRoKGNvbnN0IEFYVGV4dE1hcmtlclJhbmdlJiBvdGhlcikgY29uc3Q7CisKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEo
KSBjb25zdDsKICAgICBvcGVyYXRvciBBWFRleHRNYXJrZXJSYW5nZVJlZigpIGNvbnN0IHsgcmV0
dXJuIHBsYXRmb3JtRGF0YSgpLmF1dG9yZWxlYXNlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KaW5kZXggZjYwM2MzZjAzNWI3Li40MjYzMzNkYzFmMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0yOTIsNiArMjkyLDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RU
ZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYU2VsZWN0VGV4dFdpdGhD
cml0ZXJpYSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldp
dGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnRlcnNl
Y3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUgQCJBWEludGVyc2VjdGlvbldpdGhTZWxl
Y3Rpb25SYW5nZSIKKyNlbmRpZgorCiAvLyBUZXh0IHNlYXJjaAogCiAjaWZuZGVmIE5TQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRlCkBAIC0x
MTU5LDYgKzExNjMsMTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07
CiAgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CiAgICAgfSgpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZCBzdGF0aWNUZXh0QXR0cnMgPSBbXSB7CisgICAgICAgIGF1dG8gdGVtcEFycmF5ID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXMu
Z2V0KCkuZ2V0KCldKTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmls
aXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAgcmV0
dXJuIHRlbXBBcnJheTsKKyAgICB9KCk7CiAKICAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVz
ID0gYXR0cmlidXRlcy5nZXQoKS5nZXQoKTsKIApAQCAtMTE2Niw2ICsxMTc1LDggQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMg
PSBzZWN1cmVGaWVsZEF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAoYmFja2lu
Z09iamVjdC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVh
QXR0cnMuZ2V0KCkuZ2V0KCk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNTdGF0aWNU
ZXh0KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzdGF0aWNUZXh0QXR0cnMuZ2V0KCku
Z2V0KCk7CiAgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAg
ICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVsc2Ug
aWYgKGJhY2tpbmdPYmplY3QtPmlzTGluaygpKQpAQCAtMTYyNiw2ICsxNjM3LDExIEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKGJhY2tpbmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKSB7CisgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNl
bGVjdGlvblJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBpbnRlcnNl
Y3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VdOworICAgIH0KKwogICAgIGlmIChbYXR0cmlidXRlTmFt
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0
cmlidXRlXSkgewogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTZWN1cmVGaWVsZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIyMzUsNiArMjI1MSwyNSBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICByZXR1cm4gbmlsOwogfQogCistIChOU1Zh
bHVlICopaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlCit7CisgICAgUmVmUHRyPEFYQ29y
ZU9iamVjdD4gYmFja2luZ09iamVjdCA9IHNlbGYudXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlOwor
ICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8g
b2JqZWN0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT50ZXh0TWFya2VyUmFuZ2UoKTsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gYmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2Uo
KTsKKworICAgIGF1dG8gaW50ZXJzZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2UuaW50ZXJzZWN0aW9u
V2l0aChvYmplY3RSYW5nZSk7CisgICAgaWYgKGludGVyc2VjdGlvbi5oYXNfdmFsdWUoKSkgewor
ICAgICAgICBhdXRvIGludGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlID0gaW50ZXJzZWN0aW9uLT5j
aGFyYWN0ZXJSYW5nZSgpOworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uQ2hhcmFjdGVyUmFuZ2Uu
aGFzX3ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6
aW50ZXJzZWN0aW9uQ2hhcmFjdGVyUmFuZ2UudmFsdWUoKV07CisgICAgfQorCisgICAgcmV0dXJu
IG5pbDsKK30KKwogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3Vic2Ny
aXB0S2V5CiB7CiAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1
dGU7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IGM2ODJmMWQxOTc1MC4uMGYzOGRm
MjM4M2MzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMTc4LDYgKzE3OCw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdDsKICAgICBp
bnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNlbGVjdGVkVGV4dFJhbmdlKCk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBdG9taWNMaXZl
UmVnaW9uKCkgY29uc3Q7CiAgICAgYm9vbCBpc0J1c3koKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCmluZGV4IGRjN2JmYzlkMWMxMi4uYTUx
MDJlNWY3YTY5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5pZGwKQEAgLTYwLDYgKzYwLDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBudW1iZXJPZkNoYXJhY3RlcnM7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5z
ZXJ0aW9uUG9pbnRMaW5lTnVtYmVyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
c2VsZWN0ZWRUZXh0UmFuZ2U7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgdGV4dElucHV0TWFya2VkUmFuZ2U7CiAKICAgICBET01TdHJpbmcgc3RyaW5nRGVzY3JpcHRp
b25PZkF0dHJpYnV0ZVZhbHVlKERPTVN0cmluZyBhdHRyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dEF0c3BpLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcAppbmRleCA0ZWZlOGQwMDVkMzkuLjA4OTI0
M2U0N2Y2MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
c3BpLmNwcApAQCAtMTQyNiw2ICsxNDI2LDExIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiAgICAgcmV0dXJuIE9w
YXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUocmFuZ2UpLmxlYWtSZWYoKTsKIH0KIAorSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNv
bnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUZXh0
KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCmluZGV4IDJkNTY2
NzgzZDkxMC4uYjcwODAwNWM1MmNjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRJT1MubW0KQEAgLTk4Niw2ICs5ODYsMTEgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICByZXR1cm4g
W3JhbmdlRGVzY3JpcHRpb24gY3JlYXRlSlNTdHJpbmdSZWZdOwogfQogCitKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlKikKIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbQppbmRleCBiNTUzMmY0YWYwYmEuLmY0NDk5NmRiMjllZiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC04OSw2ICs4
OSwxMCBAQAogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlUZXh0SW5wdXRNYXJrZWRUZXh0TWFya2Vy
UmFuZ2VBdHRyaWJ1dGUgQCJBWFRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZSIKICNlbmRp
ZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0
aW9uUmFuZ2VBdHRyaWJ1dGUgQCJBWEludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSIKKyNl
bmRpZgorCiB0eXBlZGVmIHZvaWQgKCpBWFBvc3RlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKShpZCBl
bGVtZW50LCBOU1N0cmluZyogbm90aWZpY2F0aW9uLCB2b2lkKiBjb250ZXh0KTsKIAogQGludGVy
ZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNzaWJpbGl0eUFkZGl0aW9ucykKQEAgLTEzNCw3ICsx
MzgsMTUgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIG90aGVyRWxlbWVudCkKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lzb2xhdGVkT2JqZWN0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fZWxlbWVudCBpc0lzb2xhdGVkT2JqZWN0XTsKKyAg
ICBCT09MIHZhbHVlOworCisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgc19jb250
cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZ2YWx1ZV0geworICAgICAg
ICB2YWx1ZSA9IFttX2VsZW1lbnQgaXNJc29sYXRlZE9iamVjdF07CisgICAgfSk7CisgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIHZhbHVlOwogfQogI2VuZGlmCiAKQEAg
LTE1NDIsMTMgKzE1NTQsMjcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICBhdXRvIGluZGV4UmFuZ2UgPSBh
dHRyaWJ1dGVWYWx1ZShOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZSk7
CiAgICAgaWYgKGluZGV4UmFuZ2UpCiAgICAgICAgIHJhbmdlID0gW2luZGV4UmFuZ2UgcmFuZ2VW
YWx1ZV07Ci0gICAgTlNNdXRhYmxlU3RyaW5nKiByYW5nZURlc2NyaXB0aW9uID0gW05TTXV0YWJs
ZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KHJhbmdlLmxvY2F0aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFu
Z2UubGVuZ3RoKV07CisgICAgTlNTdHJpbmcgKnJhbmdlRGVzY3JpcHRpb24gPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAInslbHUsICVsdX0iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihyYW5nZS5sb2NhdGlvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxlbmd0
aCldOwogICAgIHJldHVybiBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CiAg
ICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rp
b25XaXRoU2VsZWN0aW9uUmFuZ2UoKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwor
ICAgIGF1dG8gcmFuZ2VBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZShOU0FjY2Vzc2liaWxpdHlJ
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUpOworICAgIGlmIChyYW5nZUF0
dHJpYnV0ZSkgeworICAgICAgICBOU1JhbmdlIHJhbmdlID0gW3JhbmdlQXR0cmlidXRlIHJhbmdl
VmFsdWVdOworICAgICAgICBOU011dGFibGVTdHJpbmcqIHJhbmdlRGVzY3JpcHRpb24gPSBbTlNN
dXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihyYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0
ZUpTU3RyaW5nUmVmXTsKKyAgICB9CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2Vs
ZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBOU1JhbmdlIHRleHRSYW5nZSA9IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNz
aWJpbGl0eVVJRWxlbWVudFdpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAppbmRleCBmZjExZmI3YmUx
OTkuLmIyMmU2MmVlOGQwMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dFdpbi5jcHAKQEAgLTY1OCw2ICs2NTgsMTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2Ut
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjE0
Mjg3YzZjNTQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDQ2IEBACitUaGlzIHRlc3RzIHRoZSBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2Ug
YXBpLCB3aGljaCByZXR1cm5zIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIGEgc3RhdGljIHRl
eHQgbm9kZSB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBzZWxlY3Rpb24sIGlmIGFueS4K
KworVHJ5aW5nIHJhbmdlOiB0ZXh0MTowIC0gdGV4dDE6NSA6IEFscGhhCitQQVNTOiB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRp
Y1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0
LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFu
Z2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2IC0gdGV4dDE6MTEgOiBCcmF2bworUEFTUzogd2lu
ZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhT
dGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGlj
VGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJs
ZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDI6MiAtIHRleHQyOjkgOiBDaGFybGllCitQQVNT
OiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNT
OiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhT
dGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nl
c3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MjoxMSAtIHRleHQyOjE2IDogRGVsdGEK
K1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQK
K1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNT
OiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3Rl
ZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJh
dm8KK0NoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBl
eHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRp
Y1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
ID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjAgLSB0
ZXh0MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09
PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0
YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYg
LSB0ZXh0Mjo5IDogQnJhdm8KK0NoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50
b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAi
QVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0
aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQWxwaGEgQnJhdm8KK0No
YXJsaWUgRGVsdGEKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
aW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRiODI2YTk2NTQwMAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13
aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBpZD0idGV4dDEiPkFscGhhIEJyYXZvPC9kaXY+
Cis8ZGl2IGlkPSJ0ZXh0MiI+ICBDaGFybGllICBEZWx0YSAgPC9kaXY+CisKKzxwcmUgaWQ9InRy
ZWUiPjwvcHJlPgorCis8c2NyaXB0PgorICAgIHZhciBvdXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGUg
aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0aGUgcmFu
Z2Ugb2YgY2hhcmFjdGVycyBpbiBhIHN0YXRpYyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFydCBvZiB0
aGUgZG9jdW1lbnQgc2VsZWN0aW9uLCBpZiBhbnkuXG5cbiI7CisKKyAgICBhc3luYyBmdW5jdGlv
biBzZWxlY3ROb2RlSWRSYW5nZShub2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQxKSB7
CisgICAgICAgIGxldCByb290ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucm9vdEVsZW1lbnQ7
CisgICAgICAgIGxldCBwcmV2aW91c0FYU2VsZWN0aW9uID0gcm9vdC5zdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2Uocm9vdC5zZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpKQorICAgICAgICBsZXQgc2Vs
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOworICAgICAgICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChub2RlSWQwKS5maXJzdENoaWxkLCBvZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5k
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5vZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOwor
ICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5n
ZSk7CisgICAgICAgIGlmIChyb290LmlzSXNvbGF0ZWRPYmplY3QpIHsKKyAgICAgICAgICAgIGF3
YWl0IHdhaXRGb3IoKCkgPT4gcHJldmlvdXNBWFNlbGVjdGlvbiAhPSByb290LnN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZShyb290LnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3Qobm9kZUlkMCwgb2Zmc2V0MCwg
bm9kZUlkMSwgb2Zmc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkVGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgIGFjY2Vzc2libGVFbGVtZW50SWQsIGV4cGVjdGVkQWNjZXNzaWJs
ZVJhbmdlKSB7CisgICAgICAgIG91dHB1dCArPSBgVHJ5aW5nIHJhbmdlOiAke25vZGVJZDB9OiR7
b2Zmc2V0MH0gLSAke25vZGVJZDF9OiR7b2Zmc2V0MX0gOiAke2V4cGVjdGVkVGV4dH1cbmA7Cisg
ICAgICAgIGF3YWl0IHNlbGVjdE5vZGVJZFJhbmdlKG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEs
IG9mZnNldDEpOworICAgICAgICB3aW5kb3cuZXhwZWN0ZWRUZXh0ID0gZXhwZWN0ZWRUZXh0Owor
ICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCd3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmco
KScsICdleHBlY3RlZFRleHQnKTsKKworICAgICAgICBheEVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoYWNjZXNzaWJsZUVsZW1lbnRJZCk7Cisg
ICAgICAgIGF4U3RhdGljVGV4dCA9IGF4RWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7CisgICAgICAg
IG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGljVGV4dC5yb2xlJywgJyJBWFJvbGU6IEFYU3RhdGlj
VGV4dCInKTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlID0gZXhwZWN0
ZWRBY2Nlc3NpYmxlUmFuZ2UKKyAgICAgICAgb3V0cHV0ICs9IGV4cGVjdCgnYXhTdGF0aWNUZXh0
LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZScsICdleHBlY3RlZEFjY2Vzc2libGVSYW5n
ZScpOworCisgICAgICAgIG91dHB1dCArPSAnXG4nOworICAgIH0KKworICAgIGlmICh3aW5kb3cu
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOworICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIC8v
ZHVtcEFjY2Vzc2liaWxpdHlUcmVlKGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50
LCBudWxsLCAwLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0
KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MScsICd7MCwgNX0nKTsKKyAg
ICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQxJywgNiwgJ3RleHQxJywgMTEsICdCcmF2bycs
ICd0ZXh0MScsICd7NiwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQyJywg
MiwgJ3RleHQyJywgOSwgJ0NoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAg
ICBhd2FpdCBydW5UZXN0KCd0ZXh0MicsIDExLCAndGV4dDInLCAxNiwgJ0RlbHRhJywgJ3RleHQy
JywgJ3s4LCA1fScpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4
dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDEnLCAnezYsIDV9Jyk7CisgICAgICAgICAg
ICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0Mics
IG51bGwpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5
LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBkZWJ1
ZyhvdXRwdXQpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0sIDApOwor
ICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468896</attachid>
            <date>2023-12-05 08:54:28 -0800</date>
            <delta_ts>2023-12-05 11:06:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231205085427.patch</filename>
            <type>text/plain</type>
            <size>22181</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA4ZDEyNDAyNDA4MDZmOTc1MmYxOThhZWE1MzQ1MGUwOGNiMGQzMWNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhpcyB1c2luZyBhIG5ldyBtZXRob2QgdG8g
Y29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uCm9mIHR3byBBWFRleHRNYXJrZXJSYW5nZXMuIEl0J3Mg
ZWZmaWNpZW50IHdoZW4gYm90aCByYW5nZXMgc3BhbiBhIHNpbmdsZQplbGVtZW50IGVhY2ggKGVp
dGhlciBib3RoIGluIHRoZSBzYW1lIGVsZW1lbnQsIG9yIGJvdGggZGlmZmVyZW50IGVsZW1lbnRz
KSwKYW5kIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGlmIG5vdC4KCiogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWw6IEFkZGVkLgoqIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFYVGV4dE1hcmtl
clJhbmdlOjppbnRlcnNlY3Rpb25XaXRoIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgooLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CigtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZV0pOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwOgooV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UpOgoq
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0lzb2xhdGVkT2JqZWN0IGNvbnN0KToKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKToKKiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcDoKKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
KToKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5jcHAgfCAz
MSArKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgg
ICB8ICAyICsKIC4uLi9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gICB8
IDM1ICsrKysrKysrKysKIC4uLi9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmggICB8ICAxICsKIC4uLi9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbCAgICAg
ICB8ICAxICsKIC4uLi9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwICAgICB8
ICA1ICsrCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gICAgICAgICAgfCAg
NSArKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAgICAgIHwgMzAg
KysrKysrKystCiAuLi4vd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwICAgICAgICAg
fCAgNiArKwogLi4uL21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dCAgICAgICAgIHwg
IDEgKwogLi4uL21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0ICAgIHwgIDEg
KwogLi4ucnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0IHwgNDYgKysr
KysrKysrKysrKwogLi4uL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sICAg
IHwgNjQgKysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMjI2IGluc2VydGlv
bnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVk
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2lu
dGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGQ3NTkyMGFlOWExNC4uZjdjMDcx
YmIwNmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1h
cmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIu
Y3BwCkBAIC0yOTksNiArMjk5LDM3IEBAIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IEFY
VGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgeyBt
X3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQsIG1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJPZmZz
ZXQgLSBtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgfSB9OwogfQogCitzdGQ6Om9wdGlv
bmFsPEFYVGV4dE1hcmtlclJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6aW50ZXJzZWN0aW9uV2l0
aChjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fc3Rh
cnQubV9kYXRhLnRyZWVJRCAhPSBtX2VuZC5tX2RhdGEudHJlZUlECisgICAgICAgIHx8IG90aGVy
Lm1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5tX2VuZC5tX2RhdGEudHJlZUlECisgICAg
ICAgIHx8IG1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5tX3N0YXJ0Lm1fZGF0YS50cmVl
SUQpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBGYXN0
IHBhdGg6IGJvdGggcmFuZ2VzIHNwYW4gb25lIG9iamVjdAorICAgIGlmIChtX3N0YXJ0Lm1fZGF0
YS5vYmplY3RJRCA9PSBtX2VuZC5tX2RhdGEub2JqZWN0SUQKKyAgICAgICAgJiYgb3RoZXIubV9z
dGFydC5tX2RhdGEub2JqZWN0SUQgPT0gb3RoZXIubV9lbmQubV9kYXRhLm9iamVjdElEKSB7Cisg
ICAgICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCAhPSBvdGhlci5tX3N0YXJ0Lm1fZGF0
YS5vYmplY3RJRCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzdGQ6Om1heChtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJP
ZmZzZXQsIG90aGVyLm1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgIHVu
c2lnbmVkIGVuZE9mZnNldCA9IHN0ZDo6bWluKG1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQs
IG90aGVyLm1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQpOworCisgICAgICAgIGF1dG8gc3Rh
cnRNYXJrZXIgPSBBWFRleHRNYXJrZXIoeyAoQVhJRCltX3N0YXJ0Lm1fZGF0YS50cmVlSUQsIChB
WElEKW1fc3RhcnQubV9kYXRhLm9iamVjdElELCBudWxscHRyLCBzdGFydE9mZnNldCwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciwgQWZmaW5pdHk6OkRvd25zdHJlYW0sIDAsIHN0
YXJ0T2Zmc2V0IH0pOworICAgICAgICBhdXRvIGVuZE1hcmtlciA9IEFYVGV4dE1hcmtlcih7IChB
WElEKW1fc3RhcnQubV9kYXRhLnRyZWVJRCwgKEFYSUQpbV9zdGFydC5tX2RhdGEub2JqZWN0SUQs
IG51bGxwdHIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciwg
QWZmaW5pdHk6OkRvd25zdHJlYW0sIDAsIGVuZE9mZnNldCB9KTsKKyAgICAgICAgcmV0dXJuIHsg
eyBzdGFydE1hcmtlciwgZW5kTWFya2VyIH0gfTsKKyAgICB9CisKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPHN0ZDo6b3B0aW9uYWw8QVhUZXh0
TWFya2VyUmFuZ2U+PihbdGhpcywgJm90aGVyXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPEFYVGV4dE1h
cmtlclJhbmdlPiB7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uID0gV2ViQ29yZTo6aW50ZXJz
ZWN0aW9uKCp0aGlzLCBvdGhlcik7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb24uaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiB7IEFY
VGV4dE1hcmtlclJhbmdlKGludGVyc2VjdGlvbikgfTsKKyAgICB9KTsKK30KKwogU3RyaW5nIEFY
VGV4dE1hcmtlclJhbmdlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bWFrZVN0cmluZygic3RhcnQ6IHsiLCBtX3N0YXJ0LmRlYnVnRGVzY3JpcHRpb24oKSwgIn1cbmVu
ZDogeyIsIG1fZW5kLmRlYnVnRGVzY3JpcHRpb24oKSwgIn0iKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCmluZGV4IDJmZmFlZWMwMjZmMC4uMjEzNmM0ZmFl
ODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKQEAg
LTE1Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4g
c2ltcGxlUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJhbmdlPiBj
aGFyYWN0ZXJSYW5nZSgpIGNvbnN0OwogCisgICAgc3RkOjpvcHRpb25hbDxBWFRleHRNYXJrZXJS
YW5nZT4gaW50ZXJzZWN0aW9uV2l0aChjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgb3RoZXIpIGNv
bnN0OworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFpblB0cjxBWFRleHRNYXJrZXJSYW5n
ZVJlZj4gcGxhdGZvcm1EYXRhKCkgY29uc3Q7CiAgICAgb3BlcmF0b3IgQVhUZXh0TWFya2VyUmFu
Z2VSZWYoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybURhdGEoKS5hdXRvcmVsZWFzZSgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGY2MDNjM2YwMzViNy4u
NDI2MzMzZGMxZjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpA
QCAtMjkyLDYgKzI5MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5U2VsZWN0VGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUg
QCJBWFNlbGVjdFRleHRXaXRoQ3JpdGVyaWEiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2li
aWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNB
Y2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlIEAiQVhJ
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogLy8gVGV4dCBzZWFyY2gK
IAogI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTZWFyY2hUZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZQpAQCAtMTE1OSw2ICsxMTYzLDExIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2li
aWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgICAgICByZXR1cm4gdGVtcEFycmF5OwogICAgIH0oKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQgc3RhdGljVGV4dEF0dHJzID0gW10geworICAgICAg
ICBhdXRvIHRlbXBBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhBcnJheTphdHRyaWJ1dGVzLmdldCgpLmdldCgpXSk7CisgICAgICAgIFt0ZW1wQXJyYXkgYWRk
T2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJp
YnV0ZV07CisgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CisgICAgfSgpOwogCiAgICAgTlNBcnJh
eSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAKQEAgLTExNjYs
NiArMTE3NSw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICBvYmplY3RBdHRyaWJ1dGVzID0gc2VjdXJlRmllbGRBdHRyaWJ1dGVzLmdldCgpLmdldCgpOwog
ICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKQogICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzLmdldCgpLmdldCgpOworICAgIGVsc2UgaWYgKGJhY2tp
bmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc3Rh
dGljVGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlz
VGV4dENvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRleHRBdHRycy5nZXQo
KS5nZXQoKTsKICAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpbmsoKSkKQEAgLTE2MjYs
NiArMTYzNywxMSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAg
ICAgfQogICAgIH0KIAorICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1N0YXRpY1RleHQoKSkgewor
ICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZV0pCisgICAgICAgICAgICBy
ZXR1cm4gW3NlbGYgaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlXTsKKyAgICB9CisKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVZpc2li
bGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKGJhY2tpbmdPYmplY3Qt
PmlzU2VjdXJlRmllbGQoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMjM1LDYgKzIy
NTEsMjUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgcmV0dXJu
IG5pbDsKIH0KIAorLSAoTlNWYWx1ZSAqKWludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZQor
eworICAgIFJlZlB0cjxBWENvcmVPYmplY3Q+IGJhY2tpbmdPYmplY3QgPSBzZWxmLnVwZGF0ZU9i
amVjdEJhY2tpbmdTdG9yZTsKKyAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBhdXRvIG9iamVjdFJhbmdlID0gYmFja2luZ09iamVjdC0+dGV4dE1hcmtl
clJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGJhY2tpbmdPYmplY3QtPnNlbGVj
dGVkVGV4dE1hcmtlclJhbmdlKCk7CisKKyAgICBhdXRvIGludGVyc2VjdGlvbiA9IHNlbGVjdGlv
blJhbmdlLmludGVyc2VjdGlvbldpdGgob2JqZWN0UmFuZ2UpOworICAgIGlmIChpbnRlcnNlY3Rp
b24uaGFzX3ZhbHVlKCkpIHsKKyAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25DaGFyYWN0ZXJSYW5n
ZSA9IGludGVyc2VjdGlvbi0+Y2hhcmFjdGVyUmFuZ2UoKTsKKyAgICAgICAgaWYgKGludGVyc2Vj
dGlvbkNoYXJhY3RlclJhbmdlLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFJhbmdlOmludGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlLnZhbHVlKCldOwor
ICAgIH0KKworICAgIHJldHVybiBuaWw7Cit9CisKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleQogewogICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlN
YXRoU3Vic2NyaXB0QXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCBj
NjgyZjFkMTk3NTAuLjBmMzhkZjIzODNjMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgK
QEAgLTE3OCw2ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFyYWN0
ZXJzKCkgY29uc3Q7CiAgICAgaW50IGluc2VydGlvblBvaW50TGluZU51bWJlcigpOwogICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzZWxlY3RlZFRleHRSYW5nZSgpOworICAgIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKTsKICAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25zdDsKICAg
ICBib29sIGlzQXRvbWljTGl2ZVJlZ2lvbigpIGNvbnN0OwogICAgIGJvb2wgaXNCdXN5KCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Jp
bmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAppbmRl
eCBkYzdiZmM5ZDFjMTIuLmE1MTAyZTVmN2E2OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmlk
bAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCkBAIC02MCw2ICs2MCw3IEBACiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFyYWN0ZXJzOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBsb25nIGluc2VydGlvblBvaW50TGluZU51bWJlcjsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHNlbGVjdGVkVGV4dFJhbmdlOworICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZTsKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHRJbnB1dE1hcmtlZFJhbmdlOwogCiAgICAgRE9NU3Ry
aW5nIHN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShET01TdHJpbmcgYXR0cik7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKaW5kZXgg
NGVmZThkMDA1ZDM5Li4wODkyNDNlNDdmNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKQEAgLTE0MjYsNiArMTQyNiwxMSBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFu
Z2UoKQogICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHJhbmdlKS5sZWFrUmVm
KCk7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKQoreworICAgIHJldHVybiBudWxscHRy
OworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdl
KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX2VsZW1l
bnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OkludGVyZmFjZTo6VGV4dCkpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dElPUy5tbQppbmRleCAyZDU2Njc4M2Q5MTAuLmI3MDgwMDVjNTJjYyAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC05ODYsNiArOTg2LDExIEBAIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRS
YW5nZSgpCiAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsK
IH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFu
Z2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggYjU1MzJmNGFm
MGJhLi5mNDQ5OTZkYjI5ZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dE1hYy5tbQpAQCAtODksNiArODksMTAgQEAKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VGV4dElu
cHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJrZWRUZXh0
TWFya2VyUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlJbnRlcnNlY3Rp
b25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5SW50
ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlIEAiQVhJbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWROb3RpZmlj
YXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwgdm9pZCog
Y29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxpdHlBZGRp
dGlvbnMpCkBAIC0xMzQsNyArMTM4LDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNFcXVhbChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBvdGhlckVsZW1lbnQpCiAjaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNJc29sYXRlZE9iamVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFttX2VsZW1lbnQgaXNJ
c29sYXRlZE9iamVjdF07CisgICAgQk9PTCB2YWx1ZTsKKworICAgIEJFR0lOX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlz
LCAmdmFsdWVdIHsKKyAgICAgICAgdmFsdWUgPSBbbV9lbGVtZW50IGlzSXNvbGF0ZWRPYmplY3Rd
OworICAgIH0pOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVybiB2YWx1
ZTsKIH0KICNlbmRpZgogCkBAIC0xNTQyLDEzICsxNTU0LDI3IEBAIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiAgICAg
YXV0byBpbmRleFJhbmdlID0gYXR0cmlidXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRU
ZXh0UmFuZ2VBdHRyaWJ1dGUpOwogICAgIGlmIChpbmRleFJhbmdlKQogICAgICAgICByYW5nZSA9
IFtpbmRleFJhbmdlIHJhbmdlVmFsdWVdOwotICAgIE5TTXV0YWJsZVN0cmluZyogcmFuZ2VEZXNj
cmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInslbHUsICVsdX0i
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sb2NhdGlvbiksIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxlbmd0aCldOworICAgIE5TU3RyaW5nICpyYW5nZURlc2Ny
aXB0aW9uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKICAgICByZXR1cm4gW3JhbmdlRGVzY3JpcHRpb24gY3Jl
YXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIAogICAgIHJldHVy
biBudWxscHRyOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBhdXRvIHJhbmdlQXR0cmlidXRlID0gYXR0cmlidXRlVmFs
dWUoTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRl
KTsKKyAgICBpZiAocmFuZ2VBdHRyaWJ1dGUpIHsKKyAgICAgICAgTlNSYW5nZSByYW5nZSA9IFty
YW5nZUF0dHJpYnV0ZSByYW5nZVZhbHVlXTsKKyAgICAgICAgTlNNdXRhYmxlU3RyaW5nKiByYW5n
ZURlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVsdSwg
JWx1fSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxvY2F0aW9uKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubGVuZ3RoKV07CisgICAgICAgIHJldHVybiBbcmFu
Z2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CisgICAgfQorICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKKworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgTlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01ha2VSYW5nZShsb2Nh
dGlvbiwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5j
cHAKaW5kZXggZmYxMWZiN2JlMTk5Li5iMjJlNjJlZThkMDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRX
aW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2luL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCkBAIC02NTgsNiArNjU4LDEyIEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5n
ZSgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQsIHVu
c2lnbmVkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGQ0OTEwMWU4NGVmZi4uN2JlODljYWNlODk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dApA
QCAtMjksNiArMjksNyBAQCBBWERPTUNsYXNzTGlzdDogPGFycmF5IG9mIHNpemUgMD4KIEFYRm9j
dXNhYmxlQW5jZXN0b3I6IDxBWFN0YXRpY1RleHQ+CiBBWEVkaXRhYmxlQW5jZXN0b3I6IChudWxs
KQogQVhIaWdoZXN0RWRpdGFibGVBbmNlc3RvcjogKG51bGwpCitBWEludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZTogKG51bGwpCiBBWEVsZW1lbnRCdXN5OiAwCiBBWFBhdGg6IChudWxsKQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcm5hbC1saW5r
LWFuY2hvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50
ZXJuYWwtbGluay1hbmNob3JzLWV4cGVjdGVkLnR4dAppbmRleCAzZmI0NTY2OGVlYzIuLjZmZTUy
ZGJlY2JlOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJu
YWwtbGluay1hbmNob3JzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0CkBAIC0zMCw2ICszMCw3
IEBAIEFYRE9NQ2xhc3NMaXN0OiA8YXJyYXkgb2Ygc2l6ZSAwPgogQVhGb2N1c2FibGVBbmNlc3Rv
cjogPEFYU3RhdGljVGV4dD4KIEFYRWRpdGFibGVBbmNlc3RvcjogKG51bGwpCiBBWEhpZ2hlc3RF
ZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkKK0FYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
OiAobnVsbCkKIEFYRWxlbWVudEJ1c3k6IDAKIEFYUGF0aDogKG51bGwpCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlv
bi1yYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRl
cnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjE0Mjg3YzZjNTQyCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0
aW9uLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGlzIHRlc3RzIHRoZSBp
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgYXBpLCB3aGljaCByZXR1cm5zIHRoZSByYW5n
ZSBvZiBjaGFyYWN0ZXJzIGluIGEgc3RhdGljIHRleHQgbm9kZSB0aGF0IGFyZSBwYXJ0IG9mIHRo
ZSBkb2N1bWVudCBzZWxlY3Rpb24sIGlmIGFueS4KKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTowIC0g
dGV4dDE6NSA6IEFscGhhCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9
PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhT
dGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MTo2
IC0gdGV4dDE6MTEgOiBCcmF2bworUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5n
KCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6
IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0
aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4
dDI6MiAtIHRleHQyOjkgOiBDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9T
dHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFY
Um9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhT
ZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdl
OiB0ZXh0MjoxMSAtIHRleHQyOjE2IDogRGVsdGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09
PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9u
V2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcg
cmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJhdm8KK0NoYXJsaWUKK1BBU1M6IHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGlj
VGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQu
aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5n
ZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjAgLSB0ZXh0MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRv
dy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3Rh
dGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1Rl
eHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVS
YW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJhdm8KK0NoYXJsaWUK
K1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQK
K1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNT
OiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3Rl
ZEFjY2Vzc2libGVSYW5nZQorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorQWxwaGEgQnJhdm8KK0NoYXJsaWUgRGVsdGEKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9u
LXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24t
d2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLmRiODI2YTk2NTQwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCkBA
IC0wLDAgKzEsNjQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRp
diBpZD0idGV4dDEiPkFscGhhIEJyYXZvPC9kaXY+Cis8ZGl2IGlkPSJ0ZXh0MiI+ICBDaGFybGll
ICBEZWx0YSAgPC9kaXY+CisKKzxwcmUgaWQ9InRyZWUiPjwvcHJlPgorCis8c2NyaXB0PgorICAg
IHZhciBvdXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGUgaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhIHN0YXRp
YyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLCBpZiBh
bnkuXG5cbiI7CisKKyAgICBhc3luYyBmdW5jdGlvbiBzZWxlY3ROb2RlSWRSYW5nZShub2RlSWQw
LCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQxKSB7CisgICAgICAgIGxldCByb290ID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIucm9vdEVsZW1lbnQ7CisgICAgICAgIGxldCBwcmV2aW91c0FYU2Vs
ZWN0aW9uID0gcm9vdC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uocm9vdC5zZWxlY3RlZFRleHRN
YXJrZXJSYW5nZSgpKQorICAgICAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
ICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICByYW5n
ZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChub2RlSWQwKS5maXJzdENoaWxkLCBv
ZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5v
ZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOworICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2Vz
KCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmIChyb290LmlzSXNv
bGF0ZWRPYmplY3QpIHsKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gcHJldmlvdXNB
WFNlbGVjdGlvbiAhPSByb290LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShyb290LnNlbGVjdGVk
VGV4dE1hcmtlclJhbmdlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGZ1bmN0
aW9uIHJ1blRlc3Qobm9kZUlkMCwgb2Zmc2V0MCwgbm9kZUlkMSwgb2Zmc2V0MSwKKyAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2li
bGVFbGVtZW50SWQsIGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlKSB7CisgICAgICAgIG91dHB1dCAr
PSBgVHJ5aW5nIHJhbmdlOiAke25vZGVJZDB9OiR7b2Zmc2V0MH0gLSAke25vZGVJZDF9OiR7b2Zm
c2V0MX0gOiAke2V4cGVjdGVkVGV4dH1cbmA7CisgICAgICAgIGF3YWl0IHNlbGVjdE5vZGVJZFJh
bmdlKG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEsIG9mZnNldDEpOworICAgICAgICB3aW5kb3cu
ZXhwZWN0ZWRUZXh0ID0gZXhwZWN0ZWRUZXh0OworICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCd3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKScsICdleHBlY3RlZFRleHQnKTsKKworICAg
ICAgICBheEVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQoYWNjZXNzaWJsZUVsZW1lbnRJZCk7CisgICAgICAgIGF4U3RhdGljVGV4dCA9IGF4RWxl
bWVudC5jaGlsZEF0SW5kZXgoMCk7CisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGlj
VGV4dC5yb2xlJywgJyJBWFJvbGU6IEFYU3RhdGljVGV4dCInKTsKKyAgICAgICAgd2luZG93LmV4
cGVjdGVkQWNjZXNzaWJsZVJhbmdlID0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKyAgICAgICAg
b3V0cHV0ICs9IGV4cGVjdCgnYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZScsICdleHBlY3RlZEFjY2Vzc2libGVSYW5nZScpOworCisgICAgICAgIG91dHB1dCArPSAn
XG4nOworICAgIH0KKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsK
KyAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICBzZXRUaW1lb3V0
KGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIC8vZHVtcEFjY2Vzc2liaWxpdHlUcmVlKGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LCBudWxsLCAwLCB0cnVlLCBmYWxzZSwgdHJ1
ZSk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdB
bHBoYScsICd0ZXh0MScsICd7MCwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3Rl
eHQxJywgNiwgJ3RleHQxJywgMTEsICdCcmF2bycsICd0ZXh0MScsICd7NiwgNX0nKTsKKyAgICAg
ICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQyJywgMiwgJ3RleHQyJywgOSwgJ0NoYXJsaWUnLCAn
dGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MicsIDEx
LCAndGV4dDInLCAxNiwgJ0RlbHRhJywgJ3RleHQyJywgJ3s4LCA1fScpOworICAgICAgICAgICAg
YXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAn
dGV4dDEnLCAnezYsIDV9Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAs
ICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MicsIG51bGwpOworICAgICAgICAgICAgYXdhaXQg
cnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDIn
LCAnezAsIDd9Jyk7CisgICAgICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgICAgIH0sIDApOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468901</attachid>
            <date>2023-12-05 11:06:43 -0800</date>
            <delta_ts>2023-12-05 13:25:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231205110642.patch</filename>
            <type>text/plain</type>
            <size>23204</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA5ZWZiMjQ0YTYxZGM5MTY1YzE3YzEwNjQwZTMwMDNhNmQ0NjIxZWFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhpcyB1c2luZyBhIG5ldyBtZXRob2QgdG8g
Y29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uCm9mIHR3byBBWFRleHRNYXJrZXJSYW5nZXMuIEl0J3Mg
ZWZmaWNpZW50IHdoZW4gYm90aCByYW5nZXMgc3BhbiBhIHNpbmdsZQplbGVtZW50IGVhY2ggKGVp
dGhlciBib3RoIGluIHRoZSBzYW1lIGVsZW1lbnQsIG9yIGJvdGggZGlmZmVyZW50IGVsZW1lbnRz
KSwKYW5kIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGlmIG5vdC4KCiogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvYm91bmRzLWZvci1yYW5nZS1leHBlY3RlZC50eHQ6Ciog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJuYWwtbGluay1hbmNob3JzLWV4cGVj
dGVkLnR4dDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0
aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbDogQWRk
ZWQuCiogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFY
VGV4dE1hcmtlclJhbmdlOjppbnRlcnNlY3Rpb25XaXRoIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgooLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6Cigt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZV0pOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3Bw
OgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9u
UmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRJT1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCBjb25zdCk6CihXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKToKKiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2lu
LmNwcDoKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlKToKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtl
ci5jcHAgfCAzMSArKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0
TWFya2VyLmggICB8ICAyICsKIC4uLi9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0gICB8IDM1ICsrKysrKysrKysKIC4uLi9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmggICB8ICAxICsKIC4uLi9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmlkbCAgICAgICB8ICAxICsKIC4uLi9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGku
Y3BwICAgICB8ICA1ICsrCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gICAg
ICAgICAgfCAgNSArKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAgICAg
ICAgIHwgMzAgKysrKysrKystCiAuLi4vd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3Bw
ICAgICAgICAgfCAgNiArKwogLi4uL21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dCAg
ICAgICAgIHwgIDEgKwogLi4uL21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0
ICAgIHwgIDEgKwogLi4ucnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0
IHwgNDYgKysrKysrKysrKysrKwogLi4uL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS5odG1sICAgIHwgNjQgKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIHwgIDMgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjI5IGlu
c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLWV4
cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGQ3NTkyMGFlOWExNC4u
ZjdjMDcxYmIwNmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
VGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRN
YXJrZXIuY3BwCkBAIC0yOTksNiArMjk5LDM3IEBAIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFu
Z2U+IEFYVGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHsgeyBtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQsIG1fZW5kLm1fZGF0YS5jaGFyYWN0
ZXJPZmZzZXQgLSBtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgfSB9OwogfQogCitzdGQ6
Om9wdGlvbmFsPEFYVGV4dE1hcmtlclJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6aW50ZXJzZWN0
aW9uV2l0aChjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KG1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBtX2VuZC5tX2RhdGEudHJlZUlECisgICAgICAgIHx8
IG90aGVyLm1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5tX2VuZC5tX2RhdGEudHJlZUlE
CisgICAgICAgIHx8IG1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5tX3N0YXJ0Lm1fZGF0
YS50cmVlSUQpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAv
LyBGYXN0IHBhdGg6IGJvdGggcmFuZ2VzIHNwYW4gb25lIG9iamVjdAorICAgIGlmIChtX3N0YXJ0
Lm1fZGF0YS5vYmplY3RJRCA9PSBtX2VuZC5tX2RhdGEub2JqZWN0SUQKKyAgICAgICAgJiYgb3Ro
ZXIubV9zdGFydC5tX2RhdGEub2JqZWN0SUQgPT0gb3RoZXIubV9lbmQubV9kYXRhLm9iamVjdElE
KSB7CisgICAgICAgIGlmIChtX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCAhPSBvdGhlci5tX3N0YXJ0
Lm1fZGF0YS5vYmplY3RJRCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzdGQ6Om1heChtX3N0YXJ0Lm1fZGF0YS5jaGFy
YWN0ZXJPZmZzZXQsIG90aGVyLm1fc3RhcnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7CisgICAg
ICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0ZDo6bWluKG1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJP
ZmZzZXQsIG90aGVyLm1fZW5kLm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQpOworCisgICAgICAgIGF1
dG8gc3RhcnRNYXJrZXIgPSBBWFRleHRNYXJrZXIoeyAoQVhJRCltX3N0YXJ0Lm1fZGF0YS50cmVl
SUQsIChBWElEKW1fc3RhcnQubV9kYXRhLm9iamVjdElELCBudWxscHRyLCBzdGFydE9mZnNldCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciwgQWZmaW5pdHk6OkRvd25zdHJlYW0s
IDAsIHN0YXJ0T2Zmc2V0IH0pOworICAgICAgICBhdXRvIGVuZE1hcmtlciA9IEFYVGV4dE1hcmtl
cih7IChBWElEKW1fc3RhcnQubV9kYXRhLnRyZWVJRCwgKEFYSUQpbV9zdGFydC5tX2RhdGEub2Jq
ZWN0SUQsIG51bGxwdHIsIGVuZE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciwgQWZmaW5pdHk6OkRvd25zdHJlYW0sIDAsIGVuZE9mZnNldCB9KTsKKyAgICAgICAgcmV0
dXJuIHsgeyBzdGFydE1hcmtlciwgZW5kTWFya2VyIH0gfTsKKyAgICB9CisKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPHN0ZDo6b3B0aW9uYWw8
QVhUZXh0TWFya2VyUmFuZ2U+PihbdGhpcywgJm90aGVyXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPEFY
VGV4dE1hcmtlclJhbmdlPiB7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uID0gV2ViQ29yZTo6
aW50ZXJzZWN0aW9uKCp0aGlzLCBvdGhlcik7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb24uaXNO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHJldHVy
biB7IEFYVGV4dE1hcmtlclJhbmdlKGludGVyc2VjdGlvbikgfTsKKyAgICB9KTsKK30KKwogU3Ry
aW5nIEFYVGV4dE1hcmtlclJhbmdlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygic3RhcnQ6IHsiLCBtX3N0YXJ0LmRlYnVnRGVzY3JpcHRpb24oKSwg
In1cbmVuZDogeyIsIG1fZW5kLmRlYnVnRGVzY3JpcHRpb24oKSwgIn0iKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oCmluZGV4IDJmZmFlZWMwMjZmMC4uMjEz
NmM0ZmFlODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2Vy
LmgKQEAgLTE1Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVS
YW5nZT4gc2ltcGxlUmFuZ2UoKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPENoYXJhY3RlclJh
bmdlPiBjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0OwogCisgICAgc3RkOjpvcHRpb25hbDxBWFRleHRN
YXJrZXJSYW5nZT4gaW50ZXJzZWN0aW9uV2l0aChjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgb3Ro
ZXIpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFpblB0cjxBWFRleHRNYXJr
ZXJSYW5nZVJlZj4gcGxhdGZvcm1EYXRhKCkgY29uc3Q7CiAgICAgb3BlcmF0b3IgQVhUZXh0TWFy
a2VyUmFuZ2VSZWYoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybURhdGEoKS5hdXRvcmVsZWFzZSgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGY2MDNjM2Yw
MzViNy4uNDI2MzMzZGMxZjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQpAQCAtMjkyLDYgKzI5MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5U2VsZWN0VGV4dFdpdGhDcml0ZXJpYVBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGUgQCJBWFNlbGVjdFRleHRXaXRoQ3JpdGVyaWEiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0Fj
Y2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUKKyNkZWZp
bmUgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRl
IEAiQVhJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogLy8gVGV4dCBz
ZWFyY2gKIAogI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlTZWFyY2hUZXh0V2l0aENyaXRlcmlhUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZQpAQCAtMTE1OSw2ICsxMTYzLDExIEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0Fj
Y2Vzc2liaWxpdHlVUkxBdHRyaWJ1dGVdOwogICAgICAgICByZXR1cm4gdGVtcEFycmF5OwogICAg
IH0oKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQgc3RhdGljVGV4dEF0dHJzID0gW10gewor
ICAgICAgICBhdXRvIHRlbXBBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzLmdldCgpLmdldCgpXSk7CisgICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZUF0dHJpYnV0ZV07CisgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CisgICAgfSgpOwogCiAgICAg
TlNBcnJheSAqb2JqZWN0QXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAKQEAg
LTExNjYsNiArMTE3NSw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gc2VjdXJlRmllbGRBdHRyaWJ1dGVzLmdldCgpLmdl
dCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzV2ViQXJlYSgpKQogICAgICAgICBv
YmplY3RBdHRyaWJ1dGVzID0gd2ViQXJlYUF0dHJzLmdldCgpLmdldCgpOworICAgIGVsc2UgaWYg
KGJhY2tpbmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKQorICAgICAgICBvYmplY3RBdHRyaWJ1dGVz
ID0gc3RhdGljVGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdPYmpl
Y3QtPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgb2JqZWN0QXR0cmlidXRlcyA9IHRleHRBdHRy
cy5nZXQoKS5nZXQoKTsKICAgICBlbHNlIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpbmsoKSkKQEAg
LTE2MjYsNiArMTYzNywxMSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc1N0YXRpY1RleHQo
KSkgeworICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZV0pCisgICAgICAg
ICAgICByZXR1cm4gW3NlbGYgaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlXTsKKyAgICB9
CisKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgaWYgKGJhY2tpbmdP
YmplY3QtPmlzU2VjdXJlRmllbGQoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMjM1
LDYgKzIyNTEsMjUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
cmV0dXJuIG5pbDsKIH0KIAorLSAoTlNWYWx1ZSAqKWludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZQoreworICAgIFJlZlB0cjxBWENvcmVPYmplY3Q+IGJhY2tpbmdPYmplY3QgPSBzZWxmLnVw
ZGF0ZU9iamVjdEJhY2tpbmdTdG9yZTsKKyAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBhdXRvIG9iamVjdFJhbmdlID0gYmFja2luZ09iamVjdC0+dGV4
dE1hcmtlclJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGJhY2tpbmdPYmplY3Qt
PnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CisKKyAgICBhdXRvIGludGVyc2VjdGlvbiA9IHNl
bGVjdGlvblJhbmdlLmludGVyc2VjdGlvbldpdGgob2JqZWN0UmFuZ2UpOworICAgIGlmIChpbnRl
cnNlY3Rpb24uaGFzX3ZhbHVlKCkpIHsKKyAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25DaGFyYWN0
ZXJSYW5nZSA9IGludGVyc2VjdGlvbi0+Y2hhcmFjdGVyUmFuZ2UoKTsKKyAgICAgICAgaWYgKGlu
dGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmludGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlLnZhbHVl
KCldOworICAgIH0KKworICAgIHJldHVybiBuaWw7Cit9CisKIC0gKE5TU3RyaW5nICopYWNjZXNz
aWJpbGl0eVBsYXRmb3JtTWF0aFN1YnNjcmlwdEtleQogewogICAgIHJldHVybiBOU0FjY2Vzc2li
aWxpdHlNYXRoU3Vic2NyaXB0QXR0cmlidXRlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApp
bmRleCBjNjgyZjFkMTk3NTAuLjBmMzhkZjIzODNjMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmgKQEAgLTE3OCw2ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFyYWN0ZXJzKCkgY29uc3Q7CiAgICAgaW50IGluc2VydGlvblBvaW50TGluZU51bWJlcigpOwog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzZWxlY3RlZFRleHRSYW5nZSgpOworICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKTsK
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdGV4dElucHV0TWFya2VkUmFuZ2UoKSBjb25z
dDsKICAgICBib29sIGlzQXRvbWljTGl2ZVJlZ2lvbigpIGNvbnN0OwogICAgIGJvb2wgaXNCdXN5
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmlk
bAppbmRleCBkYzdiZmM5ZDFjMTIuLmE1MTAyZTVmN2E2OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCkBAIC02MCw2ICs2MCw3IEBACiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFyYWN0ZXJzOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBsb25nIGluc2VydGlvblBvaW50TGluZU51bWJlcjsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNlbGVjdGVkVGV4dFJhbmdlOworICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHRJbnB1dE1hcmtlZFJhbmdlOwogCiAgICAg
RE9NU3RyaW5nIHN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVWYWx1ZShET01TdHJpbmcgYXR0
cik7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAK
aW5kZXggNGVmZThkMDA1ZDM5Li4wODkyNDNlNDdmNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
c3BpLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3Bp
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKQEAgLTE0MjYsNiArMTQyNiwxMSBAQCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRU
ZXh0UmFuZ2UoKQogICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKHJhbmdlKS5s
ZWFrUmVmKCk7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UoKQoreworICAgIHJldHVybiBu
dWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4
dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFt
X2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudElPUy5tbQppbmRleCAyZDU2Njc4M2Q5MTAuLmI3MDgwMDVjNTJjYyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudElPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCkBAIC05ODYsNiArOTg2LDExIEBA
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3Rl
ZFRleHRSYW5nZSgpCiAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5n
UmVmXTsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0TWFy
a2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopCiB7CiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggYjU1
MzJmNGFmMGJhLi5mNDQ5OTZkYjI5ZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQpAQCAtODksNiArODksMTAgQEAKICNkZWZpbmUgTlNBY2Nlc3NpYmlsaXR5
VGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlIEAiQVhUZXh0SW5wdXRNYXJr
ZWRUZXh0TWFya2VyUmFuZ2UiCiAjZW5kaWYKIAorI2lmbmRlZiBOU0FjY2Vzc2liaWxpdHlJbnRl
cnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUKKyNkZWZpbmUgTlNBY2Nlc3NpYmls
aXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlIEAiQVhJbnRlcnNlY3Rp
b25XaXRoU2VsZWN0aW9uUmFuZ2UiCisjZW5kaWYKKwogdHlwZWRlZiB2b2lkICgqQVhQb3N0ZWRO
b3RpZmljYXRpb25DYWxsYmFjaykoaWQgZWxlbWVudCwgTlNTdHJpbmcqIG5vdGlmaWNhdGlvbiwg
dm9pZCogY29udGV4dCk7CiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYktpdEFjY2Vzc2liaWxp
dHlBZGRpdGlvbnMpCkBAIC0xMzQsNyArMTM4LDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNFcXVhbChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBvdGhlckVsZW1lbnQpCiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKIGJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFttX2VsZW1l
bnQgaXNJc29sYXRlZE9iamVjdF07CisgICAgQk9PTCB2YWx1ZTsKKworICAgIEJFR0lOX0FYX09C
SkNfRVhDRVBUSU9OUworICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0
KFt0aGlzLCAmdmFsdWVdIHsKKyAgICAgICAgdmFsdWUgPSBbbV9lbGVtZW50IGlzSXNvbGF0ZWRP
YmplY3RdOworICAgIH0pOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVy
biB2YWx1ZTsKIH0KICNlbmRpZgogCkBAIC0xNTQyLDEzICsxNTU0LDI3IEBAIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgp
CiAgICAgYXV0byBpbmRleFJhbmdlID0gYXR0cmlidXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5U2Vs
ZWN0ZWRUZXh0UmFuZ2VBdHRyaWJ1dGUpOwogICAgIGlmIChpbmRleFJhbmdlKQogICAgICAgICBy
YW5nZSA9IFtpbmRleFJhbmdlIHJhbmdlVmFsdWVdOwotICAgIE5TTXV0YWJsZVN0cmluZyogcmFu
Z2VEZXNjcmlwdGlvbiA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInslbHUs
ICVsdX0iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sb2NhdGlvbiksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxlbmd0aCldOworICAgIE5TU3RyaW5nICpyYW5n
ZURlc2NyaXB0aW9uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKICAgICByZXR1cm4gW3JhbmdlRGVzY3JpcHRp
b24gY3JlYXRlSlNTdHJpbmdSZWZdOwogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIAogICAg
IHJldHVybiBudWxscHRyOwogfQogCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICBC
RUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBhdXRvIHJhbmdlQXR0cmlidXRlID0gYXR0cmli
dXRlVmFsdWUoTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0
cmlidXRlKTsKKyAgICBpZiAocmFuZ2VBdHRyaWJ1dGUpIHsKKyAgICAgICAgTlNSYW5nZSByYW5n
ZSA9IFtyYW5nZUF0dHJpYnV0ZSByYW5nZVZhbHVlXTsKKyAgICAgICAgTlNNdXRhYmxlU3RyaW5n
KiByYW5nZURlc2NyaXB0aW9uID0gW05TTXV0YWJsZVN0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
eyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxvY2F0aW9uKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubGVuZ3RoKV07CisgICAgICAgIHJldHVy
biBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CisgICAgfQorICAgIEVORF9B
WF9PQkpDX0VYQ0VQVElPTlMKKworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgTlNSYW5nZSB0ZXh0UmFuZ2UgPSBOU01ha2VSYW5n
ZShsb2NhdGlvbiwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dFdpbi5jcHAKaW5kZXggZmYxMWZiN2JlMTk5Li5iMjJlNjJlZThkMDIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvd2luL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRXaW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
d2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4uY3BwCkBAIC02NTgsNiArNjU4LDEyIEBAIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRl
eHRSYW5nZSgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFu
Z2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWdu
ZWQsIHVuc2lnbmVkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQu
dHh0CmluZGV4IGQ0OTEwMWU4NGVmZi4uN2JlODljYWNlODk2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVk
LnR4dApAQCAtMjksNiArMjksNyBAQCBBWERPTUNsYXNzTGlzdDogPGFycmF5IG9mIHNpemUgMD4K
IEFYRm9jdXNhYmxlQW5jZXN0b3I6IDxBWFN0YXRpY1RleHQ+CiBBWEVkaXRhYmxlQW5jZXN0b3I6
IChudWxsKQogQVhIaWdoZXN0RWRpdGFibGVBbmNlc3RvcjogKG51bGwpCitBWEludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZTogKG51bGwpCiBBWEVsZW1lbnRCdXN5OiAwCiBBWFBhdGg6IChu
dWxsKQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcm5h
bC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9t
YWMvaW50ZXJuYWwtbGluay1hbmNob3JzLWV4cGVjdGVkLnR4dAppbmRleCAzZmI0NTY2OGVlYzIu
LjZmZTUyZGJlY2JlOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
aW50ZXJuYWwtbGluay1hbmNob3JzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0CkBAIC0zMCw2
ICszMCw3IEBAIEFYRE9NQ2xhc3NMaXN0OiA8YXJyYXkgb2Ygc2l6ZSAwPgogQVhGb2N1c2FibGVB
bmNlc3RvcjogPEFYU3RhdGljVGV4dD4KIEFYRWRpdGFibGVBbmNlc3RvcjogKG51bGwpCiBBWEhp
Z2hlc3RFZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkKK0FYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlv
blJhbmdlOiAobnVsbCkKIEFYRWxlbWVudEJ1c3k6IDAKIEFYUGF0aDogKG51bGwpCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNl
bGVjdGlvbi1yYW5nZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjE0Mjg3YzZjNTQyCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgt
c2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGlzIHRlc3Rz
IHRoZSBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgYXBpLCB3aGljaCByZXR1cm5zIHRo
ZSByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIGEgc3RhdGljIHRleHQgbm9kZSB0aGF0IGFyZSBwYXJ0
IG9mIHRoZSBkb2N1bWVudCBzZWxlY3Rpb24sIGlmIGFueS4KKworVHJ5aW5nIHJhbmdlOiB0ZXh0
MTowIC0gdGV4dDE6NSA6IEFscGhhCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJp
bmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9s
ZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxl
Y3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0
ZXh0MTo2IC0gdGV4dDE6MTEgOiBCcmF2bworUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRv
U3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJB
WFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5n
ZTogdGV4dDI6MiAtIHRleHQyOjkgOiBDaGFybGllCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9
PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5n
IHJhbmdlOiB0ZXh0MjoxMSAtIHRleHQyOjE2IDogRGVsdGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5y
b2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitU
cnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJhdm8KK0NoYXJsaWUKK1BBU1M6IHdp
bmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4
U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRp
Y1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2li
bGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjAgLSB0ZXh0MTo1IDogQWxwaGEKK1BBU1M6
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6
IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0
YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vz
c2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0Mjo5IDogQnJhdm8KK0No
YXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3Rl
ZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQi
CitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBl
eHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorQWxwaGEgQnJhdm8KK0NoYXJsaWUgRGVsdGEKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2Vs
ZWN0aW9uLXJhbmdlLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNl
Y3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmRiODI2YTk2NTQwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5o
dG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KworPGRpdiBpZD0idGV4dDEiPkFscGhhIEJyYXZvPC9kaXY+Cis8ZGl2IGlkPSJ0ZXh0MiI+ICBD
aGFybGllICBEZWx0YSAgPC9kaXY+CisKKzxwcmUgaWQ9InRyZWUiPjwvcHJlPgorCis8c2NyaXB0
PgorICAgIHZhciBvdXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGUgaW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlIGFwaSwgd2hpY2ggcmV0dXJucyB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBh
IHN0YXRpYyB0ZXh0IG5vZGUgdGhhdCBhcmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9u
LCBpZiBhbnkuXG5cbiI7CisKKyAgICBhc3luYyBmdW5jdGlvbiBzZWxlY3ROb2RlSWRSYW5nZShu
b2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQxKSB7CisgICAgICAgIGxldCByb290ID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucm9vdEVsZW1lbnQ7CisgICAgICAgIGxldCBwcmV2aW91
c0FYU2VsZWN0aW9uID0gcm9vdC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uocm9vdC5zZWxlY3Rl
ZFRleHRNYXJrZXJSYW5nZSgpKQorICAgICAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlv
bigpOworICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAg
ICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChub2RlSWQwKS5maXJzdENo
aWxkLCBvZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKG5vZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOworICAgICAgICBzZWwucmVtb3ZlQWxs
UmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIGlmIChyb290
LmlzSXNvbGF0ZWRPYmplY3QpIHsKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gcHJl
dmlvdXNBWFNlbGVjdGlvbiAhPSByb290LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShyb290LnNl
bGVjdGVkVGV4dE1hcmtlclJhbmdlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzeW5j
IGZ1bmN0aW9uIHJ1blRlc3Qobm9kZUlkMCwgb2Zmc2V0MCwgbm9kZUlkMSwgb2Zmc2V0MSwKKyAg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIGFj
Y2Vzc2libGVFbGVtZW50SWQsIGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlKSB7CisgICAgICAgIG91
dHB1dCArPSBgVHJ5aW5nIHJhbmdlOiAke25vZGVJZDB9OiR7b2Zmc2V0MH0gLSAke25vZGVJZDF9
OiR7b2Zmc2V0MX0gOiAke2V4cGVjdGVkVGV4dH1cbmA7CisgICAgICAgIGF3YWl0IHNlbGVjdE5v
ZGVJZFJhbmdlKG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEsIG9mZnNldDEpOworICAgICAgICB3
aW5kb3cuZXhwZWN0ZWRUZXh0ID0gZXhwZWN0ZWRUZXh0OworICAgICAgICBvdXRwdXQgKz0gZXhw
ZWN0KCd3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKScsICdleHBlY3RlZFRleHQnKTsK
KworICAgICAgICBheEVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxl
RWxlbWVudEJ5SWQoYWNjZXNzaWJsZUVsZW1lbnRJZCk7CisgICAgICAgIGF4U3RhdGljVGV4dCA9
IGF4RWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7CisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4
U3RhdGljVGV4dC5yb2xlJywgJyJBWFJvbGU6IEFYU3RhdGljVGV4dCInKTsKKyAgICAgICAgd2lu
ZG93LmV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlID0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKyAg
ICAgICAgb3V0cHV0ICs9IGV4cGVjdCgnYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxl
Y3Rpb25SYW5nZScsICdleHBlY3RlZEFjY2Vzc2libGVSYW5nZScpOworCisgICAgICAgIG91dHB1
dCArPSAnXG4nOworICAgIH0KKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpIHsKKyAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICBzZXRU
aW1lb3V0KGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIC8vZHVtcEFjY2Vzc2liaWxpdHlUcmVl
KGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJvb3RFbGVtZW50LCBudWxsLCAwLCB0cnVlLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScs
IDUsICdBbHBoYScsICd0ZXh0MScsICd7MCwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1blRl
c3QoJ3RleHQxJywgNiwgJ3RleHQxJywgMTEsICdCcmF2bycsICd0ZXh0MScsICd7NiwgNX0nKTsK
KyAgICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQyJywgMiwgJ3RleHQyJywgOSwgJ0NoYXJs
aWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0
MicsIDExLCAndGV4dDInLCAxNiwgJ0RlbHRhJywgJ3RleHQyJywgJ3s4LCA1fScpOworICAgICAg
ICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJs
aWUnLCAndGV4dDEnLCAnezYsIDV9Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0
MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MicsIG51bGwpOworICAgICAgICAgICAg
YXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAn
dGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAgICAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0sIDApOworICAgIH0KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IDBjMGU3MjhhYmNjYy4uMDk3NTc4YzQyODVlIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC04NDQsNiArODQ0LDkgQEAg
YWNjZXNzaWJpbGl0eS9tYWMvbGF6eS1zcGVsbGNoZWNraW5nLmh0bWwgWyBTa2lwIF0KIGFjY2Vz
c2liaWxpdHkvbWFjL3NwZWxsY2hlY2std2l0aC12b2ljZW92ZXIuaHRtbCBbIFNraXAgXQogYWNj
ZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1yYW5nZS13aXRoLXVub3JkZXJlZC1t
YXJrZXJzLmh0bWwKIAorIyBOZXcgQVBJIG5vdCBzdXBwb3J0ZWQgaW4gV0sxCithY2Nlc3NpYmls
aXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbCBbIFNraXAgXQor
CiAjIERPTSBwYXN0ZSBhY2Nlc3MgcmVxdWVzdHMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBXZWJL
aXQxLgogZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLWNoYW5nZS1kYXRhLXdoaWxl
LXJlYWRpbmcuaHRtbCBbIFNraXAgXQogZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJk
LWRvLW5vdC1yZWFkLXRleHQtZnJvbS1wbGF0Zm9ybS1pZi10ZXh0LWNoYW5nZXMuaHRtbCBbIFNr
aXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468902</attachid>
            <date>2023-12-05 13:25:15 -0800</date>
            <delta_ts>2023-12-05 14:21:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231205132514.patch</filename>
            <type>text/plain</type>
            <size>22994</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSA3MDA4ZDdkNzVmZTBmYmIyMDNiMDRhZTRjNzMwOWMxMWU4NTM0MjBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhpcyB1c2luZyBhIG5ldyBtZXRob2QgdG8g
Y29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uCm9mIHR3byBBWFRleHRNYXJrZXJSYW5nZXMuIEl0J3Mg
ZWZmaWNpZW50IHdoZW4gYm90aCByYW5nZXMgc3BhbiBhIHNpbmdsZQplbGVtZW50IGVhY2ggKGVp
dGhlciBib3RoIGluIHRoZSBzYW1lIGVsZW1lbnQsIG9yIGJvdGggZGlmZmVyZW50IGVsZW1lbnRz
KSwKYW5kIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGlmIG5vdC4KCiogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvYm91bmRzLWZvci1yYW5nZS1leHBlY3RlZC50eHQ6Ciog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJuYWwtbGluay1hbmNob3JzLWV4cGVj
dGVkLnR4dDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0
aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbDogQWRk
ZWQuCiogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFY
VGV4dE1hcmtlclJhbmdlOjppbnRlcnNlY3Rpb25XaXRoIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgooLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6Cigt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZV0pOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3Bw
OgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9u
UmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRJT1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCBjb25zdCk6CihXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKToKKiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2lu
LmNwcDoKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlKToKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtl
ci5jcHAgfCAzMSArKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4
dE1hcmtlci5oICAgfCAgMiArCiAuLi4vbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tICAgfCAzNSArKysrKysrKysrKwogLi4uL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCAgIHwgIDEgKwogLi4uL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsICAgICAgIHwgIDEgKwogLi4uL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNw
aS5jcHAgICAgIHwgIDUgKysKIC4uLi9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAg
ICAgICAgICB8ICA1ICsrCiAuLi4vbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gICAg
ICAgICAgfCAyOSArKysrKysrKy0KIC4uLi93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5j
cHAgICAgICAgICB8ICA2ICsrCiAuLi4vbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0
ICAgICAgICAgfCAgMSArCiAuLi4vbWFjL2ludGVybmFsLWxpbmstYW5jaG9ycy1leHBlY3RlZC50
eHQgICAgfCAgMSArCiAuLi5yc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS1leHBlY3RlZC50
eHQgfCA0NiArKysrKysrKysrKysrKwogLi4uL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1y
YW5nZS5odG1sICAgIHwgNjEgKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIHwgIDMgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjI1
IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdl
LWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuY3BwCmluZGV4IGQ3NTkyMGFlOWEx
NC4uZmYwNTIzNzI2Y2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYVGV4dE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRl
eHRNYXJrZXIuY3BwCkBAIC0yOTksNiArMjk5LDM3IEBAIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVy
UmFuZ2U+IEFYVGV4dE1hcmtlclJhbmdlOjpjaGFyYWN0ZXJSYW5nZSgpIGNvbnN0CiAgICAgcmV0
dXJuIHsgeyBtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQsIG1fZW5kLm1fZGF0YS5jaGFy
YWN0ZXJPZmZzZXQgLSBtX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJPZmZzZXQgfSB9OwogfQogCitz
dGQ6Om9wdGlvbmFsPEFYVGV4dE1hcmtlclJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6aW50ZXJz
ZWN0aW9uV2l0aChjb25zdCBBWFRleHRNYXJrZXJSYW5nZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKFVOTElLRUxZKG1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBtX2VuZC5tX2RhdGEudHJlZUlE
CisgICAgICAgIHx8IG90aGVyLm1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5tX2VuZC5t
X2RhdGEudHJlZUlECisgICAgICAgIHx8IG1fc3RhcnQubV9kYXRhLnRyZWVJRCAhPSBvdGhlci5t
X3N0YXJ0Lm1fZGF0YS50cmVlSUQpKSB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgLy8gRmFzdCBwYXRoOiBib3RoIHJhbmdlcyBzcGFuIG9uZSBvYmplY3QKKyAg
ICBpZiAobV9zdGFydC5tX2RhdGEub2JqZWN0SUQgPT0gbV9lbmQubV9kYXRhLm9iamVjdElECisg
ICAgICAgICYmIG90aGVyLm1fc3RhcnQubV9kYXRhLm9iamVjdElEID09IG90aGVyLm1fZW5kLm1f
ZGF0YS5vYmplY3RJRCkgeworICAgICAgICBpZiAobV9zdGFydC5tX2RhdGEub2JqZWN0SUQgIT0g
b3RoZXIubV9zdGFydC5tX2RhdGEub2JqZWN0SUQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc3RkOjptYXgobV9zdGFy
dC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0LCBvdGhlci5tX3N0YXJ0Lm1fZGF0YS5jaGFyYWN0ZXJP
ZmZzZXQpOworICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGQ6Om1pbihtX2VuZC5tX2Rh
dGEuY2hhcmFjdGVyT2Zmc2V0LCBvdGhlci5tX2VuZC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0KTsK
KworICAgICAgICBhdXRvIHN0YXJ0TWFya2VyID0gQVhUZXh0TWFya2VyKHsgbV9zdGFydC50cmVl
SUQoKSwgbV9zdGFydC5vYmplY3RJRCgpLCBudWxscHRyLCBzdGFydE9mZnNldCwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciwgQWZmaW5pdHk6OkRvd25zdHJlYW0sIDAsIHN0YXJ0
T2Zmc2V0IH0pOworICAgICAgICBhdXRvIGVuZE1hcmtlciA9IEFYVGV4dE1hcmtlcih7IG1fc3Rh
cnQudHJlZUlEKCksIG1fc3RhcnQub2JqZWN0SUQoKSwgbnVsbHB0ciwgZW5kT2Zmc2V0LCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yLCBBZmZpbml0eTo6RG93bnN0cmVhbSwgMCwg
ZW5kT2Zmc2V0IH0pOworICAgICAgICByZXR1cm4geyB7IHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIg
fSB9OworICAgIH0KKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8c3RkOjpvcHRpb25hbDxBWFRleHRNYXJrZXJSYW5nZT4+KFt0aGlzLCAmb3Ro
ZXJdICgpIC0+IHN0ZDo6b3B0aW9uYWw8QVhUZXh0TWFya2VyUmFuZ2U+IHsKKyAgICAgICAgYXV0
byBpbnRlcnNlY3Rpb24gPSBXZWJDb3JlOjppbnRlcnNlY3Rpb24oKnRoaXMsIG90aGVyKTsKKyAg
ICAgICAgaWYgKGludGVyc2VjdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgQVhUZXh0TWFya2VyUmFuZ2UoaW50ZXJzZWN0
aW9uKSB9OworICAgIH0pOworfQorCiBTdHJpbmcgQVhUZXh0TWFya2VyUmFuZ2U6OmRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCJzdGFydDogeyIsIG1f
c3RhcnQuZGVidWdEZXNjcmlwdGlvbigpLCAifVxuZW5kOiB7IiwgbV9lbmQuZGVidWdEZXNjcmlw
dGlvbigpLCAifSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WFRleHRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2Vy
LmgKaW5kZXggMmZmYWVlYzAyNmYwLi4xN2U5ZmMwZGFiOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoK
ICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzaW1wbGVSYW5nZSgpIGNvbnN0OwogICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IGNoYXJhY3RlclJhbmdlKCkgY29uc3Q7CiAK
KyAgICBzdGQ6Om9wdGlvbmFsPEFYVGV4dE1hcmtlclJhbmdlPiBpbnRlcnNlY3Rpb25XaXRoKGNv
bnN0IEFYVGV4dE1hcmtlclJhbmdlJikgY29uc3Q7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAg
UmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9ybURhdGEoKSBjb25zdDsKICAg
ICBvcGVyYXRvciBBWFRleHRNYXJrZXJSYW5nZVJlZigpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3Jt
RGF0YSgpLmF1dG9yZWxlYXNlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0KaW5kZXggZjYwM2MzZjAzNWI3Li40MjYzMzNkYzFmMDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0yOTIsNiArMjkyLDEwIEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlTZWxlY3RUZXh0V2l0aENyaXRl
cmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYU2VsZWN0VGV4dFdpdGhDcml0ZXJpYSIKICNl
bmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2Vs
ZWN0aW9uUmFuZ2VBdHRyaWJ1dGUgQCJBWEludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSIK
KyNlbmRpZgorCiAvLyBUZXh0IHNlYXJjaAogCiAjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eVNlYXJj
aFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRlCkBAIC0xMTU5LDYgKzExNjMs
MTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIFt0ZW1w
QXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJpYnV0ZV07CiAgICAgICAgIHJl
dHVybiB0ZW1wQXJyYXk7CiAgICAgfSgpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZCBzdGF0
aWNUZXh0QXR0cnMgPSBbXSB7CisgICAgICAgIGF1dG8gdGVtcEFycmF5ID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCld
KTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0
aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAgcmV0dXJuIHRlbXBBcnJh
eTsKKyAgICB9KCk7CiAKICAgICBOU0FycmF5ICpvYmplY3RBdHRyaWJ1dGVzID0gYXR0cmlidXRl
cy5nZXQoKS5nZXQoKTsKIApAQCAtMTE2Niw2ICsxMTc1LDggQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzZWN1cmVGaWVs
ZEF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNX
ZWJBcmVhKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3ZWJBcmVhQXR0cnMuZ2V0KCku
Z2V0KCk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNTdGF0aWNUZXh0KCkpCisgICAg
ICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzdGF0aWNUZXh0QXR0cnMuZ2V0KCkuZ2V0KCk7CiAgICAg
ZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICBvYmplY3RB
dHRyaWJ1dGVzID0gdGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAgIGVsc2UgaWYgKGJhY2tpbmdP
YmplY3QtPmlzTGluaygpKQpAQCAtMTYyNiw2ICsxNjM3LDExIEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKGJhY2tpbmdP
YmplY3QtPmlzU3RhdGljVGV4dCgpKSB7CisgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdl
QXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBpbnRlcnNlY3Rpb25XaXRoU2Vs
ZWN0aW9uUmFuZ2VdOworICAgIH0KKwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkgewog
ICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTZWN1cmVGaWVsZCgpKQogICAgICAgICAgICAg
cmV0dXJuIG5pbDsKQEAgLTIyMzUsNiArMjI1MSwyNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICByZXR1cm4gbmlsOwogfQogCistIChOU1ZhbHVlICopaW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlCit7CisgICAgUmVmUHRyPEFYQ29yZU9iamVjdD4gYmFj
a2luZ09iamVjdCA9IHNlbGYudXBkYXRlT2JqZWN0QmFja2luZ1N0b3JlOworICAgIGlmICghYmFj
a2luZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGF1dG8gb2JqZWN0UmFuZ2Ug
PSBiYWNraW5nT2JqZWN0LT50ZXh0TWFya2VyUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvblJh
bmdlID0gYmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKKworICAgIGF1
dG8gaW50ZXJzZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2UuaW50ZXJzZWN0aW9uV2l0aChvYmplY3RS
YW5nZSk7CisgICAgaWYgKGludGVyc2VjdGlvbi5oYXNfdmFsdWUoKSkgeworICAgICAgICBhdXRv
IGludGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlID0gaW50ZXJzZWN0aW9uLT5jaGFyYWN0ZXJSYW5n
ZSgpOworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uQ2hhcmFjdGVyUmFuZ2UuaGFzX3ZhbHVlKCkp
CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6aW50ZXJzZWN0aW9u
Q2hhcmFjdGVyUmFuZ2UudmFsdWUoKV07CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKwog
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRoU3Vic2NyaXB0S2V5CiB7CiAg
ICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRBdHRyaWJ1dGU7CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IGM2ODJmMWQxOTc1MC4uMGYzOGRmMjM4M2MzIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMTc4LDYgKzE3OCw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdDsKICAgICBpbnQgaW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyKCk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNlbGVjdGVk
VGV4dFJhbmdlKCk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGludGVyc2VjdGlvbldp
dGhTZWxlY3Rpb25SYW5nZSgpOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0SW5w
dXRNYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBdG9taWNMaXZlUmVnaW9uKCkgY29u
c3Q7CiAgICAgYm9vbCBpc0J1c3koKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5p
ZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaWRsCmluZGV4IGRjN2JmYzlkMWMxMi4uZWY4MWEzYTg5MTczIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKQEAgLTYw
LDYgKzYwLDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBudW1iZXJP
ZkNoYXJhY3RlcnM7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2VsZWN0ZWRUZXh0
UmFuZ2U7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBpbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2U7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0ZXh0SW5w
dXRNYXJrZWRSYW5nZTsKIAogICAgIERPTVN0cmluZyBzdHJpbmdEZXNjcmlwdGlvbk9mQXR0cmli
dXRlVmFsdWUoRE9NU3RyaW5nIGF0dHIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50QXRzcGkuY3BwCmluZGV4IDRlZmU4ZDAwNWQzOS4uMDg5MjQzZTQ3ZjYyIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCkBA
IC0xNDI2LDYgKzE0MjYsMTEgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICByZXR1cm4gT3BhcXVlSlNTdHJp
bmc6OnRyeUNyZWF0ZShyYW5nZSkubGVha1JlZigpOwogfQogCitKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoKQogewogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5kZXggMmQ1NjY3ODNkOTEwLi5i
NzA4MDA1YzUyY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5t
bQpAQCAtOTg2LDYgKzk4NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHJldHVybiBbcmFuZ2VEZXNj
cmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2Uo
KQoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UqKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TWFjLm1tCmluZGV4IGI1NTMyZjRhZjBiYS4uY2VmNTFkYmJjZWUzIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAgLTg5LDYgKzg5LDEwIEBACiAj
ZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRleHRNYXJrZXJSYW5nZUF0dHJp
YnV0ZSBAIkFYVGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdlIgogI2VuZGlmCiAKKyNpZm5k
ZWYgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRl
CisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0
dHJpYnV0ZSBAIkFYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlIgorI2VuZGlmCisKIHR5
cGVkZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spKGlkIGVsZW1lbnQsIE5T
U3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpOwogCiBAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQpAQCAtMTM0LDcgKzEzOCwxNSBAQCBi
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCogb3RoZXJFbGVtZW50KQogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUp
CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSXNvbGF0ZWRPYmplY3QoKSBjb25zdAog
ewotICAgIHJldHVybiBbbV9lbGVtZW50IGlzSXNvbGF0ZWRPYmplY3RdOworICAgIEJPT0wgdmFs
dWU7CisKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBzX2NvbnRyb2xsZXItPmV4
ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJnZhbHVlXSB7CisgICAgICAgIHZhbHVlID0g
W21fZWxlbWVudCBpc0lzb2xhdGVkT2JqZWN0XTsKKyAgICB9KTsKKyAgICBFTkRfQVhfT0JKQ19F
WENFUFRJT05TCisKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAjZW5kaWYKIApAQCAtMTU0MiwxMyAr
MTU1NCwyNiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIGF1dG8gaW5kZXhSYW5nZSA9IGF0dHJpYnV0ZVZh
bHVlKE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlKTsKICAgICBpZiAo
aW5kZXhSYW5nZSkKICAgICAgICAgcmFuZ2UgPSBbaW5kZXhSYW5nZSByYW5nZVZhbHVlXTsKLSAg
ICBOU011dGFibGVTdHJpbmcqIHJhbmdlRGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
cmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgp
XTsKKyAgICBOU1N0cmluZyAqcmFuZ2VEZXNjcmlwdGlvbiA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAieyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJhbmdlLmxv
Y2F0aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubGVuZ3RoKV07CiAgICAg
cmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsKICAgICBFTkRfQVhf
T0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlvbldpdGhTZWxl
Y3Rpb25SYW5nZSgpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWYgKGF1
dG8gcmFuZ2VBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZShOU0FjY2Vzc2liaWxpdHlJbnRlcnNl
Y3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUpKSB7CisgICAgICAgIE5TUmFuZ2UgcmFu
Z2UgPSBbcmFuZ2VBdHRyaWJ1dGUgcmFuZ2VWYWx1ZV07CisgICAgICAgIE5TU3RyaW5nKiByYW5n
ZURlc2NyaXB0aW9uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKKyAgICAgICAgcmV0dXJuIFtyYW5nZURlc2Ny
aXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsKKyAgICB9CisgICAgRU5EX0FYX09CSkNfRVhDRVBU
SU9OUworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBOU1JhbmdlIHRleHRSYW5nZSA9IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBs
ZW5ndGgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2luLmNwcAppbmRl
eCBmZjExZmI3YmUxOTkuLmIyMmU2MmVlOGQwMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJp
bGl0eVVJRWxlbWVudFdpbi5jcHAKQEAgLTY1OCw2ICs2NTgsMTIgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvYm91bmRzLWZvci1yYW5nZS1leHBlY3RlZC50eHQKaW5kZXggZDQ5
MTAxZTg0ZWZmLi43YmU4OWNhY2U4OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0yOSw2
ICsyOSw3IEBAIEFYRE9NQ2xhc3NMaXN0OiA8YXJyYXkgb2Ygc2l6ZSAwPgogQVhGb2N1c2FibGVB
bmNlc3RvcjogPEFYU3RhdGljVGV4dD4KIEFYRWRpdGFibGVBbmNlc3RvcjogKG51bGwpCiBBWEhp
Z2hlc3RFZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkKK0FYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlv
blJhbmdlOiAobnVsbCkKIEFYRWxlbWVudEJ1c3k6IDAKIEFYUGF0aDogKG51bGwpCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVybmFsLWxpbmstYW5jaG9y
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcm5hbC1s
aW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0CmluZGV4IDNmYjQ1NjY4ZWVjMi4uNmZlNTJkYmVjYmU5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcm5hbC1saW5r
LWFuY2hvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2ludGVybmFsLWxpbmstYW5jaG9ycy1leHBlY3RlZC50eHQKQEAgLTMwLDYgKzMwLDcgQEAgQVhE
T01DbGFzc0xpc3Q6IDxhcnJheSBvZiBzaXplIDA+CiBBWEZvY3VzYWJsZUFuY2VzdG9yOiA8QVhT
dGF0aWNUZXh0PgogQVhFZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkKIEFYSGlnaGVzdEVkaXRhYmxl
QW5jZXN0b3I6IChudWxsKQorQVhJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2U6IChudWxs
KQogQVhFbGVtZW50QnVzeTogMAogQVhQYXRoOiAobnVsbCkKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlv
bi13aXRoLXNlbGVjdGlvbi1yYW5nZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi4yMTQyODdjNmM1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFu
Z2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoaXMgdGVzdHMgdGhlIGludGVyc2Vj
dGlvbldpdGhTZWxlY3Rpb25SYW5nZSBhcGksIHdoaWNoIHJldHVybnMgdGhlIHJhbmdlIG9mIGNo
YXJhY3RlcnMgaW4gYSBzdGF0aWMgdGV4dCBub2RlIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGRvY3Vt
ZW50IHNlbGVjdGlvbiwgaWYgYW55LgorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjAgLSB0ZXh0MTo1
IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpID09PSBleHBl
Y3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1Rl
eHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09
PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQxOjYgLSB0ZXh0
MToxMSA6IEJyYXZvCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0g
ZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9PT0gIkFYUm9sZTogQVhTdGF0
aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5n
ZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5nIHJhbmdlOiB0ZXh0MjoyIC0g
dGV4dDI6OSA6IENoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygp
ID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAiQVhSb2xlOiBB
WFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlv
blJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFuZ2U6IHRleHQy
OjExIC0gdGV4dDI6MTYgOiBEZWx0YQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3Ry
aW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJv
bGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2Vs
ZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTog
dGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFTUzogd2luZG93LmdldFNlbGVj
dGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJv
bGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNl
Y3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKK1Ry
eWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQorUEFTUzogd2luZG93LmdldFNl
bGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0
LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRl
cnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisK
K1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFTUzog
d2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzog
YXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3Rh
dGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNz
aWJsZVJhbmdlCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCitBbHBoYSBCcmF2bworQ2hhcmxpZSBEZWx0YQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2Uu
aHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNl
bGVjdGlvbi1yYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMDZmNjVmNDY1MmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJhbmdlLmh0bWwKQEAgLTAsMCAr
MSw2MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvYWNj
ZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPSJ0
ZXh0MSI+QWxwaGEgQnJhdm88L2Rpdj4KKzxkaXYgaWQ9InRleHQyIj4gIENoYXJsaWUgIERlbHRh
ICA8L2Rpdj4KKworPHByZSBpZD0idHJlZSI+PC9wcmU+CisKKzxzY3JpcHQ+CisgICAgdmFyIG91
dHB1dCA9ICJUaGlzIHRlc3RzIHRoZSBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgYXBp
LCB3aGljaCByZXR1cm5zIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIGEgc3RhdGljIHRleHQg
bm9kZSB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBzZWxlY3Rpb24sIGlmIGFueS5cblxu
IjsKKworICAgIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdE5vZGVJZFJhbmdlKG5vZGVJZDAsIG9mZnNl
dDAsIG5vZGVJZDEsIG9mZnNldDEpIHsKKyAgICAgICAgbGV0IHJvb3QgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5yb290RWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7CisgICAgICAgIGxldCBwcmV2
aW91c0FYU2VsZWN0aW9uID0gcm9vdC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uocm9vdC5zZWxl
Y3RlZFRleHRNYXJrZXJSYW5nZSgpKQorICAgICAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVj
dGlvbigpOworICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAg
ICAgICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChub2RlSWQwKS5maXJz
dENoaWxkLCBvZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKG5vZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOworICAgICAgICBzZWwucmVtb3Zl
QWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIGF3YWl0
IHdhaXRGb3IoKCkgPT4gcHJldmlvdXNBWFNlbGVjdGlvbiAhPSByb290LnN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZShyb290LnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCkpKTsKKyAgICB9CisKKyAg
ICBhc3luYyBmdW5jdGlvbiBydW5UZXN0KG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEsIG9mZnNl
dDEsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFRleHQsCisgICAgICAgICAgICAgICAg
ICAgICBhY2Nlc3NpYmxlRWxlbWVudElkLCBleHBlY3RlZEFjY2Vzc2libGVSYW5nZSkgeworICAg
ICAgICBvdXRwdXQgKz0gYFRyeWluZyByYW5nZTogJHtub2RlSWQwfToke29mZnNldDB9IC0gJHtu
b2RlSWQxfToke29mZnNldDF9IDogJHtleHBlY3RlZFRleHR9XG5gOworICAgICAgICBhd2FpdCBz
ZWxlY3ROb2RlSWRSYW5nZShub2RlSWQwLCBvZmZzZXQwLCBub2RlSWQxLCBvZmZzZXQxKTsKKyAg
ICAgICAgd2luZG93LmV4cGVjdGVkVGV4dCA9IGV4cGVjdGVkVGV4dDsKKyAgICAgICAgb3V0cHV0
ICs9IGV4cGVjdCgnd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCknLCAnZXhwZWN0ZWRU
ZXh0Jyk7CisKKyAgICAgICAgYXhFbGVtZW50ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKGFjY2Vzc2libGVFbGVtZW50SWQpOworICAgICAgICBheFN0YXRp
Y1RleHQgPSBheEVsZW1lbnQuY2hpbGRBdEluZGV4KDApOworICAgICAgICBvdXRwdXQgKz0gZXhw
ZWN0KCdheFN0YXRpY1RleHQucm9sZScsICciQVhSb2xlOiBBWFN0YXRpY1RleHQiJyk7CisgICAg
ICAgIHdpbmRvdy5leHBlY3RlZEFjY2Vzc2libGVSYW5nZSA9IGV4cGVjdGVkQWNjZXNzaWJsZVJh
bmdlCisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25X
aXRoU2VsZWN0aW9uUmFuZ2UnLCAnZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UnKTsKKworICAgICAg
ICBvdXRwdXQgKz0gJ1xuJzsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAg
ICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0
ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MScsICd7MCwgNX0nKTsKKyAgICAg
ICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQxJywgNiwgJ3RleHQxJywgMTEsICdCcmF2bycsICd0
ZXh0MScsICd7NiwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQyJywgMiwg
J3RleHQyJywgOSwgJ0NoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBh
d2FpdCBydW5UZXN0KCd0ZXh0MicsIDExLCAndGV4dDInLCAxNiwgJ0RlbHRhJywgJ3RleHQyJywg
J3s4LCA1fScpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDIn
LCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDEnLCAnezYsIDV9Jyk7CisgICAgICAgICAgICBh
d2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MicsIG51
bGwpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEnLCA2LCAndGV4dDInLCA5LCAn
QnJhdm9cbkNoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7CisgICAgICAgICAgICBkZWJ1Zyhv
dXRwdXQpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0sIDApOworICAg
IH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBjMGU3MjhhYmNjYy4uMDk3NTc4YzQyODVl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBA
IC04NDQsNiArODQ0LDkgQEAgYWNjZXNzaWJpbGl0eS9tYWMvbGF6eS1zcGVsbGNoZWNraW5nLmh0
bWwgWyBTa2lwIF0KIGFjY2Vzc2liaWxpdHkvbWFjL3NwZWxsY2hlY2std2l0aC12b2ljZW92ZXIu
aHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1yYW5n
ZS13aXRoLXVub3JkZXJlZC1tYXJrZXJzLmh0bWwKIAorIyBOZXcgQVBJIG5vdCBzdXBwb3J0ZWQg
aW4gV0sxCithY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFu
Z2UuaHRtbCBbIFNraXAgXQorCiAjIERPTSBwYXN0ZSBhY2Nlc3MgcmVxdWVzdHMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQxLgogZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJk
LWNoYW5nZS1kYXRhLXdoaWxlLXJlYWRpbmcuaHRtbCBbIFNraXAgXQogZWRpdGluZy9hc3luYy1j
bGlwYm9hcmQvY2xpcGJvYXJkLWRvLW5vdC1yZWFkLXRleHQtZnJvbS1wbGF0Zm9ybS1pZi10ZXh0
LWNoYW5nZXMuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468903</attachid>
            <date>2023-12-05 14:21:45 -0800</date>
            <delta_ts>2023-12-06 11:26:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-265683-20231205142144.patch</filename>
            <type>text/plain</type>
            <size>23069</size>
            <attacher name="Dominic Mazzoni">dm_mazzoni</attacher>
            
              <data encoding="base64">RnJvbSAwMTI0YzIyOGQ1YWRmZjUwMThhZjkyYmU0Zjk5ODUwOTE1N2QxOGM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEb21pbmljIE1henpvbmkgPGRtX21henpvbmlAYXBwbGUuY29t
PgpEYXRlOiBGcmksIDEgRGVjIDIwMjMgMTA6NTc6MTAgLTA4MDAKU3ViamVjdDogW1BBVENIXSBB
WDogYWRkIE1hYyBBUEkgdG8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgc2VsZWN0
ZWQKIHRleHQgcmFuZ2UgYW5kIGFuIGVsZW1lbnQKCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjU2ODMKcmRhcjovLzExOTA1NDE0MwoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpPbmUgb2YgdGhlIHRoaW5ncyBwcmV2ZW50aW5nIFZvaWNlT3ZlciBmcm9tIGJl
aW5nIGFibGUgdG8gdXNlIFdlYktpdAplbnRpcmVseSBvZmYgdGhlIG1haW4gdGhyZWFkIGlzIHRo
YXQgaXQgd2FudHMgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlCnJhbmdlIG9mIGEgc3RhdGljIHRl
eHQgZWxlbWVudCB0aGF0J3MgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2VsZWN0aW9uLAppZiBhbnku
CgpEb2luZyB0aGF0IHVzaW5nIHRleHQgcmFuZ2VzIGlzIGNvbXBsZXggYW5kIGhhcmQgZm9yIFdl
YktpdCB0bwpvcHRpbWl6ZS4gQSBuZXcgQVBJIHRoYXQgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlv
biBkaXJlY3RseSBjYW4gYmUKY29tcHV0ZWQgZWZmaWNpZW50bHkgdXNpbmcgdGhlIGlzb2xhdGVk
IHRyZWUuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhpcyB1c2luZyBhIG5ldyBtZXRob2QgdG8g
Y29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uCm9mIHR3byBBWFRleHRNYXJrZXJSYW5nZXMuIEl0J3Mg
ZWZmaWNpZW50IHdoZW4gYm90aCByYW5nZXMgc3BhbiBhIHNpbmdsZQplbGVtZW50IGVhY2ggKGVp
dGhlciBib3RoIGluIHRoZSBzYW1lIGVsZW1lbnQsIG9yIGJvdGggZGlmZmVyZW50IGVsZW1lbnRz
KSwKYW5kIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGlmIG5vdC4KCiogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvYm91bmRzLWZvci1yYW5nZS1leHBlY3RlZC50eHQ6Ciog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJuYWwtbGluay1hbmNob3JzLWV4cGVj
dGVkLnR4dDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0
aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbDogQWRk
ZWQuCiogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcDoKKFdlYkNvcmU6OkFY
VGV4dE1hcmtlclJhbmdlOjppbnRlcnNlY3Rpb25XaXRoIGNvbnN0KToKKiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtlci5oOgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgooLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6Cigt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25S
YW5nZV0pOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CiogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3Bw
OgooV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9u
UmFuZ2UpOgoqIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRJT1MubW06CihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSk6CiogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToKKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJc29sYXRlZE9iamVjdCBjb25zdCk6CihXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlKToKKiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50V2lu
LmNwcDoKKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlKToKLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYVGV4dE1hcmtl
ci5jcHAgfCAzNCArKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRl
eHRNYXJrZXIuaCAgIHwgIDIgKwogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbSAgIHwgMzUgKysrKysrKysrKysKIC4uLi9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmggICB8ICAxICsKIC4uLi9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmlkbCAgICAgICB8ICAxICsKIC4uLi9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRz
cGkuY3BwICAgICB8ICA1ICsrCiAuLi4vaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0g
ICAgICAgICAgfCAgNSArKwogLi4uL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICAg
ICAgICAgIHwgMjkgKysrKysrKystCiAuLi4vd2luL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRXaW4u
Y3BwICAgICAgICAgfCAgNiArKwogLi4uL21hYy9ib3VuZHMtZm9yLXJhbmdlLWV4cGVjdGVkLnR4
dCAgICAgICAgIHwgIDEgKwogLi4uL21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQu
dHh0ICAgIHwgIDEgKwogLi4ucnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQu
dHh0IHwgNDYgKysrKysrKysrKysrKysKIC4uLi9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24t
cmFuZ2UuaHRtbCAgICB8IDYxICsrKysrKysrKysrKysrKysrKysKIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyB8ICAzICsKIDE0IGZpbGVzIGNoYW5nZWQsIDIy
OCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5n
ZS1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9pbnRlcnNlY3Rpb24td2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmNwcAppbmRleCBkNzU5MjBhZTlh
MTQuLjlhZDZhYmY5M2FhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWFRleHRNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhU
ZXh0TWFya2VyLmNwcApAQCAtMjk5LDYgKzI5OSw0MCBAQCBzdGQ6Om9wdGlvbmFsPENoYXJhY3Rl
clJhbmdlPiBBWFRleHRNYXJrZXJSYW5nZTo6Y2hhcmFjdGVyUmFuZ2UoKSBjb25zdAogICAgIHJl
dHVybiB7IHsgbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0LCBtX2VuZC5tX2RhdGEuY2hh
cmFjdGVyT2Zmc2V0IC0gbV9zdGFydC5tX2RhdGEuY2hhcmFjdGVyT2Zmc2V0IH0gfTsKIH0KIAor
c3RkOjpvcHRpb25hbDxBWFRleHRNYXJrZXJSYW5nZT4gQVhUZXh0TWFya2VyUmFuZ2U6OmludGVy
c2VjdGlvbldpdGgoY29uc3QgQVhUZXh0TWFya2VyUmFuZ2UmIG90aGVyKSBjb25zdAoreworICAg
IGlmIChVTkxJS0VMWShtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gbV9lbmQubV9kYXRhLnRyZWVJ
RAorICAgICAgICB8fCBvdGhlci5tX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gb3RoZXIubV9lbmQu
bV9kYXRhLnRyZWVJRAorICAgICAgICB8fCBtX3N0YXJ0Lm1fZGF0YS50cmVlSUQgIT0gb3RoZXIu
bV9zdGFydC5tX2RhdGEudHJlZUlEKSkgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIC8vIEZhc3QgcGF0aDogYm90aCByYW5nZXMgc3BhbiBvbmUgb2JqZWN0Cisg
ICAgaWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEID09IG1fZW5kLm1fZGF0YS5vYmplY3RJRAor
ICAgICAgICAmJiBvdGhlci5tX3N0YXJ0Lm1fZGF0YS5vYmplY3RJRCA9PSBvdGhlci5tX2VuZC5t
X2RhdGEub2JqZWN0SUQpIHsKKyAgICAgICAgaWYgKG1fc3RhcnQubV9kYXRhLm9iamVjdElEICE9
IG90aGVyLm1fc3RhcnQubV9kYXRhLm9iamVjdElEKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHN0ZDo6bWF4KG1fc3Rh
cnQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCwgb3RoZXIubV9zdGFydC5tX2RhdGEuY2hhcmFjdGVy
T2Zmc2V0KTsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjptaW4obV9lbmQubV9k
YXRhLmNoYXJhY3Rlck9mZnNldCwgb3RoZXIubV9lbmQubV9kYXRhLmNoYXJhY3Rlck9mZnNldCk7
CisKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0KQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHN0YXJ0TWFya2VyID0gQVhUZXh0TWFy
a2VyKHsgbV9zdGFydC50cmVlSUQoKSwgbV9zdGFydC5vYmplY3RJRCgpLCBudWxscHRyLCBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciwgQWZmaW5pdHk6OkRv
d25zdHJlYW0sIDAsIHN0YXJ0T2Zmc2V0IH0pOworICAgICAgICBhdXRvIGVuZE1hcmtlciA9IEFY
VGV4dE1hcmtlcih7IG1fc3RhcnQudHJlZUlEKCksIG1fc3RhcnQub2JqZWN0SUQoKSwgbnVsbHB0
ciwgZW5kT2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yLCBBZmZpbml0
eTo6RG93bnN0cmVhbSwgMCwgZW5kT2Zmc2V0IH0pOworICAgICAgICByZXR1cm4geyB7IHN0YXJ0
TWFya2VyLCBlbmRNYXJrZXIgfSB9OworICAgIH0KKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8c3RkOjpvcHRpb25hbDxBWFRleHRNYXJrZXJS
YW5nZT4+KFt0aGlzLCAmb3RoZXJdICgpIC0+IHN0ZDo6b3B0aW9uYWw8QVhUZXh0TWFya2VyUmFu
Z2U+IHsKKyAgICAgICAgYXV0byBpbnRlcnNlY3Rpb24gPSBXZWJDb3JlOjppbnRlcnNlY3Rpb24o
KnRoaXMsIG90aGVyKTsKKyAgICAgICAgaWYgKGludGVyc2VjdGlvbi5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgcmV0dXJuIHsgQVhUZXh0TWFy
a2VyUmFuZ2UoaW50ZXJzZWN0aW9uKSB9OworICAgIH0pOworfQorCiBTdHJpbmcgQVhUZXh0TWFy
a2VyUmFuZ2U6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJzdGFydDogeyIsIG1fc3RhcnQuZGVidWdEZXNjcmlwdGlvbigpLCAifVxuZW5kOiB7Iiwg
bV9lbmQuZGVidWdEZXNjcmlwdGlvbigpLCAifSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhUZXh0TWFya2VyLmgKaW5kZXggMmZmYWVlYzAyNmYwLi4xN2U5ZmMwZGFiOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhUZXh0TWFya2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWFRleHRNYXJrZXIuaApAQCAtMTU2LDYg
KzE1Niw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzaW1wbGVS
YW5nZSgpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8Q2hhcmFjdGVyUmFuZ2U+IGNoYXJhY3Rl
clJhbmdlKCkgY29uc3Q7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEFYVGV4dE1hcmtlclJhbmdlPiBp
bnRlcnNlY3Rpb25XaXRoKGNvbnN0IEFYVGV4dE1hcmtlclJhbmdlJikgY29uc3Q7CisKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiBwbGF0Zm9y
bURhdGEoKSBjb25zdDsKICAgICBvcGVyYXRvciBBWFRleHRNYXJrZXJSYW5nZVJlZigpIGNvbnN0
IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLmF1dG9yZWxlYXNlKCk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZjYwM2MzZjAzNWI3Li40MjYzMzNkYzFmMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0yOTIsNiArMjky
LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RUZXh0V2l0aENyaXRlcmlhUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBAIkFYU2VsZWN0VGV4
dFdpdGhDcml0ZXJpYSIKICNlbmRpZgogCisjaWZuZGVmIE5TQWNjZXNzaWJpbGl0eUludGVyc2Vj
dGlvbldpdGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZQorI2RlZmluZSBOU0FjY2Vzc2liaWxpdHlJ
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUgQCJBWEludGVyc2VjdGlvbldp
dGhTZWxlY3Rpb25SYW5nZSIKKyNlbmRpZgorCiAvLyBUZXh0IHNlYXJjaAogCiAjaWZuZGVmIE5T
QWNjZXNzaWJpbGl0eVNlYXJjaFRleHRXaXRoQ3JpdGVyaWFQYXJhbWV0ZXJpemVkQXR0cmlidXRl
CkBAIC0xMTU5LDYgKzExNjMsMTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eVVSTEF0dHJp
YnV0ZV07CiAgICAgICAgIHJldHVybiB0ZW1wQXJyYXk7CiAgICAgfSgpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZCBzdGF0aWNUZXh0QXR0cnMgPSBbXSB7CisgICAgICAgIGF1dG8gdGVtcEFy
cmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aEFycmF5OmF0dHJp
YnV0ZXMuZ2V0KCkuZ2V0KCldKTsKKyAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXTsKKyAgICAg
ICAgcmV0dXJuIHRlbXBBcnJheTsKKyAgICB9KCk7CiAKICAgICBOU0FycmF5ICpvYmplY3RBdHRy
aWJ1dGVzID0gYXR0cmlidXRlcy5nZXQoKS5nZXQoKTsKIApAQCAtMTE2Niw2ICsxMTc1LDggQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIG9iamVjdEF0dHJp
YnV0ZXMgPSBzZWN1cmVGaWVsZEF0dHJpYnV0ZXMuZ2V0KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAo
YmFja2luZ09iamVjdC0+aXNXZWJBcmVhKCkpCiAgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSB3
ZWJBcmVhQXR0cnMuZ2V0KCkuZ2V0KCk7CisgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNT
dGF0aWNUZXh0KCkpCisgICAgICAgIG9iamVjdEF0dHJpYnV0ZXMgPSBzdGF0aWNUZXh0QXR0cnMu
Z2V0KCkuZ2V0KCk7CiAgICAgZWxzZSBpZiAoYmFja2luZ09iamVjdC0+aXNUZXh0Q29udHJvbCgp
KQogICAgICAgICBvYmplY3RBdHRyaWJ1dGVzID0gdGV4dEF0dHJzLmdldCgpLmdldCgpOwogICAg
IGVsc2UgaWYgKGJhY2tpbmdPYmplY3QtPmlzTGluaygpKQpAQCAtMTYyNiw2ICsxNjM3LDExIEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9CiAgICAgfQog
CisgICAgaWYgKGJhY2tpbmdPYmplY3QtPmlzU3RhdGljVGV4dCgpKSB7CisgICAgICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9u
V2l0aFNlbGVjdGlvblJhbmdlQXR0cmlidXRlXSkKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBp
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VdOworICAgIH0KKwogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJh
bmdlQXR0cmlidXRlXSkgewogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNTZWN1cmVGaWVs
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIyMzUsNiArMjI1MSwyNSBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICByZXR1cm4gbmlsOwogfQogCist
IChOU1ZhbHVlICopaW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlCit7CisgICAgUmVmUHRy
PEFYQ29yZU9iamVjdD4gYmFja2luZ09iamVjdCA9IHNlbGYudXBkYXRlT2JqZWN0QmFja2luZ1N0
b3JlOworICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IGF1dG8gb2JqZWN0UmFuZ2UgPSBiYWNraW5nT2JqZWN0LT50ZXh0TWFya2VyUmFuZ2UoKTsKKyAg
ICBhdXRvIHNlbGVjdGlvblJhbmdlID0gYmFja2luZ09iamVjdC0+c2VsZWN0ZWRUZXh0TWFya2Vy
UmFuZ2UoKTsKKworICAgIGF1dG8gaW50ZXJzZWN0aW9uID0gc2VsZWN0aW9uUmFuZ2UuaW50ZXJz
ZWN0aW9uV2l0aChvYmplY3RSYW5nZSk7CisgICAgaWYgKGludGVyc2VjdGlvbi5oYXNfdmFsdWUo
KSkgeworICAgICAgICBhdXRvIGludGVyc2VjdGlvbkNoYXJhY3RlclJhbmdlID0gaW50ZXJzZWN0
aW9uLT5jaGFyYWN0ZXJSYW5nZSgpOworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uQ2hhcmFjdGVy
UmFuZ2UuaGFzX3ZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRo
UmFuZ2U6aW50ZXJzZWN0aW9uQ2hhcmFjdGVyUmFuZ2UudmFsdWUoKV07CisgICAgfQorCisgICAg
cmV0dXJuIG5pbDsKK30KKwogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5UGxhdGZvcm1NYXRo
U3Vic2NyaXB0S2V5CiB7CiAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eU1hdGhTdWJzY3JpcHRB
dHRyaWJ1dGU7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IGM2ODJmMWQxOTc1MC4u
MGYzOGRmMjM4M2MzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMTc4LDYgKzE3
OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdDsK
ICAgICBpbnQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCk7CiAgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNlbGVjdGVkVGV4dFJhbmdlKCk7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpOwogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiB0ZXh0SW5wdXRNYXJrZWRSYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBdG9t
aWNMaXZlUmVnaW9uKCkgY29uc3Q7CiAgICAgYm9vbCBpc0J1c3koKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCmluZGV4IGRjN2JmYzlkMWMx
Mi4uZWY4MWEzYTg5MTczIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5pZGwKQEAgLTYwLDYgKzYwLDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBudW1iZXJPZkNoYXJhY3RlcnM7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc2VsZWN0ZWRUZXh0UmFuZ2U7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBpbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2U7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyB0ZXh0SW5wdXRNYXJrZWRSYW5nZTsKIAogICAgIERPTVN0cmluZyBzdHJpbmdE
ZXNjcmlwdGlvbk9mQXR0cmlidXRlVmFsdWUoRE9NU3RyaW5nIGF0dHIpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRzcGkuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCmluZGV4IDRlZmU4ZDAwNWQz
OS4uMDg5MjQzZTQ3ZjYyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNwaS5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50QXRzcGkuY3BwCkBAIC0xNDI2LDYgKzE0MjYsMTEgQEAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICBy
ZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShyYW5nZSkubGVha1JlZigpOwogfQogCitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50ZXJzZWN0
aW9uV2l0aFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZh
Y2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZh
Y2U6OlRleHQpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KaW5k
ZXggMmQ1NjY3ODNkOTEwLi5iNzA4MDA1YzUyY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbQpAQCAtOTg2LDYgKzk4NiwxMSBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAg
IHJldHVybiBbcmFuZ2VEZXNjcmlwdGlvbiBjcmVhdGVKU1N0cmluZ1JlZl07CiB9CiAKK0pTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRlcnNlY3Rpb25X
aXRoU2VsZWN0aW9uUmFuZ2UoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGI1NTMyZjRhZjBiYS4uNzU3ZTk4
YmVhYTZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KQEAg
LTg5LDYgKzg5LDEwIEBACiAjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eVRleHRJbnB1dE1hcmtlZFRl
eHRNYXJrZXJSYW5nZUF0dHJpYnV0ZSBAIkFYVGV4dElucHV0TWFya2VkVGV4dE1hcmtlclJhbmdl
IgogI2VuZGlmCiAKKyNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5SW50ZXJzZWN0aW9uV2l0aFNlbGVj
dGlvblJhbmdlQXR0cmlidXRlCisjZGVmaW5lIE5TQWNjZXNzaWJpbGl0eUludGVyc2VjdGlvbldp
dGhTZWxlY3Rpb25SYW5nZUF0dHJpYnV0ZSBAIkFYSW50ZXJzZWN0aW9uV2l0aFNlbGVjdGlvblJh
bmdlIgorI2VuZGlmCisKIHR5cGVkZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJh
Y2spKGlkIGVsZW1lbnQsIE5TU3RyaW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpOwog
CiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJLaXRBY2Nlc3NpYmlsaXR5QWRkaXRpb25zKQpAQCAt
MTM0LDcgKzEzOCwxNSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCogb3RoZXJFbGVtZW50KQogI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZX0lTT0xBVEVEX1RSRUUpCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSXNvbGF0
ZWRPYmplY3QoKSBjb25zdAogewotICAgIHJldHVybiBbbV9lbGVtZW50IGlzSXNvbGF0ZWRPYmpl
Y3RdOworICAgIEJPT0wgdmFsdWU7CisKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAg
ICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJnZhbHVlXSB7
CisgICAgICAgIHZhbHVlID0gW21fZWxlbWVudCBpc0lzb2xhdGVkT2JqZWN0XTsKKyAgICB9KTsK
KyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAjZW5k
aWYKIApAQCAtMTU0MiwxMyArMTU1NCwyNiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIGF1dG8gaW5kZXhS
YW5nZSA9IGF0dHJpYnV0ZVZhbHVlKE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0
cmlidXRlKTsKICAgICBpZiAoaW5kZXhSYW5nZSkKICAgICAgICAgcmFuZ2UgPSBbaW5kZXhSYW5n
ZSByYW5nZVZhbHVlXTsKLSAgICBOU011dGFibGVTdHJpbmcqIHJhbmdlRGVzY3JpcHRpb24gPSBb
TlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihyYW5nZS5sZW5ndGgpXTsKKyAgICBOU1N0cmluZyAqcmFuZ2VEZXNjcmlwdGlvbiA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAieyVsdSwgJWx1fSIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KHJhbmdlLmxvY2F0aW9uKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFu
Z2UubGVuZ3RoKV07CiAgICAgcmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5n
UmVmXTsKICAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiAKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAorSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSgpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENF
UFRJT05TCisgICAgaWYgKGF1dG8gcmFuZ2VBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZShOU0Fj
Y2Vzc2liaWxpdHlJbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2VBdHRyaWJ1dGUpKSB7Cisg
ICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbcmFuZ2VBdHRyaWJ1dGUgcmFuZ2VWYWx1ZV07CisgICAg
ICAgIE5TU3RyaW5nICpyYW5nZURlc2NyaXB0aW9uID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJ7JWx1LCAlbHV9Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocmFuZ2UubG9jYXRp
b24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyYW5nZS5sZW5ndGgpXTsKKyAgICAgICAg
cmV0dXJuIFtyYW5nZURlc2NyaXB0aW9uIGNyZWF0ZUpTU3RyaW5nUmVmXTsKKyAgICB9CisgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBOU1JhbmdlIHRleHRSYW5nZSA9IE5TTWFr
ZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3dpbi9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50V2luLmNwcAppbmRleCBmZjExZmI3YmUxOTkuLmIyMmU2MmVlOGQwMiAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS93aW4vQWNjZXNzaWJpbGl0
eVVJRWxlbWVudFdpbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS93aW4vQWNjZXNzaWJpbGl0eVVJRWxlbWVudFdpbi5jcHAKQEAgLTY1OCw2ICs2NTgsMTIg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVj
dGVkVGV4dFJhbmdlKCkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludGVyc2VjdGlvbldpdGhTZWxlY3Rp
b25SYW5nZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1
bnNpZ25lZCwgdW5zaWduZWQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvYm91bmRzLWZvci1yYW5nZS1leHBl
Y3RlZC50eHQKaW5kZXggZDQ5MTAxZTg0ZWZmLi43YmU4OWNhY2U4OTYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2JvdW5kcy1mb3ItcmFuZ2UtZXhw
ZWN0ZWQudHh0CkBAIC0yOSw2ICsyOSw3IEBAIEFYRE9NQ2xhc3NMaXN0OiA8YXJyYXkgb2Ygc2l6
ZSAwPgogQVhGb2N1c2FibGVBbmNlc3RvcjogPEFYU3RhdGljVGV4dD4KIEFYRWRpdGFibGVBbmNl
c3RvcjogKG51bGwpCiBBWEhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkKK0FYSW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlOiAobnVsbCkKIEFYRWxlbWVudEJ1c3k6IDAKIEFYUGF0
aDogKG51bGwpCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2lu
dGVybmFsLWxpbmstYW5jaG9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0CmluZGV4IDNmYjQ1NjY4
ZWVjMi4uNmZlNTJkYmVjYmU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9pbnRlcm5hbC1saW5rLWFuY2hvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL2ludGVybmFsLWxpbmstYW5jaG9ycy1leHBlY3RlZC50eHQKQEAg
LTMwLDYgKzMwLDcgQEAgQVhET01DbGFzc0xpc3Q6IDxhcnJheSBvZiBzaXplIDA+CiBBWEZvY3Vz
YWJsZUFuY2VzdG9yOiA8QVhTdGF0aWNUZXh0PgogQVhFZGl0YWJsZUFuY2VzdG9yOiAobnVsbCkK
IEFYSGlnaGVzdEVkaXRhYmxlQW5jZXN0b3I6IChudWxsKQorQVhJbnRlcnNlY3Rpb25XaXRoU2Vs
ZWN0aW9uUmFuZ2U6IChudWxsKQogQVhFbGVtZW50QnVzeTogMAogQVhQYXRoOiAobnVsbCkKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdp
dGgtc2VsZWN0aW9uLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2ludGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yMTQyODdjNmM1NDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24t
d2l0aC1zZWxlY3Rpb24tcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoaXMg
dGVzdHMgdGhlIGludGVyc2VjdGlvbldpdGhTZWxlY3Rpb25SYW5nZSBhcGksIHdoaWNoIHJldHVy
bnMgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gYSBzdGF0aWMgdGV4dCBub2RlIHRoYXQgYXJl
IHBhcnQgb2YgdGhlIGRvY3VtZW50IHNlbGVjdGlvbiwgaWYgYW55LgorCitUcnlpbmcgcmFuZ2U6
IHRleHQxOjAgLSB0ZXh0MTo1IDogQWxwaGEKK1BBU1M6IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50
b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5yb2xlID09PSAi
QVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJzZWN0aW9uV2l0
aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitUcnlpbmcgcmFu
Z2U6IHRleHQxOjYgLSB0ZXh0MToxMSA6IEJyYXZvCitQQVNTOiB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkudG9TdHJpbmcoKSA9PT0gZXhwZWN0ZWRUZXh0CitQQVNTOiBheFN0YXRpY1RleHQucm9sZSA9
PT0gIkFYUm9sZTogQVhTdGF0aWNUZXh0IgorUEFTUzogYXhTdGF0aWNUZXh0LmludGVyc2VjdGlv
bldpdGhTZWxlY3Rpb25SYW5nZSA9PT0gZXhwZWN0ZWRBY2Nlc3NpYmxlUmFuZ2UKKworVHJ5aW5n
IHJhbmdlOiB0ZXh0MjoyIC0gdGV4dDI6OSA6IENoYXJsaWUKK1BBU1M6IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKS50b1N0cmluZygpID09PSBleHBlY3RlZFRleHQKK1BBU1M6IGF4U3RhdGljVGV4dC5y
b2xlID09PSAiQVhSb2xlOiBBWFN0YXRpY1RleHQiCitQQVNTOiBheFN0YXRpY1RleHQuaW50ZXJz
ZWN0aW9uV2l0aFNlbGVjdGlvblJhbmdlID09PSBleHBlY3RlZEFjY2Vzc2libGVSYW5nZQorCitU
cnlpbmcgcmFuZ2U6IHRleHQyOjExIC0gdGV4dDI6MTYgOiBEZWx0YQorUEFTUzogd2luZG93Lmdl
dFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNU
ZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5p
bnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdl
CisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2bworQ2hhcmxpZQorUEFT
Uzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAorUEFT
UzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6IGF4
U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVkQWNj
ZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDE6MCAtIHRleHQxOjUgOiBBbHBoYQor
UEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4cGVjdGVkVGV4dAor
UEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGljVGV4dCIKK1BBU1M6
IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UgPT09IGV4cGVjdGVk
QWNjZXNzaWJsZVJhbmdlCisKK1RyeWluZyByYW5nZTogdGV4dDE6NiAtIHRleHQyOjkgOiBCcmF2
bworQ2hhcmxpZQorUEFTUzogd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkgPT09IGV4
cGVjdGVkVGV4dAorUEFTUzogYXhTdGF0aWNUZXh0LnJvbGUgPT09ICJBWFJvbGU6IEFYU3RhdGlj
VGV4dCIKK1BBU1M6IGF4U3RhdGljVGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2Ug
PT09IGV4cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitBbHBoYSBCcmF2bworQ2hhcmxpZSBEZWx0YQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24td2l0
aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2lu
dGVyc2VjdGlvbi13aXRoLXNlbGVjdGlvbi1yYW5nZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMDZmNjVmNDY1MmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvaW50ZXJzZWN0aW9uLXdpdGgtc2VsZWN0aW9uLXJh
bmdlLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCis8ZGl2IGlkPSJ0ZXh0MSI+QWxwaGEgQnJhdm88L2Rpdj4KKzxkaXYgaWQ9InRleHQy
Ij4gIENoYXJsaWUgIERlbHRhICA8L2Rpdj4KKworPHByZSBpZD0idHJlZSI+PC9wcmU+CisKKzxz
Y3JpcHQ+CisgICAgdmFyIG91dHB1dCA9ICJUaGlzIHRlc3RzIHRoZSBpbnRlcnNlY3Rpb25XaXRo
U2VsZWN0aW9uUmFuZ2UgYXBpLCB3aGljaCByZXR1cm5zIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJz
IGluIGEgc3RhdGljIHRleHQgbm9kZSB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBzZWxl
Y3Rpb24sIGlmIGFueS5cblxuIjsKKworICAgIGFzeW5jIGZ1bmN0aW9uIHNlbGVjdE5vZGVJZFJh
bmdlKG5vZGVJZDAsIG9mZnNldDAsIG5vZGVJZDEsIG9mZnNldDEpIHsKKyAgICAgICAgbGV0IHJv
b3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290RWxlbWVudC5jaGlsZEF0SW5kZXgoMCk7
CisgICAgICAgIGxldCBwcmV2aW91c0FYU2VsZWN0aW9uID0gcm9vdC5zdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2Uocm9vdC5zZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpKQorICAgICAgICBsZXQgc2Vs
ID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICBsZXQgcmFuZ2UgPSBkb2N1bWVudC5j
cmVhdGVSYW5nZSgpOworICAgICAgICByYW5nZS5zZXRTdGFydChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChub2RlSWQwKS5maXJzdENoaWxkLCBvZmZzZXQwKTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5k
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5vZGVJZDEpLmZpcnN0Q2hpbGQsIG9mZnNldDEpOwor
ICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShyYW5n
ZSk7CisgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4gcHJldmlvdXNBWFNlbGVjdGlvbiAhPSBy
b290LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShyb290LnNlbGVjdGVkVGV4dE1hcmtlclJhbmdl
KCkpKTsKKyAgICB9CisKKyAgICBhc3luYyBmdW5jdGlvbiBydW5UZXN0KG5vZGVJZDAsIG9mZnNl
dDAsIG5vZGVJZDEsIG9mZnNldDEsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFRleHQs
CisgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlRWxlbWVudElkLCBleHBlY3RlZEFjY2Vz
c2libGVSYW5nZSkgeworICAgICAgICBvdXRwdXQgKz0gYFRyeWluZyByYW5nZTogJHtub2RlSWQw
fToke29mZnNldDB9IC0gJHtub2RlSWQxfToke29mZnNldDF9IDogJHtleHBlY3RlZFRleHR9XG5g
OworICAgICAgICBhd2FpdCBzZWxlY3ROb2RlSWRSYW5nZShub2RlSWQwLCBvZmZzZXQwLCBub2Rl
SWQxLCBvZmZzZXQxKTsKKyAgICAgICAgd2luZG93LmV4cGVjdGVkVGV4dCA9IGV4cGVjdGVkVGV4
dDsKKyAgICAgICAgb3V0cHV0ICs9IGV4cGVjdCgnd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3Ry
aW5nKCknLCAnZXhwZWN0ZWRUZXh0Jyk7CisKKyAgICAgICAgYXhFbGVtZW50ID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKGFjY2Vzc2libGVFbGVtZW50SWQp
OworICAgICAgICBheFN0YXRpY1RleHQgPSBheEVsZW1lbnQuY2hpbGRBdEluZGV4KDApOworICAg
ICAgICBvdXRwdXQgKz0gZXhwZWN0KCdheFN0YXRpY1RleHQucm9sZScsICciQVhSb2xlOiBBWFN0
YXRpY1RleHQiJyk7CisgICAgICAgIHdpbmRvdy5leHBlY3RlZEFjY2Vzc2libGVSYW5nZSA9IGV4
cGVjdGVkQWNjZXNzaWJsZVJhbmdlCisgICAgICAgIG91dHB1dCArPSBleHBlY3QoJ2F4U3RhdGlj
VGV4dC5pbnRlcnNlY3Rpb25XaXRoU2VsZWN0aW9uUmFuZ2UnLCAnZXhwZWN0ZWRBY2Nlc3NpYmxl
UmFuZ2UnKTsKKworICAgICAgICBvdXRwdXQgKz0gJ1xuJzsKKyAgICB9CisKKyAgICBpZiAod2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKyAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CisgICAgICAgICAg
ICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdBbHBoYScsICd0ZXh0MScs
ICd7MCwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1blRlc3QoJ3RleHQxJywgNiwgJ3RleHQx
JywgMTEsICdCcmF2bycsICd0ZXh0MScsICd7NiwgNX0nKTsKKyAgICAgICAgICAgIGF3YWl0IHJ1
blRlc3QoJ3RleHQyJywgMiwgJ3RleHQyJywgOSwgJ0NoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9
Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MicsIDExLCAndGV4dDInLCAxNiwg
J0RlbHRhJywgJ3RleHQyJywgJ3s4LCA1fScpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgn
dGV4dDEnLCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDEnLCAnezYsIDV9
Jyk7CisgICAgICAgICAgICBhd2FpdCBydW5UZXN0KCd0ZXh0MScsIDAsICd0ZXh0MScsIDUsICdB
bHBoYScsICd0ZXh0MicsIG51bGwpOworICAgICAgICAgICAgYXdhaXQgcnVuVGVzdCgndGV4dDEn
LCA2LCAndGV4dDInLCA5LCAnQnJhdm9cbkNoYXJsaWUnLCAndGV4dDInLCAnezAsIDd9Jyk7Cisg
ICAgICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgICAgIH0sIDApOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBjMGU3Mjhh
YmNjYy4uMDk3NTc4YzQyODVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9U
ZXN0RXhwZWN0YXRpb25zCkBAIC04NDQsNiArODQ0LDkgQEAgYWNjZXNzaWJpbGl0eS9tYWMvbGF6
eS1zcGVsbGNoZWNraW5nLmh0bWwgWyBTa2lwIF0KIGFjY2Vzc2liaWxpdHkvbWFjL3NwZWxsY2hl
Y2std2l0aC12b2ljZW92ZXIuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtl
ci90ZXh0LW1hcmtlci1yYW5nZS13aXRoLXVub3JkZXJlZC1tYXJrZXJzLmh0bWwKIAorIyBOZXcg
QVBJIG5vdCBzdXBwb3J0ZWQgaW4gV0sxCithY2Nlc3NpYmlsaXR5L21hYy9pbnRlcnNlY3Rpb24t
d2l0aC1zZWxlY3Rpb24tcmFuZ2UuaHRtbCBbIFNraXAgXQorCiAjIERPTSBwYXN0ZSBhY2Nlc3Mg
cmVxdWVzdHMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQxLgogZWRpdGluZy9hc3luYy1j
bGlwYm9hcmQvY2xpcGJvYXJkLWNoYW5nZS1kYXRhLXdoaWxlLXJlYWRpbmcuaHRtbCBbIFNraXAg
XQogZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLWRvLW5vdC1yZWFkLXRleHQtZnJv
bS1wbGF0Zm9ybS1pZi10ZXh0LWNoYW5nZXMuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>