<?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>19938</bug_id>
          
          <creation_ts>2008-07-07 19:03:33 -0700</creation_ts>
          <short_desc>Improve AnimationController</short_desc>
          <delta_ts>2008-08-05 10:11:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>19028</blocked>
    
    <blocked>20068</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>85424</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 19:03:33 -0700</bug_when>
    <thetext>AnimationController should be updated so adding CSS Animations is easier. The attached patch does the following:

- adds a new AnimationController
- supports -webkit-transition-delay (since the new controller does it)
- removes -webkit-transition-repeat-count (since it never existed)
- updates the -webkit-transition shorthand to reflect removing repeat count
- provides computed style for transition properties
- updates the Transition class so that properties can be shared with animations
- adds a &quot;now&quot; keyword for -webkit-transition-delay
- adds a new change type for style (changed by animation)
- adds new event names (although they are not dispatched yet)
- makes text stroke and text fill colors returned by RenderStyle const

Sorry this patch is so big. The problem is that AnimationController is quite complex and drags in a lot of other stuff. I was hoping to get something fairly minimal that just did Transitions (ie. not much different from the current TOT).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85425</commentid>
    <comment_count>1</comment_count>
      <attachid>22151</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 19:04:46 -0700</bug_when>
    <thetext>Created attachment 22151
Improvement of AnimationController

huge patch that adds a state-based AnimationController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85426</commentid>
    <comment_count>2</comment_count>
      <attachid>22152</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 19:06:00 -0700</bug_when>
    <thetext>Created attachment 22152
Test case for simple transitions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85427</commentid>
    <comment_count>3</comment_count>
      <attachid>22153</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 19:06:28 -0700</bug_when>
    <thetext>Created attachment 22153
test case for different timing functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85428</commentid>
    <comment_count>4</comment_count>
      <attachid>22154</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 19:07:00 -0700</bug_when>
    <thetext>Created attachment 22154
Test case for transition delay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85433</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 21:07:22 -0700</bug_when>
    <thetext>+++ b/WebCore/css/CSSComputedStyleDeclaration.cpp

+        case CSSPropertyWebkitTransitionProperty: {
+            RefPtr&lt;CSSValueList&gt; list = CSSValueList::createCommaSeparated();
+            const Transition* t = style-&gt;transitions();
+            if (t) {
+                for ( ; t; t = t-&gt;next()) {
+                    int prop = t-&gt;transitionProperty();

Isn&apos;t this t-&gt;property()? If not, why not?

diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp

-PassRefPtr&lt;CSSValue&gt; CSSParser::parseTransitionRepeatCount()
+PassRefPtr&lt;CSSValue&gt; CSSParser::parseDuration()
 {
     CSSParserValue* value = m_valueList-&gt;current();
-    if (value-&gt;id == CSSValueInfinite)
-        return CSSPrimitiveValue::createIdentifier(value-&gt;id);
-    if (validUnit(value, FInteger|FNonNeg, m_strict))
+    if (validUnit(value, FTime, m_strict))
         return CSSPrimitiveValue::create(value-&gt;fValue, (CSSPrimitiveValue::UnitTypes)value-&gt;unit);
     return 0;
 }

Shouldn&apos;t duration have the FInteger|FNonNeg flags?

diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp
index 36c652d..3b9a456 100644
--- a/WebCore/css/CSSStyleSelector.cpp
+++ b/WebCore/css/CSSStyleSelector.cpp
@@ -182,15 +182,15 @@ HANDLE_FILL_LAYER_INHERIT_AND_INITIAL(mask, Mask, prop, Prop)
 #define HANDLE_MASK_VALUE(prop, Prop, value) \
 HANDLE_FILL_LAYER_VALUE(mask, Mask, prop, Prop, value)
 
-#define HANDLE_TRANSITION_INHERIT_AND_INITIAL(prop, Prop) \
+#define HANDLE_MULTILAYER_INHERIT_AND_INITIAL(layerType, LayerType, prop, Prop) \
 if (isInherit) { \
-    Transition* currChild = m_style-&gt;accessTransitions(); \
-    Transition* prevChild = 0; \
-    const Transition* currParent = m_parentStyle-&gt;transitions(); \
+    LayerType* currChild = m_style-&gt;access##LayerType##s(); \
+    LayerType* prevChild = 0; \

I don&apos;t think the Transtion -&gt; LayerType changes are necessary. We&apos;ll only
ever make Transition objects.

diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp

 void Document::updateRendering()
 {
-    if (hasChangedChild())
+    if (hasChangedChild()) {
         recalcStyle(NoChange);
+    }

WebKit style is no parens around single line block.

+    // tell the animation controller that the style is all setup and it can start animations
+    if (m_frame)
+        m_frame-&gt;animation()-&gt;styleIsSetup();    
 }

styleIsSetup() is a crappy method name. We should think of something better.

diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index c83a7d2..81bb90d 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -751,6 +751,10 @@ void Element::recalcStyle(StyleChange change)
     if (hasParentStyle &amp;&amp; (change &gt;= Inherit || changed())) {
         RenderStyle *newStyle = document()-&gt;styleSelector()-&gt;styleForElement(this);
         StyleChange ch = diff(currentStyle, newStyle);
+
+        if (styleChangeType() == AnimatableStyleChange)
+            ch = Force;
+
         if (ch == Detach || !currentStyle) {
             if (attached())
                 detach();
@@ -784,9 +788,11 @@ void Element::recalcStyle(StyleChange change)
                 newStyle-&gt;setChildrenAffectedByDirectAdjacentRules();
         }
 
-        if (ch != NoChange)
-            setRenderStyle(newStyle);
-        else if (changed() &amp;&amp; (document()-&gt;usesSiblingRules() || document()-&gt;usesDescendantRules())) {
+        if (ch != NoChange) {
+            if (newStyle) {
+                setRenderStyle(newStyle);
+            }
+        } else if (changed() &amp;&amp; (document()-&gt;usesSiblingRules() || document()-&gt;usesDescendantRules())) {
             // Although no change occurred, we use the new style so that the cousin style sharing code won&apos;t get
             // fooled into believing this style is the same.  This is only necessary if the document actually uses
             // sibling/descendant rules, since otherwise it isn&apos;t possible for ancestor styles to affect sharing of
@@ -800,7 +806,7 @@ void Element::recalcStyle(StyleChange change)
         newStyle-&gt;deref(document()-&gt;renderArena());
 
         if (change != Force) {
-            if ((document()-&gt;usesDescendantRules() || hasPositionalRules) &amp;&amp; styleChangeType() == FullStyleChange)
+            if ((document()-&gt;usesDescendantRules() || hasPositionalRules) &amp;&amp; styleChangeType() &gt;= FullStyleChange)
                 change = Force;
             else
                 change = ch;

These changes are different from those we reviewed internally. They need to be updated.

diff --git a/WebCore/dom/EventNames.h b/WebCore/dom/EventNames.h
index 872c6cf..d289829 100644
--- a/WebCore/dom/EventNames.h
+++ b/WebCore/dom/EventNames.h
@@ -119,6 +119,12 @@ namespace WebCore { namespace EventNames {
     macro(progress) \
     macro(stalled) \
     \
+    macro(webkitAnimationEnd) \
+    macro(webkitAnimationStart) \
+    macro(webkitAnimationIteration) \

Do we want animation events in this patch?

diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp
index c291b60..435d029 100644
--- a/WebCore/dom/Node.cpp
+++ b/WebCore/dom/Node.cpp
@@ -380,7 +380,7 @@ void Node::setChanged(StyleChangeType changeType)
     if ((changeType != NoStyleChange) &amp;&amp; !attached()) // changed compared to what?
         return;
 
-    if (!(changeType == InlineStyleChange &amp;&amp; m_styleChange == FullStyleChange))
+    if (changeType &gt; (StyleChangeType)m_styleChange)

Also needs syncing with internally reviewed changes.

diff --git a/WebCore/dom/Node.h b/WebCore/dom/Node.h
index 60f7a9c..20370d0 100644
--- a/WebCore/dom/Node.h
+++ b/WebCore/dom/Node.h
@@ -60,7 +60,7 @@ struct NodeListsNodeData;
 
 typedef int ExceptionCode;
 
-enum StyleChangeType { NoStyleChange, InlineStyleChange, FullStyleChange };
+enum StyleChangeType { NoStyleChange, InlineStyleChange, FullStyleChange, AnimatableStyleChange };

Ditto. We decided on AnimationStyleChange.

diff --git a/WebCore/page/AnimationController.cpp b/WebCore/page/AnimationController.cpp
index 444e6b4..97d92da 100644
--- a/WebCore/page/AnimationController.cpp
+++ b/WebCore/page/AnimationController.cpp

+class CompositeAnimation : public Noncopyable {

Add a comment to say what a CompositeAnimation is for.

+public:
+    CompositeAnimation(bool suspended, AnimationControllerPrivate* animationController)
+    : m_suspended(suspended)
+    , m_animationController(animationController)
+    , m_numStyleIsSetupWaiters(0)
+    { }
+    
+    ~CompositeAnimation()
+    {
+        deleteAllValues(m_transitions);
+    }
+    
+    RenderStyle* animate(RenderObject*, RenderStyle* currentStyle, RenderStyle* targetStyle);
+    
+    void setAnimating(bool inAnimating);
+    bool animating();
+    
+    bool hasAnimationForProperty(int prop) const { return m_transitions.contains(prop); }
+    
+    void resetTransitions(RenderObject*);
+    void resetAnimations(RenderObject*);
+    
+    void cleanupFinishedAnimations(RenderObject*);
+    
+    void setAnimationStartTime(double t);
+    void setTransitionStartTime(int property, double t);

Should we use CSSPropertyID rather than ints these days?

+    // Animations and Transitions go through the states below. When entering the STARTED state
+    // the animation is started. This may or may not require deferred response from the animator.
+    // If so, we stay in this state until that response is received (and it returns the start time).
+    // Otherwise, we use the current time as the start time and go immediately to the LOOPING or
+    // ENDING state.
+    enum AnimState { 
+        STATE_NEW,                      // animation just created, animation not running yet
+        STATE_START_WAIT_TIMER,         // start timer running, waiting for fire
+        STATE_START_WAIT_STYLE_SETUP,   // waiting for style setup so we can start animations
+        STATE_START_WAIT_RESPONSE,      // animation started, waiting for response
+        STATE_LOOPING,                  // response received, animation running, loop timer running, waiting for fire
+        STATE_ENDING,                   // response received, animation running, end timer running, waiting for fire
+        STATE_PAUSED_WAIT_TIMER,        // animation in pause mode when animation started
+        STATE_PAUSED_WAIT_RESPONSE,     // animation paused when in STARTING state
+        STATE_PAUSED_RUN,               // animation paused when in LOOPING or ENDING state
+        STATE_DONE                      // end timer fired, animation finished and removed
+    };
+    
+    enum AnimStateInput {
+        STATE_INPUT_MAKE_NEW,           // reset back to new from any state
+        STATE_INPUT_START_ANIMATION,    // animation requests a start
+        STATE_INPUT_RESTART_ANIMATION,  // force a restart from any state
+        STATE_INPUT_START_TIMER_FIRED,  // start timer fired
+        STATE_INPUT_STYLE_SETUP,        // style is setup, ready to start animating
+        STATE_INPUT_START_TIME_SET,     // m_startTime was set
+        STATE_INPUT_LOOP_TIMER_FIRED,   // loop timer fired
+        STATE_INPUT_END_TIMER_FIRED,    // end timer fired
+        STATE_INPUT_PAUSE_OVERRIDE,     // pause an animation due to override
+        STATE_INPUT_RESUME_OVERRIDE,    // resume an overridden animation
+        STATE_INPUT_PLAY_STATE_RUNNING, // play state paused -&gt; running
+        STATE_INPUT_PLAY_STATE_PAUSED,  // play state running -&gt; paused
+        STATE_INPUT_END_ANIMATION       // force an end from any state
+    };

I don&apos;t think we need this complexity of states for the existing transitions.

+class ImplicitAnimation : public AnimationBase {
+public:
+    ImplicitAnimation(const Transition* transition, RenderObject* renderer, CompositeAnimation* compAnim)
+    : AnimationBase(transition, renderer, compAnim)
+    , m_property(transition-&gt;transitionProperty())
+    , m_overridden(false)
+    , m_fromStyle(0)
+    , m_toStyle(0)
+    {
+    }
+    
+    virtual ~ImplicitAnimation()
+    {
+        ASSERT(!m_fromStyle &amp;&amp; !m_toStyle);
+        
+        // If we were waiting for an end event, we need to finish the animation to make sure no old
+        // animations stick around in the lower levels
+        if (waitingForEndEvent() &amp;&amp; m_object)
+            ASSERT(0);
+        /* spma
+            m_object-&gt;transitionFinished(m_property);
+         */

spma?

+        case STATE_START_WAIT_STYLE_SETUP:
+            ASSERT(input == STATE_INPUT_STYLE_SETUP || input == STATE_INPUT_PLAY_STATE_PAUSED);
+            
+            m_compAnim-&gt;setWaitingForStyleIsSetup(false);
+            
+            if (input == STATE_INPUT_STYLE_SETUP) {
+                DSM_PRINT(&quot;STATE_START_WAIT_STYLE_SETUP&quot;, &quot;STATE_INPUT_STYLE_SETUP&quot;, &quot;STATE_START_WAIT_RESPONSE&quot;);
+                // Start timer has fired, tell the animation to start and wait for it to respond with start time
+                m_animState = STATE_START_WAIT_RESPONSE;
+                
+                overrideAnimations();
+                
+                // Send start event, if needed
+                onAnimationStart(0.0f); // the elapsedTime is always 0 here
+                
+                // Start the animation
+                if (overridden() || !startAnimation(0)) {
+#ifdef DEBUG_STATE_MACHINE
+                    fprintf(stderr, &quot;***         startAnimation returned false, setting start time immediately\n&quot;);
+#endif
+                    // We&apos;re not going to get a startTime callback, so fire the start time here
+                    m_animState = STATE_START_WAIT_RESPONSE;
+                    updateStateMachine(STATE_INPUT_START_TIME_SET, currentTime());
+                }
+                else
+                    m_waitedForResponse = true;

I&apos;m not sure we can ever get into this state with the transitions we have here. Much of this logic could be simplified.

+    // |this| may be deleted here if we came out of STATE_ENDING when we&apos;ve been called from timerFired()

Ick. Maybe we should RefCount&lt;&gt; these guys?


+void AnimationBase::animationEventDispatcherFired(HTMLElement* element, const AtomicString&amp; name, int property, 
+                                                  bool reset, const AtomicString&amp; eventType, double elapsedTime)
 {
-    double elapsedTime = currentTime() - m_startTime;
+    m_waitingForEndEvent = false;
     
-    if (m_finished || !m_duration || elapsedTime &gt;= m_duration)
-        return 1.0;
+    // Keep an atomic string on the stack to keep it alive until we exit this method
+    // (since dispatching the event may cause |this| to be deleted, therefore removing
+    // the last ref to the atomic string).
+    AtomicString animName(name);
+    AtomicString animEventType(eventType);
+    // Make sure the element sticks around too
+    RefPtr&lt;HTMLElement&gt; elementRetainer(element);
+    
+    ASSERT(!element || (element-&gt;document() &amp;&amp; !element-&gt;document()-&gt;inPageCache()));
+    if (!element)
+        return;
+    
+    // We didn&apos;t make the endAnimation call if we dispatched an event. This is so
+    // we can call the animation event handler then remove the animation. 
+    // We can&apos;t call endAnimation() here because it is specialized depending on whether
+    // we are doing Transitions or Animations. So we do the equivalent to it here.
+    if (animEventType == EventNames::webkitAnimationEndEvent) {
+        if (element-&gt;renderer()) {
+            // restore the original (unanimated) style
+            setChanged(element-&gt;renderer()-&gt;element());
+        }
+    }
+}

There&apos;s some reference to explicit animations here.

 static inline TransformOperations blendFunc(const TransformOperations&amp; from, const TransformOperations&amp; to, double progress)
@@ -237,7 +925,8 @@ static inline TransformOperations blendFunc(const TransformOperations&amp; from, con
         TransformOperation* fromOp = i &lt; fromSize ? from[i].get() : 0;
         TransformOperation* toOp = i &lt; toSize ? to[i].get() : 0;
         TransformOperation* blendedOp = toOp ? toOp-&gt;blend(fromOp, progress) : fromOp-&gt;blend(0, progress, true);
-        result.append(blendedOp);
+        if (blendedOp)
+            result.append(blendedOp);
     }

There&apos;s a problem here in some cases: &lt;rdar://problem/6058375&gt;

+// &quot;animating&quot; means that something is running that requires the timer to keep firing
+// (e.g. a software animation)

e.g. transition

+void CompositeAnimation::setAnimationStartTime(double t)
+{
+}

Remove?

+void CompositeAnimation::setTransitionStartTime(int property, double t)
+{
+    // Set start time for given property transition
+    CSSPropertyTransitionsMap::const_iterator end = m_transitions.end();
+    for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) {
+        ImplicitAnimation* anim = it-&gt;second;
+        if (anim &amp;&amp; anim-&gt;waitingForStartTime() &amp;&amp; 
+            (anim-&gt;transitionProperty() == property || anim-&gt;transitionProperty() == cAnimateAll))
+            anim-&gt;updateStateMachine(AnimationBase::STATE_INPUT_START_TIME_SET, t);
+    }
+}

I don&apos;t think this will ever get called.

+void CompositeAnimation::suspendAnimations()
+{
+    if (m_suspended)
+        return;
+    
+    m_suspended = true;
+
+    CSSPropertyTransitionsMap::const_iterator end = m_transitions.end();
+    for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) {
+        ImplicitAnimation* anim = it-&gt;second;
+        if (anim &amp;&amp; anim-&gt;hasStyle()) {
+            anim-&gt;updatePlayState(false);
+        }
+    }
+}

Hmm, does playState do anything for transitions?

+void CompositeAnimation::overrideImplicitAnimations(int property)
+{
+    CSSPropertyTransitionsMap::const_iterator end = m_transitions.end();
+    for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) {
+        ImplicitAnimation* anim = it-&gt;second;
+        if (anim &amp;&amp; (anim-&gt;transitionProperty() == property || anim-&gt;transitionProperty() == cAnimateAll))
+            anim-&gt;setOverridden(true);
+    }
+}
+
+void CompositeAnimation::resumeOverriddenImplicitAnimations(int property)
+{
+    CSSPropertyTransitionsMap::const_iterator end = m_transitions.end();
+    for (CSSPropertyTransitionsMap::const_iterator it = m_transitions.begin(); it != end; ++it) {
+        ImplicitAnimation* anim = it-&gt;second;
+        if (anim &amp;&amp; (anim-&gt;transitionProperty() == property || anim-&gt;transitionProperty() == cAnimateAll))
+            anim-&gt;setOverridden(false);
+    }
+}

Would be nice to have some comments explaing what this &quot;overriding&quot; is all about.

diff --git a/WebCore/rendering/style/RenderStyle.cpp b/WebCore/rendering/style/RenderStyle.cpp
index 0213a29..402c5a2 100644
--- a/WebCore/rendering/style/RenderStyle.cpp
+++ b/WebCore/rendering/style/RenderStyle.cpp
@@ -41,6 +41,12 @@ static bool imagesEquivalent(StyleImage* image1, StyleImage* image2)
     return true;
 }
 
+// compare floating points, taking nan into account
+static inline bool floatingPointValuesEqual(float a, float b)
+{
+    return (isnan(a) &amp;&amp; isnan(b)) || (a == b);
+}

Don&apos;t need this.

@@ -1869,32 +1851,58 @@ const Vector&lt;StyleDashboardRegion&gt;&amp; RenderStyle::noneDashboardRegions()
 void RenderStyle::adjustTransitions()
 {
     if (transitions()) {
-        if (transitions()-&gt;isEmpty()) {
+        if (transitions()-&gt;isEmptyOrZeroDuration()) {
             clearTransitions();
             return;
         }
 
         Transition* next;
         for (Transition* p = accessTransitions(); p; p = next) {
-            next = p-&gt;m_next;
+            next = p-&gt;next();
             if (next &amp;&amp; next-&gt;isEmpty()) {
-                delete next;
-                p-&gt;m_next = 0;
+                p-&gt;setNext(0); // removes the ref, so next gets deleted
+                next = 0;
                 break;
             }
         }
-    
+
+        if (!transitions())
+            return;
+
         // Repeat patterns into layers that don&apos;t have some properties set.
         accessTransitions()-&gt;fillUnsetProperties();
+        
+        // make sure there are no duplicate properties. This is an O(n^2) algorithm
+        // but the lists tend to be very short, so it is probably ok

Not when it could be used as a DOS attack. Would be nice to find something more
efficient.

diff --git a/WebCore/rendering/style/RenderStyle.h b/WebCore/rendering/style/RenderStyle.h
index ebab8b6..2d21186 100644
--- a/WebCore/rendering/style/RenderStyle.h
+++ b/WebCore/rendering/style/RenderStyle.h
@@ -1257,58 +1257,68 @@ private:

-    int m_duration;
-    int m_repeatCount;
+private:
+    double m_duration;
     TimingFunction m_timingFunction;
+    float m_delay;

Stupid question: why is duration a double, and delay a float?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85492</commentid>
    <comment_count>6</comment_count>
      <attachid>22151</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-08 14:36:10 -0700</bug_when>
    <thetext>Comment on attachment 22151
Improvement of AnimationController

Just an initial comment... the bigger you make a patch, the more likely there will be something in it that holds it all up.  :)  Keep breaking stuff up if you can, but for now I&apos;ll comment on the whole shebang.

I would not change the name of this macro...

HANDLE_MULTILAYER_INHERIT_AND_INITIAL

The use of the term &quot;layer&quot; is something we should avoid with the transition/animation stuff, since that&apos;s more of a background term (and background no longer uses this macro).

Just keep using the term TRANSITION and pass in an &quot;animationType&quot; instead.

I&apos;m a little concerned about generic names in the parser like &quot;parseDuration&quot;... but I can&apos;t think of anything better.

+    // tell the animation controller that the style is all setup and it can start animations

Set up is two words not one.  Fix the comment.  I also hate the method name &quot;styleIsSetup&quot;.  How about &quot;styleAvailable.&quot;

I don&apos;t understand the loadComplete stuff in Document.  Are animations really delayed all the way until the onload fires?  That does not seem like what we want at all.... some slow-loading ad in an iframe holds up all animations?

+        if (ch != NoChange) {
+            if (newStyle) {
+                setRenderStyle(newStyle);
+            }

I don&apos;t understand this null check.  I didn&apos;t think newStyle could ever be 0.

+
+        if (styleChangeType() == AnimatableStyleChange)
+            ch = Force;
+

Why do you need a new style change type?

-    if (!(changeType == InlineStyleChange &amp;&amp; m_styleChange == FullStyleChange))
+    if (changeType &gt; (StyleChangeType)m_styleChange)

Is the above really correct?  Does not look logically the same to me.

&quot;setWaitingForStyleIsSetup&quot;  Ludicrous name.  setWaitingForStyle would be sufficient.

Please verify that the transitions tests in WebCore/manual-tests still work correctly.  It looks to me like your merge has broken this and regressed how transitions work when they change.


In general I really dislike #ifdef DEBUGGING code that does printfs.  We ended up removing a lot of the KHTML code that did that, since it just clutters the code up and makes it harder to read.  Write a test harness that can use run-webkit-tests in some way if need be, but ditch all the printf debugging. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85510</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-08 18:26:14 -0700</bug_when>
    <thetext>
&gt; Isn&apos;t this t-&gt;property()? If not, why not?

This was to avoid what hyatt complains about below - that our names are too generic. However I changed it to property(). We should clarify the naming.

&gt; Shouldn&apos;t duration have the FInteger|FNonNeg flags?

Changed to FTime|FNonNeg.

&gt; I don&apos;t think the Transtion -&gt; LayerType changes are necessary. We&apos;ll only
&gt; ever make Transition objects.

True, until the following animation patch comes. Hyatt comments on this too.

&gt; WebKit style is no parens around single line block.

fixed

&gt; styleIsSetup() is a crappy method name. We should think of something better.

hyatt comments on this too


&gt; These changes are different from those we reviewed internally. They need to be
&gt; updated.

done

&gt; Do we want animation events in this patch?

No, I didn&apos;t want them. I could probably remove it, but there is some code in AnimationController which uses these to clean up transitions (even if the events are not fired). I didn&apos;t want to butcher AnimationController too much since I want to finish the patch that adds the events back in.

&gt; Also needs syncing with internally reviewed changes.

done

&gt; Ditto. We decided on AnimationStyleChange.

done

&gt; Add a comment to say what a CompositeAnimation is for.

done

&gt; Should we use CSSPropertyID rather than ints these days?

This is a good suggestion, which I tried only to discover that we use some special cases, such as cAnimateAll. These are not properties and so we can&apos;t restrict our property type without bigger changes.


&gt; I don&apos;t think we need this complexity of states for the existing transitions.

True, but again I didn&apos;t want to create a special version of AnimationController just for this patch. In fact, I already do create a special one, because i remove all the keyframe stuff, but i didn&apos;t want to play with the state machine logic.

&gt; spma?

That looks suspiciously like something I would type in order to find later and remove.

&gt; I&apos;m not sure we can ever get into this state with the transitions we have here.
&gt; Much of this logic could be simplified.

Yes.

&gt; &gt; +    // |this| may be deleted here if we came out of STATE_ENDING when we&apos;ve
&gt; &gt; been called from timerFired()
&gt;
&gt; Ick. Maybe we should RefCount&lt;&gt; these guys?

We should.


&gt; There&apos;s some reference to explicit animations here.

removed

&gt; There&apos;s a problem here in some cases: &lt;rdar://problem/6058375&gt;

I haven&apos;t fixed this.


&gt; +void CompositeAnimation::setAnimationStartTime(double t)
&gt; +{
&gt; +}

&gt; Remove?

done (it was also being called from somewhere else, that itself wasn&apos;t being called - so everything was removed)

&gt; I don&apos;t think this will ever get called.

True. removed

&gt; Hmm, does playState do anything for transitions?

It could but doesn&apos;t (because there is no such property). It&apos;s a generic feature of the animation engine though, and the same rules will apply to animation (which will have a prop)

&gt; Would be nice to have some comments explaing what this &quot;overriding&quot; is all
&gt; about.

This is another feature from animations that isn&apos;t needed here. I&apos;ll see if I can remove it.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86100</commentid>
    <comment_count>8</comment_count>
      <attachid>22315</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-16 13:58:09 -0700</bug_when>
    <thetext>Created attachment 22315
updated animation controller patch

This patch is updated after comments by smfr and hyatt. It has a regression, in that running transitions will be reset if style changes. A fix for that is in the works, but I&apos;d like to progress the review anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86696</commentid>
    <comment_count>9</comment_count>
      <attachid>22442</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-22 18:37:59 -0700</bug_when>
    <thetext>Created attachment 22442
Patch update 2

This patch adds the code to not restart running transitions unless the to value changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86781</commentid>
    <comment_count>10</comment_count>
      <attachid>22442</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 14:55:21 -0700</bug_when>
    <thetext>Comment on attachment 22442
Patch update 2

CSSComputedStyleDeclaration.cpp should not be in this patch.

Please get rid of the loadComplete stuff.  Animations need to just start immediately when the now keyword is used.  It&apos;s completely wrong to wait until the entire document has loaded (in an incremental world you just can&apos;t hold off starting animations because some ad in an iframe never completes).  The animation feature will just be completely bizarre and unpredictable in the real world if a user is able to interact with the page for many seconds before animations are allowed to run.

Is &quot;#pragma mark -&quot; really necessary?  We don&apos;t tend to put those in WebCore code.  Really that just signals that the file needs to be split up, which we could do post-landing.

This seems wrong:

+    HTMLElement* elementForEventDispatch()
+    {
+        if (m_object-&gt;node() &amp;&amp; m_object-&gt;node()-&gt;isHTMLElement())
+            return static_cast&lt;HTMLElement*&gt;(m_object-&gt;node());
+        return 0;
+    }

Why would I need an HTMLElement to do event dispatch?  Animation events should be fired on all types of elements...

I notice that HTMLElements are used in several places.  This seems wrong and this code needs to be changed to use Element instead.

If you really want Transition to be refcounted, then I would suggest moving to a model where you have Vector&lt;RefPtr&lt;Transition&gt; &gt;* m_transitions in the RenderStyle.  If someone outside of RenderStyle is holding on to a ref to a transition, then I might also suggest having the RenderStyle transition &quot;list node&quot; object hold the refcounted &quot;transition&quot; object as a member in each node of the list.

The mixture though just makes everything look really strange, since RenderStyle doesn&apos;t really pay attention to the refcounting (it clones m_next chains in the assignment operator and copy constructor).

I also think Transition should be renamed to something more generic that is suitable for both Animations and Transitions (but am unsure of what that name should be).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86783</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 15:04:55 -0700</bug_when>
    <thetext>g_propertyWrappers should be gPropertyWrappers.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86956</commentid>
    <comment_count>12</comment_count>
      <attachid>22478</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-25 13:05:13 -0700</bug_when>
    <thetext>Created attachment 22478
Patch update 3

Updated patch after hyatt&apos;s review. Still waiting on the RefPtr fix for Animation lists in RenderStyle.
That update will come soon (fingers crossed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87459</commentid>
    <comment_count>13</comment_count>
      <attachid>22571</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-30 18:28:10 -0700</bug_when>
    <thetext>Created attachment 22571
Patch Update 4

This patch includes all the review fixes (Animations now stored in Vector). It also fixes a running transition bug, and moves Animations to the static create() syntax. I think it&apos;s ready to land now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87776</commentid>
    <comment_count>14</comment_count>
      <attachid>22571</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-08-04 12:03:08 -0700</bug_when>
    <thetext>Comment on attachment 22571
Patch Update 4

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87877</commentid>
    <comment_count>15</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-08-05 10:11:39 -0700</bug_when>
    <thetext>Committed r35545
	A	WebCore/manual-tests/transition-left.html
	A	WebCore/manual-tests/transition-timing-functions.html
	A	WebCore/manual-tests/transition-delay.html
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderWidget.cpp
	M	WebCore/rendering/style/RenderStyle.cpp
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/dom/EventNames.h
	M	WebCore/dom/Document.cpp
	M	WebCore/dom/Document.h
	M	WebCore/dom/Node.cpp
	M	WebCore/dom/Element.cpp
	M	WebCore/dom/Node.h
	M	WebCore/ChangeLog
	M	WebCore/css/CSSValueKeywords.in
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSStyleSelector.h
	M	WebCore/css/CSSParser.cpp
	M	WebCore/css/CSSValue.h
	M	WebCore/css/CSSPropertyNames.in
	M	WebCore/css/CSSComputedStyleDeclaration.cpp
	M	WebCore/css/CSSParser.h
	M	WebCore/css/CSSTimingFunctionValue.h
	M	WebCore/history/CachedPage.cpp
	M	WebCore/page/AnimationController.h
	M	WebCore/page/AnimationController.cpp
	M	WebCore/page/Frame.cpp
	M	LayoutTests/ChangeLog
	M	LayoutTests/fast/css/computed-style-without-renderer-expected.txt
	M	LayoutTests/fast/css/computed-style-expected.txt
	M	LayoutTests/svg/css/getComputedStyle-basic-expected.txt

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22151</attachid>
            <date>2008-07-07 19:04:46 -0700</date>
            <delta_ts>2008-07-16 13:58:09 -0700</delta_ts>
            <desc>Improvement of AnimationController</desc>
            <filename>patch4-new-animation-controller.patch</filename>
            <type>text/plain</type>
            <size>139621</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDEzNjUy
OTUuLjIxNGRmOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTE4Nyw2ICsxODgsMTAgQEAgc3RhdGljIGNvbnN0IGludCBjb21wdXRlZFBy
b3BlcnRpZXNbXSA9IHsKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5LAorICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRp
bWluZ0Z1bmN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwK
QEAgLTEwNTUsNiArMTA2MCw2MyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9ucygp
OworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0
LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHQtPmRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EdXJhdGlvbjogeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRy
YW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7
CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh0LT5kdXJhdGlv
bigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246
IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0
ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAg
ICAgICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSB0LT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHRm
LngxKCksIHRmLnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCk7
CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNy
ZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogeworICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNp
dGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0
OyB0ID0gdC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+dHJh
bnNpdGlvblByb3BlcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09IGNBbmltYXRlTm9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g
ImFsbCI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcCkp
OworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShuYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgiYWxsIiwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbToKQEAgLTExMTIsMTEgKzExNzQsNiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFBhZGRpbmdTdGFydDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2U6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgotICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50OgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICAgICAgLy8gRklYTUU6
IFRoZSBhYm92ZSBhcmUgdW5pbXBsZW1lbnRlZC4KICAgICAgICAgICAgIGJyZWFrOwogI2lmIEVO
QUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAyMDFmODgxLi5kZDNjZDk2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
QEAgLTEyODAsOCArMTI4MCw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvblByb3BlcnR5OiB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsOwpAQCAtMTY5
NSw4ICsxNjk1LDkgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8
Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPgogCiBib29sIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogewotICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50IH07CisgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVy
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24gfTsKICAgICBjb25zdCBpbnQgbnVtUHJvcGVydGllcyA9
IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9wZXJ0aWVzWzBdKTsKICAgICAKICAgICBT
aG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb24pOwpA
QCAtMjE5MiwyMCArMjE5MywyMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHko
aW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvbkR1
cmF0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VEZWxheSgpCiB7
CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAg
ICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm93KQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsKICAgICBpZiAodmFsaWRVbml0
KHZhbHVlLCBGVGltZSwgbV9zdHJpY3QpKQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2
YWx1ZS0+dW5pdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQoKQorUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUR1cmF0aW9uKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVJbmZpbml0ZSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXJ8Rk5v
bk5lZywgbV9zdHJpY3QpKQorICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZUaW1lLCBtX3N0cmlj
dCkpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKICAgICByZXR1
cm4gMDsKIH0KQEAgLTIyMjgsNyArMjIyOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRpbWlu
Z0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZVRpbWluZ0Z1bmN0aW9uKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVF
YXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVFYXNlSW5PdXQpCkBAIC0yMjkyLDE4ICsyMjkzLDE4IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiBy
ZXN1bHQpCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHBy
b3BJZCkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
RHVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlv
bkR1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EZWxheToKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEZWxheSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRDb3Vu
dDoKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uUmVwZWF0
Q291bnQoKTsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
bkR1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUR1cmF0aW9u
KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1
bmN0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRp
bWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggZjY0ZDM2My4uNmNmZWMxNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTg0
LDExICs4NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYWRkRmlsbFZh
bHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpOwog
CiAgICAgICAgIHZvaWQgYWRkVHJhbnNpdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWws
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZVRyYW5zaXRpb25EdXJhdGlvbigpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpOwotICAgICAgICBib29sIHBhcnNl
VGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJl
c3VsdCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VEZWxheSgpOworICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUR1cmF0aW9uKCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKworICAgICAgICBib29sIHBh
cnNlVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUm
IHJlc3VsdCk7CiAgICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJ
ZCwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAgICAgICBib29sIHBhcnNlVHJhbnNpdGlvblNob3J0
aGFuZChib29sIGltcG9ydGFudCk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3Mv
Q1NTUHJvcGVydHlOYW1lcy5pbiBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KaW5k
ZXggNDg5MmFlMS4uNTAzOTRlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlO
YW1lcy5pbgorKysgYi9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCkBAIC0xNDIsMTEg
KzE0Miw2IEBAIHdvcmQtc3BhY2luZwogd29yZC13cmFwCiB6LWluZGV4CiB6b29tCi0td2Via2l0
LXRyYW5zaXRpb24KLS13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbgotLXdlYmtpdC10cmFuc2l0
aW9uLXByb3BlcnR5Ci0td2Via2l0LXRyYW5zaXRpb24tcmVwZWF0LWNvdW50Ci0td2Via2l0LXRy
YW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LWFwcGVhcmFuY2UKIC13ZWJraXQtYmFj
a2dyb3VuZC1jbGlwCiAtd2Via2l0LWJhY2tncm91bmQtY29tcG9zaXRlCkBAIC0yMjUsNiArMjIw
LDExIEBAIHpvb20KIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbgogLXdlYmtpdC10cmFuc2Zvcm0t
b3JpZ2luLXgKIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15Cistd2Via2l0LXRyYW5zaXRpb24K
Ky13ZWJraXQtdHJhbnNpdGlvbi1kZWxheQorLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uCist
d2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHkKKy13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVu
Y3Rpb24KIC13ZWJraXQtdXNlci1kcmFnCiAtd2Via2l0LXVzZXItbW9kaWZ5CiAtd2Via2l0LXVz
ZXItc2VsZWN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM2YzY1MmQuLjNiOWE0NTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xODIsMTUgKzE4MiwxNSBAQCBIQU5ETEVf
RklMTF9MQVlFUl9JTkhFUklUX0FORF9JTklUSUFMKG1hc2ssIE1hc2ssIHByb3AsIFByb3ApCiAj
ZGVmaW5lIEhBTkRMRV9NQVNLX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSBcCiBIQU5ETEVfRklM
TF9MQVlFUl9WQUxVRShtYXNrLCBNYXNrLCBwcm9wLCBQcm9wLCB2YWx1ZSkKIAotI2RlZmluZSBI
QU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKKyNkZWZp
bmUgSEFORExFX01VTFRJTEFZRVJfSU5IRVJJVF9BTkRfSU5JVElBTChsYXllclR5cGUsIExheWVy
VHlwZSwgcHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgVHJhbnNpdGlvbiog
Y3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotICAgIFRyYW5zaXRp
b24qIHByZXZDaGlsZCA9IDA7IFwKLSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyUGFyZW50ID0g
bV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKTsgXAorICAgIExheWVyVHlwZSogY3VyckNoaWxk
ID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUjI3MoKTsgXAorICAgIExheWVyVHlwZSogcHJl
dkNoaWxkID0gMDsgXAorICAgIGNvbnN0IExheWVyVHlwZSogY3VyclBhcmVudCA9IG1fcGFyZW50
U3R5bGUtPmxheWVyVHlwZSMjcygpOyBcCiAgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3VyclBh
cmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwKICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAog
ICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovIFwKLSAgICAgICAgICAg
IGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9
IG5ldyBMYXllclR5cGUoKTsgXAogICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJD
aGlsZCk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKGN1cnJQ
YXJlbnQtPnByb3AoKSk7IFwKQEAgLTIwNCwzNCArMjA0LDM1IEBAIGlmIChpc0luaGVyaXQpIHsg
XAogICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICAgICAgY3VyckNoaWxk
ID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKICAgICB9IFwKLX0gZWxzZSBpZiAoaXNJbml0aWFsKSB7
IFwKLSAgICBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3NUcmFuc2l0aW9u
cygpOyBcCi0gICAgY3VyckNoaWxkLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFu
c2l0aW9uIyNQcm9wKCkpOyBcCisgICAgcmV0dXJuOyBcCit9IFwKK2lmIChpc0luaXRpYWwpIHsg
XAorICAgIExheWVyVHlwZSogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUj
I3MoKTsgXAorICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQ
cm9wKCkpOyBcCiAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3VyckNo
aWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAogICAgICAgICBjdXJyQ2hpbGQt
PmNsZWFyIyNQcm9wKCk7IFwKKyAgICByZXR1cm47IFwKIH0KIAotI2RlZmluZSBIQU5ETEVfVFJB
TlNJVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgeyBcCi1IQU5ETEVfVFJBTlNJVElPTl9J
TkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQgfHwgaXNJbml0
aWFsKSBcCi0gICAgcmV0dXJuOyBcCi1UcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5h
Y2Nlc3NUcmFuc2l0aW9ucygpOyBcCi1UcmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBcCisjZGVm
aW5lIEhBTkRMRV9NVUxUSUxBWUVSX1ZBTFVFKGxheWVyVHlwZSwgTGF5ZXJUeXBlLCBwcm9wLCBQ
cm9wLCB2YWx1ZSkgeyBcCitIQU5ETEVfTVVMVElMQVlFUl9JTkhFUklUX0FORF9JTklUSUFMKGxh
eWVyVHlwZSwgTGF5ZXJUeXBlLCBwcm9wLCBQcm9wKSBcCitMYXllclR5cGUqIGN1cnJDaGlsZCA9
IG1fc3R5bGUtPmFjY2VzcyMjTGF5ZXJUeXBlIyNzKCk7IFwKK0xheWVyVHlwZSogcHJldkNoaWxk
ID0gMDsgXAogaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAgICAvKiBXYWxrIGVhY2gg
dmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBsYXllcnMgYXMgbmVl
ZGVkLiAqLyBcCiAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSk7IFwKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZh
bHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCiAgICAgICAgIGlmICghY3VyckNoaWxkKSB7IFwK
LSAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllciB0byBob2xkIHRoaXMgdmFs
dWUgKi8gXAotICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IFRyYW5zaXRpb24oKTsgXAotICAg
ICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKKyAgICAgICAgLyogTmVl
ZCB0byBtYWtlIGEgbmV3IGxheWVyIHRvIGhvbGQgdGhpcyB2YWx1ZSAqLyBcCisgICAgICAgIGN1
cnJDaGlsZCA9IG5ldyBMYXllclR5cGUoKTsgXAorICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQo
Y3VyckNoaWxkKTsgXAogICAgICAgICB9IFwKLSAgICAgICAgbWFwVHJhbnNpdGlvbiMjUHJvcChj
dXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKKyAgICAg
ICAgbWFwIyNQcm9wKGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtKGkpKTsgXAogICAgICAgICBw
cmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7IFwKICAgICAgICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5u
ZXh0KCk7IFwKICAgICB9IFwKIH0gZWxzZSB7IFwKLSAgICBtYXBUcmFuc2l0aW9uIyNQcm9wKGN1
cnJDaGlsZCwgdmFsdWUpOyBcCisgICAgbWFwIyNQcm9wKGN1cnJDaGlsZCwgdmFsdWUpOyBcCiAg
ICAgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKIH0gXAogd2hpbGUgKGN1cnJDaGls
ZCkgeyBcCkBAIC0yNDAsNiArMjQxLDEyIEBAIHdoaWxlIChjdXJyQ2hpbGQpIHsgXAogICAgIGN1
cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiB9IH0KIAorI2RlZmluZSBIQU5ETEVfVFJB
TlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRMRV9NVUxUSUxB
WUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNpdGlvbiwgVHJhbnNpdGlvbiwgcHJvcCwgUHJv
cCkKKyAgICAKKyNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFs
dWUpIFwKK0hBTkRMRV9NVUxUSUxBWUVSX1ZBTFVFKHRyYW5zaXRpb24sIFRyYW5zaXRpb24sIHBy
b3AsIFByb3AsIHZhbHVlKQorCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0NPTkQocHJvcElELCBw
cm9wLCBQcm9wKSBcCiBpZiAoaWQgPT0gcHJvcElEKSB7IFwKICAgICBtX3N0eWxlLT5zZXQjI1By
b3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXApAQCAtNDc0OSwxOCArNDc1NiwxOCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUp
CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKICAgICAgICAgICAgIG1fc3R5bGUtPmluaGVy
aXRUcmFuc2l0aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6CisgICAgICAg
IEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKGRlbGF5LCBEZWxheSwgdmFsdWUpCisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgogICAg
ICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShkdXJhdGlvbiwgRHVyYXRpb24sIHZhbHVlKQog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBl
YXRDb3VudDoKLSAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocmVwZWF0Q291bnQsIFJl
cGVhdENvdW50LCB2YWx1ZSkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5OgorICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRSh0cmFuc2l0aW9uUHJvcGVy
dHksIFRyYW5zaXRpb25Qcm9wZXJ0eSwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICBIQU5E
TEVfVFJBTlNJVElPTl9WQUxVRSh0aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVl
KQogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Q
cm9wZXJ0eToKLSAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcGVydHksIFByb3Bl
cnR5LCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlk
OgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgpAQCAt
NTAwMSwxMCArNTAwOCwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRp
b24oRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGxheWVyLT5zZXRZUG9z
aXRpb24obCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1cmF0
aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwRHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNT
U19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxl
Ojppbml0aWFsVHJhbnNpdGlvbkR1cmF0aW9uKCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRE
dXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01MDEzLDM1ICs1MDIwLDM2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwVHJhbnNpdGlvbkR1cmF0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2
CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpCi0gICAgICAgIHRyYW5zaXRp
b24tPnNldER1cmF0aW9uKGludCgxMDAwKnByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkp
KTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXRE
dXJhdGlvbihpbnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEw
MDAuMGYpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25SZXBlYXRD
b3VudChUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hcERlbGF5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2
YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1Nf
SU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRSZXBlYXRDb3VudChSZW5kZXJTdHls
ZTo6aW5pdGlhbFRyYW5zaXRpb25SZXBlYXRDb3VudCgpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
c2V0RGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJl
cGVhdENvdW50KC0xKTsKLSAgICBlbHNlCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENv
dW50KGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm93KQorICAgICAgICB0cmFuc2l0aW9u
LT5zZXREZWxheSgwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5w
cmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQorICAgICAgICAgICAg
dHJhbnNpdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZh
bHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7CisgICAgfQogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRpbWluZ0Z1
bmN0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpKSB7CkBAIC01MDYzLDcgKzUwNzEsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0
aW9uLCBDU1NWYQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKICAg
ICBpZiAodmFsdWUtPmlzVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewogICAgICAg
ICBDU1NUaW1pbmdGdW5jdGlvblZhbHVlKiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENT
U1RpbWluZ0Z1bmN0aW9uVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFRp
bWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIHRp
bWluZ0Z1bmN0aW9uLT54MSgpLCB0aW1pbmdGdW5jdGlvbi0+eTEoKSwgdGltaW5nRnVuY3Rpb24t
PngyKCksIHRpbWluZ0Z1bmN0aW9uLT55MigpKSk7CkBAIC01MDczLDcgKzUwODEsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uLCBDU1NWYQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9u
UHJvcGVydHkoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNp
dGlvblByb3BlcnR5KCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHkoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUHJvcGVydHkoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTUwODEsNyArNTA4OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWFwVHJhbnNpdGlvblByb3BlcnR5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVl
KiB2CiAgICAgICAgIHJldHVybjsKIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIHRyYW5z
aXRpb24tPnNldFByb3BlcnR5KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKTsKKyAgICB0cmFu
c2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHkocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
OwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVl
KiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4
IDAwYjllNjguLmZkY2VmOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKQEAgLTIwNCw5ICsyMDQs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBD
U1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9u
KiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJh
bnNpdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvblRpbWluZ0Z1
bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcERlbGF5KFRy
YW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcER1cmF0aW9uKFRyYW5zaXRp
b24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcFRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRp
b24qLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFu
c2l0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENT
U1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1Zh
bHVlS2V5d29yZHMuaW4gYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCmluZGV4IDNj
YmZiODUuLmIzOWUxNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMu
aW4KKysrIGIvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgpAQCAtNTYzLDYgKzU2Mywx
MSBAQCB2aXN1YWwKIGxpbmVzCiAKICMKKyMgQ1NTX1BST1BfX1dFQktJVF9UUkFOU0lUSU9OX0RF
TEFZCisjCitub3cKKworIwogIyBDU1NfUFJPUF9fV0VCS0lUX1RSQU5TSVRJT05fVElNSU5HX0ZV
TkNUSU9OCiAjCiBlYXNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZGFiNmRmMC4uYjViMTgxZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhP
YmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNTU0hl
bHBlci5oIgpAQCAtMjk3LDYgKzI5OCw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJh
bWUsIGJvb2wgaXNYSFRNTCkKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgICwg
bV9pbkxvd0JhbmR3aWR0aERpc3BsYXkoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fbG9hZENvbXBs
ZXRlKGZhbHNlKQogewogICAgIG1fZG9jdW1lbnQucmVzZXRTa2lwcGluZ1JlZih0aGlzKTsKIApA
QCAtMTE2NCw4ICsxMTY2LDEzIEBAIGJhaWxfb3V0OgogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVS
ZW5kZXJpbmcoKQogewotICAgIGlmIChoYXNDaGFuZ2VkQ2hpbGQoKSkKKyAgICBpZiAoaGFzQ2hh
bmdlZENoaWxkKCkpIHsKICAgICAgICAgcmVjYWxjU3R5bGUoTm9DaGFuZ2UpOworICAgIH0KKyAg
ICAKKyAgICAvLyB0ZWxsIHRoZSBhbmltYXRpb24gY29udHJvbGxlciB0aGF0IHRoZSBzdHlsZSBp
cyBhbGwgc2V0dXAgYW5kIGl0IGNhbiBzdGFydCBhbmltYXRpb25zCisgICAgaWYgKG1fZnJhbWUp
CisgICAgICAgIG1fZnJhbWUtPmFuaW1hdGlvbigpLT5zdHlsZUlzU2V0dXAoKTsgICAgCiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpCkBAIC0xNTQ3LDYgKzE1
NTQsOCBAQCB2b2lkIERvY3VtZW50OjppbXBsaWNpdENsb3NlKCkKICAgICBpZiAoZikKICAgICAg
ICAgZi0+bG9hZGVyKCktPnN0YXJ0SWNvbkxvYWRlcigpOwogCisgICAgbV9sb2FkQ29tcGxldGUg
PSB0cnVlOworCiAgICAgZGlzcGF0Y2hJbWFnZUxvYWRFdmVudHNOb3coKTsKICAgICB0aGlzLT5k
aXNwYXRjaFdpbmRvd0V2ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoZikK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCmluZGV4IDBlOGFiMWEuLjNlZmMwYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzQ4LDYgKzc0OCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24oKTsKICAgICB2b2lkIGNh
bmNlbEZvY3VzQXBwZWFyYW5jZVVwZGF0ZSgpOwogICAgIAorICAgIC8vIGZvciBhbmltYXRpb25z
IHRvIGtub3cgd2hldGhlciB0aGV5IGNhbiBydW4geWV0IG9yIG5vdAorICAgIGJvb2wgbG9hZENv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkQ29tcGxldGU7IH0KKyAgICAKICAgICAvLyBG
RiBtZXRob2QgZm9yIGFjY2Vzc2luZyB0aGUgc2VsZWN0aW9uIGFkZGVkIGZvciBjb21wYXRhYmls
aXR5LgogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgCkBAIC0x
MDQxLDYgKzEwNDQsOCBAQCBwcml2YXRlOgogI2lmIFVTRShMT1dfQkFORFdJRFRIX0RJU1BMQVkp
CiAgICAgYm9vbCBtX2luTG93QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisgICAgYm9vbCBt
X2xvYWRDb21wbGV0ZTsgICAgLy8gZm9yIGFuaW1hdGlvbnMgdG8ga25vdyB3aGV0aGVyIG9yIG5v
dCB0aGV5IGNhbiBydW4geWV0CiB9OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudDo6aGFzRWxlbWVu
dFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzgzYTdkMi4u
ODFiYjkwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTc1MSw2ICs3NTEsMTAgQEAgdm9pZCBFbGVtZW50OjpyZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChj
aGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlICpu
ZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRo
aXMpOwogICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRpZmYoY3VycmVudFN0eWxlLCBuZXdTdHls
ZSk7CisKKyAgICAgICAgaWYgKHN0eWxlQ2hhbmdlVHlwZSgpID09IEFuaW1hdGFibGVTdHlsZUNo
YW5nZSkKKyAgICAgICAgICAgIGNoID0gRm9yY2U7CisKICAgICAgICAgaWYgKGNoID09IERldGFj
aCB8fCAhY3VycmVudFN0eWxlKSB7CiAgICAgICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAgICAg
ICAgICAgICAgICBkZXRhY2goKTsKQEAgLTc4NCw5ICs3ODgsMTEgQEAgdm9pZCBFbGVtZW50Ojpy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiAgICAgICAgICAgICAgICAgbmV3U3R5bGUt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChjaCAhPSBOb0NoYW5nZSkKLSAgICAgICAgICAgIHNldFJlbmRlclN0eWxl
KG5ld1N0eWxlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hhbmdlZCgpICYmIChkb2N1bWVudCgpLT51
c2VzU2libGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkg
eworICAgICAgICBpZiAoY2ggIT0gTm9DaGFuZ2UpIHsKKyAgICAgICAgICAgIGlmIChuZXdTdHls
ZSkgeworICAgICAgICAgICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VkKCkgJiYgKGRvY3VtZW50KCktPnVzZXNT
aWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkpKSB7CiAg
ICAgICAgICAgICAvLyBBbHRob3VnaCBubyBjaGFuZ2Ugb2NjdXJyZWQsIHdlIHVzZSB0aGUgbmV3
IHN0eWxlIHNvIHRoYXQgdGhlIGNvdXNpbiBzdHlsZSBzaGFyaW5nIGNvZGUgd29uJ3QgZ2V0CiAg
ICAgICAgICAgICAvLyBmb29sZWQgaW50byBiZWxpZXZpbmcgdGhpcyBzdHlsZSBpcyB0aGUgc2Ft
ZS4gIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIGRvY3VtZW50IGFjdHVhbGx5IHVzZXMK
ICAgICAgICAgICAgIC8vIHNpYmxpbmcvZGVzY2VuZGFudCBydWxlcywgc2luY2Ugb3RoZXJ3aXNl
IGl0IGlzbid0IHBvc3NpYmxlIGZvciBhbmNlc3RvciBzdHlsZXMgdG8gYWZmZWN0IHNoYXJpbmcg
b2YKQEAgLTgwMCw3ICs4MDYsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hh
bmdlIGNoYW5nZSkKICAgICAgICAgbmV3U3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFy
ZW5hKCkpOwogCiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpIHsKLSAgICAgICAgICAgIGlm
ICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bvc2l0aW9uYWxSdWxl
cykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlKQorICAgICAgICAgICAg
aWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9zaXRpb25hbFJ1
bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCiAgICAgICAgICAg
ICAgICAgY2hhbmdlID0gRm9yY2U7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
Y2hhbmdlID0gY2g7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9XZWJD
b3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXggODcyYzZjZi4uZDI4OTgyOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApA
QCAtMTE5LDYgKzExOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVudE5h
bWVzIHsKICAgICBtYWNybyhwcm9ncmVzcykgXAogICAgIG1hY3JvKHN0YWxsZWQpIFwKICAgICBc
CisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uRW5kKSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0
aW9uU3RhcnQpIFwKKyAgICBtYWNybyh3ZWJraXRBbmltYXRpb25JdGVyYXRpb24pIFwKKyAgICBc
CisgICAgbWFjcm8od2Via2l0VHJhbnNpdGlvbkVuZCkgXAorICAgIFwKIC8vIGVuZCBvZiBET01f
RVZFTlRfTkFNRVNfRk9SX0VBQ0gKIAogI2lmbmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9C
QUxTCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IGMyOTFiNjAuLjQzNWQwMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBO
b2RlOjpzZXRDaGFuZ2VkKFN0eWxlQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQogICAgIGlmICgoY2hh
bmdlVHlwZSAhPSBOb1N0eWxlQ2hhbmdlKSAmJiAhYXR0YWNoZWQoKSkgLy8gY2hhbmdlZCBjb21w
YXJlZCB0byB3aGF0PwogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIShjaGFuZ2VUeXBlID09
IElubGluZVN0eWxlQ2hhbmdlICYmIG1fc3R5bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlKSkK
KyAgICBpZiAoY2hhbmdlVHlwZSA+IChTdHlsZUNoYW5nZVR5cGUpbV9zdHlsZUNoYW5nZSkKICAg
ICAgICAgbV9zdHlsZUNoYW5nZSA9IGNoYW5nZVR5cGU7CiAKICAgICBpZiAobV9zdHlsZUNoYW5n
ZSAhPSBOb1N0eWxlQ2hhbmdlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9X
ZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNjBmN2E5Yy4uMjAzNzBkMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNjAsNyArNjAsNyBA
QCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGE7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNoYW5nZSwgSW5saW5lU3R5bGVDaGFu
Z2UsIEZ1bGxTdHlsZUNoYW5nZSB9OworZW51bSBTdHlsZUNoYW5nZVR5cGUgeyBOb1N0eWxlQ2hh
bmdlLCBJbmxpbmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hhbmdlLCBBbmltYXRhYmxlU3R5bGVD
aGFuZ2UgfTsKIAogLy8gdGhpcyBjbGFzcyBpbXBsZW1lbnRzIG5vZGVzLCB3aGljaCBjYW4gaGF2
ZSBhIHBhcmVudCBidXQgbm8gY2hpbGRyZW46CiBjbGFzcyBOb2RlIDogcHVibGljIFRyZWVTaGFy
ZWQ8Tm9kZT4gewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCmluZGV4IDJjZjhmNDYuLjYyNGI5ZWUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAorKysgYi9XZWJDb3JlL2hp
c3RvcnkvQ2FjaGVkUGFnZS5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIENhY2hlZFBhZ2U6
OnJlc3RvcmUoUGFnZSogcGFnZSkKICAgICAgICAgbV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT51bnBhdXNlQW5pbWF0aW9ucygpOwogI2VuZGlmCiAKLSAgICBtYWluRnJhbWUtPmFu
aW1hdGlvbigpLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgbWFpbkZyYW1lLT5hbmltYXRpb24o
KS0+cmVzdW1lQW5pbWF0aW9ucyhtX2RvY3VtZW50LmdldCgpKTsKIAogICAgIG1haW5GcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNldE1vdXNlUHJlc3NOb2RlKG1vdXNlUHJlc3NOb2RlKCkpOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcCBi
L1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA0NDRlNmI0Li45N2Q5
MmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw5IEBA
CiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNDMsNiArNDUs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIGNBbmltYXRp
b25UaW1lckRlbGF5ID0gMC4wMjU7CiAKK3N0YXRpYyB2b2lkIHNldENoYW5nZWQoTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRv
Y3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKKyAgICBub2RlLT5zZXRDaGFuZ2VkKEFuaW1hdGFi
bGVTdHlsZUNoYW5nZSk7Cit9CisKIC8vIFRoZSBlcHNpbG9uIHZhbHVlIHdlIHBhc3MgdG8gVW5p
dEJlemllcjo6c29sdmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdvaW5nIHRvIHJ1biBv
dmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBhbmltYXRpb24sIHRoZSBtb3Jl
IHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24gcmVzdWx0IHRvIGF2b2lk
IHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9u
KGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQpAQCAt
NTUsMTM3ICs2Myw4MTYgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1
bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngKICAgICByZXR1cm4gYmV6
aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwogfQogCi1jbGFzcyBDb21wb3Np
dGVJbXBsaWNpdEFuaW1hdGlvbjsKKyNwcmFnbWEgbWFyayAtCiAKLWNsYXNzIEltcGxpY2l0QW5p
bWF0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBJbXBsaWNpdEFuaW1h
dGlvbihjb25zdCBUcmFuc2l0aW9uKik7Ci0gICAgfkltcGxpY2l0QW5pbWF0aW9uKCk7CitjbGFz
cyBDb21wb3NpdGVBbmltYXRpb247CitjbGFzcyBBbmltYXRpb25CYXNlOwogCi0gICAgdm9pZCBh
bmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHls
ZSomIGFuaW1hdGVkU3R5bGUpOworY2xhc3MgQW5pbWF0aW9uVGltZXJCYXNlIHsKK3B1YmxpYzoK
KyAgICBBbmltYXRpb25UaW1lckJhc2UoQW5pbWF0aW9uQmFzZSogYW5pbSkKKyAgICA6IG1fdGlt
ZXIodGhpcywgJkFuaW1hdGlvblRpbWVyQmFzZTo6dGltZXJGaXJlZCkKKyAgICAsIG1fYW5pbShh
bmltKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgfQorICAg
IHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQ9MCkKKyAgICB7CisgICAgICAgIG1fdGltZXIu
c3RhcnRPbmVTaG90KHRpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbmNlbFRpbWVy
KCkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikgPSAwOworICAg
IAorcHJpdmF0ZToKKyAgICBUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+IG1fdGltZXI7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgQW5pbWF0aW9uQmFzZSogbV9hbmltOworfTsKIAotICAgIHZvaWQg
cmVzZXQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGZyb20sIFJlbmRlclN0eWxlKiB0byk7
CitjbGFzcyBBbmltYXRpb25FdmVudERpc3BhdGNoZXIgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJC
YXNlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25FdmVudERpc3BhdGNoZXIoQW5pbWF0aW9uQmFz
ZSogYW5pbSkgCisgICAgOiBBbmltYXRpb25UaW1lckJhc2UoYW5pbSkKKyAgICAsIG1fcHJvcGVy
dHkoLTEpCisgICAgLCBtX3Jlc2V0KGZhbHNlKQorICAgICwgbV9lbGFwc2VkVGltZSgtMSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcigp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBib29sIHJlc2V0
LCAKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRv
dWJsZSBlbGFwc2VkVGltZSkKKyAgICB7CisgICAgICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7Cisg
ICAgICAgIG1fbmFtZSA9IG5hbWU7CisgICAgICAgIG1fcHJvcGVydHkgPSBwcm9wZXJ0eTsKKyAg
ICAgICAgbV9yZXNldCA9IHJlc2V0OworICAgICAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsK
KyAgICAgICAgbV9lbGFwc2VkVGltZSA9IGVsYXBzZWRUaW1lOworICAgICAgICBBbmltYXRpb25U
aW1lckJhc2U6OnN0YXJ0VGltZXIoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHRp
bWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopOwogICAgIAotICAgIGRvdWJsZSBw
cm9ncmVzcygpIGNvbnN0OworcHJpdmF0ZToKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxl
bWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIGludCBtX3Byb3BlcnR5OworICAg
IGJvb2wgbV9yZXNldDsKKyAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7CisgICAgZG91Ymxl
IG1fZWxhcHNlZFRpbWU7Cit9OwogCi0gICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eTsgfQorY2xhc3MgQW5pbWF0aW9uVGltZXJDYWxsYmFjayA6IHB1YmxpYyBBbmlt
YXRpb25UaW1lckJhc2UgeworcHVibGljOgorICAgIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2soQW5p
bWF0aW9uQmFzZSogYW5pbSkgCisgICAgOiBBbmltYXRpb25UaW1lckJhc2UoYW5pbSkKKyAgICAs
IG1fZWxhcHNlZFRpbWUoMCkKKyAgICB7IH0KKyAgICB2aXJ0dWFsIH5BbmltYXRpb25UaW1lckNh
bGxiYWNrKCkgeyB9CiAgICAgCi0gICAgYm9vbCBmaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmluaXNoZWQ7IH0KLSAgICB2b2lkIHNldEZpbmlzaGVkKGJvb2wgZikgeyBtX2ZpbmlzaGVkID0g
ZjsgfQorICAgIHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFz
ZT4qKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQsIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCisgICAgeworICAgICAg
ICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKyAgICAgICAgbV9lbGFwc2VkVGltZSA9IGVsYXBz
ZWRUaW1lOworICAgICAgICBBbmltYXRpb25UaW1lckJhc2U6OnN0YXJ0VGltZXIodGltZW91dCk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Cisg
ICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Cit9OworCisjcHJhZ21hIG1hcmsgLQogICAgIAotICAg
IGJvb2wgc3RhbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YWxlOyB9Ci0gICAgdm9pZCBzZXRTdGFs
ZSgpIHsgbV9zdGFsZSA9IHRydWU7IH0KK2NsYXNzIEltcGxpY2l0QW5pbWF0aW9uOworY2xhc3Mg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CiAKK2NsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbiA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKGJv
b2wgc3VzcGVuZGVkLCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogYW5pbWF0aW9uQ29udHJv
bGxlcikKKyAgICA6IG1fc3VzcGVuZGVkKHN1c3BlbmRlZCkKKyAgICAsIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQorICAgICwgbV9udW1TdHlsZUlzU2V0dXBXYWl0
ZXJzKDApCisgICAgeyB9CisgICAgCisgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpCisgICAgewor
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV90cmFuc2l0aW9ucyk7CisgICAgfQorICAgIAorICAg
IFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgdm9pZCBzZXRBbmlt
YXRpbmcoYm9vbCBpbkFuaW1hdGluZyk7CisgICAgYm9vbCBhbmltYXRpbmcoKTsKKyAgICAKKyAg
ICBib29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zaXRpb25zLmNvbnRhaW5zKHByb3ApOyB9CisgICAgCisgICAgdm9pZCByZXNldFRyYW5z
aXRpb25zKFJlbmRlck9iamVjdCopOworICAgIHZvaWQgcmVzZXRBbmltYXRpb25zKFJlbmRlck9i
amVjdCopOworICAgIAorICAgIHZvaWQgY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJP
YmplY3QqKTsKKyAgICAKKyAgICB2b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCk7
CisgICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQp
OworICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFu
aW1hdGlvbnMoKTsKKyAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9z
dXNwZW5kZWQ7IH0KKyAgICAKKyAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGlu
dCBwcm9wZXJ0eSk7CisgICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25z
KGludCBwcm9wZXJ0eSk7CisgICAgCisgICAgdm9pZCBzdHlsZUlzU2V0dXAoKTsKKyAgICAKKyAg
ICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAg
ICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoYm9vbCB3YWl0aW5nKTsKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAg
CiBwcml2YXRlOgotICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgot
ICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV90b1N0eWxl
OworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj4gQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDsKKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwICAg
bV90cmFuc2l0aW9uczsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgbV9zdXNwZW5k
ZWQ7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fYW5pbWF0aW9uQ29udHJvbGxl
cjsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbV9udW1TdHlsZUlzU2V0dXBXYWl0
ZXJzOworfTsKIAotICAgIGludCBtX3Byb3BlcnR5OwotICAgIFRpbWluZ0Z1bmN0aW9uIG1fZnVu
Y3Rpb247Ci0gICAgZG91YmxlIG1fZHVyYXRpb247CisjcHJhZ21hIG1hcmsgLQogCi0gICAgaW50
IG1fcmVwZWF0Q291bnQ7CitjbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25CYXNlKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRp
b24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0p
OyAgICAKKyAgICB2aXJ0dWFsIH5BbmltYXRpb25CYXNlKCkKKyAgICB7CisgICAgICAgIGlmICht
X2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQKQorICAgICAgICAgICAg
bV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cChmYWxzZSk7CisgICAgfQorICAg
IAorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsg
fQorICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQor
ICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ICB7IHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKTsgfQorICAgIAorICAgIHZvaWQgY2FuY2VsVGltZXJzKCkKKyAgICB7CisgICAgICAgIG1f
YW5pbWF0aW9uVGltZXJDYWxsYmFjay5jYW5jZWxUaW1lcigpOworICAgICAgICBtX2FuaW1hdGlv
bkV2ZW50RGlzcGF0Y2hlci5jYW5jZWxUaW1lcigpOworICAgIH0KKyAgICAKKyAgICAvLyBBbmlt
YXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4g
ZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKKyAgICAvLyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0
ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZlcnJlZCByZXNwb25zZSBmcm9tIHRo
ZSBhbmltYXRvci4KKyAgICAvLyBJZiBzbywgd2Ugc3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHRo
YXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4K
KyAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBzdGFydCB0
aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byB0aGUgTE9PUElORyBvcgorICAgIC8vIEVORElORyBz
dGF0ZS4KKyAgICBlbnVtIEFuaW1TdGF0ZSB7IAorICAgICAgICBTVEFURV9ORVcsICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVu
bmluZyB5ZXQKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9USU1FUiwgICAgICAgICAvLyBzdGFy
dCB0aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX1NUQVJUX1dB
SVRfU1RZTEVfU0VUVVAsICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0
YXJ0IGFuaW1hdGlvbnMKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSwgICAgICAv
LyBhbmltYXRpb24gc3RhcnRlZCwgd2FpdGluZyBmb3IgcmVzcG9uc2UKKyAgICAgICAgU1RBVEVf
TE9PUElORywgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9u
IHJ1bm5pbmcsIGxvb3AgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBT
VEFURV9FTkRJTkcsICAgICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmlt
YXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAg
ICAgU1RBVEVfUEFVU0VEX1dBSVRfVElNRVIsICAgICAgICAvLyBhbmltYXRpb24gaW4gcGF1c2Ug
bW9kZSB3aGVuIGFuaW1hdGlvbiBzdGFydGVkCisgICAgICAgIFNUQVRFX1BBVVNFRF9XQUlUX1JF
U1BPTlNFLCAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCisg
ICAgICAgIFNUQVRFX1BBVVNFRF9SVU4sICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNl
ZCB3aGVuIGluIExPT1BJTkcgb3IgRU5ESU5HIHN0YXRlCisgICAgICAgIFNUQVRFX0RPTkUgICAg
ICAgICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQg
YW5kIHJlbW92ZWQKKyAgICB9OworICAgIAorICAgIGVudW0gQW5pbVN0YXRlSW5wdXQgeworICAg
ICAgICBTVEFURV9JTlBVVF9NQUtFX05FVywgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3
IGZyb20gYW55IHN0YXRlCisgICAgICAgIFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgICAg
Ly8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVTVEFS
VF9BTklNQVRJT04sICAvLyBmb3JjZSBhIHJlc3RhcnQgZnJvbSBhbnkgc3RhdGUKKyAgICAgICAg
U1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklSRUQsICAvLyBzdGFydCB0aW1lciBmaXJlZAorICAg
ICAgICBTVEFURV9JTlBVVF9TVFlMRV9TRVRVUCwgICAgICAgIC8vIHN0eWxlIGlzIHNldHVwLCBy
ZWFkeSB0byBzdGFydCBhbmltYXRpbmcKKyAgICAgICAgU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9T
RVQsICAgICAvLyBtX3N0YXJ0VGltZSB3YXMgc2V0CisgICAgICAgIFNUQVRFX0lOUFVUX0xPT1Bf
VElNRVJfRklSRUQsICAgLy8gbG9vcCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9F
TkRfVElNRVJfRklSRUQsICAgIC8vIGVuZCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBV
VF9QQVVTRV9PVkVSUklERSwgICAgIC8vIHBhdXNlIGFuIGFuaW1hdGlvbiBkdWUgdG8gb3ZlcnJp
ZGUKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFLCAgICAvLyByZXN1bWUgYW4g
b3ZlcnJpZGRlbiBhbmltYXRpb24KKyAgICAgICAgU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5O
SU5HLCAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5nCisgICAgICAgIFNUQVRFX0lOUFVU
X1BMQVlfU1RBVEVfUEFVU0VELCAgLy8gcGxheSBzdGF0ZSBydW5uaW5nIC0+IHBhdXNlZAorICAg
ICAgICBTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OICAgICAgIC8vIGZvcmNlIGFuIGVuZCBmcm9t
IGFueSBzdGF0ZQorICAgIH07CisgICAgCisgICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlz
IGluIE5FVyBzdGF0ZSB0byBzdGFydCBhbmltYXRpb24KKyAgICB2b2lkIHVwZGF0ZVN0YXRlTWFj
aGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKTsKKyAgICAKKyAgICAvLyBB
bmltYXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQsIGF0IHBhc3NlZCB0aW1lCisgICAgLy8gVGhp
cyBpcyBhIGNhbGxiYWNrIGFuZCBpcyBvbmx5IHJlY2VpdmVkIHdoZW4gUmVuZGVyT2JqZWN0Ojpz
dGFydEFuaW1hdGlvbigpIG9yIFJlbmRlck9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKCkgCisgICAg
Ly8gcmV0dXJucyB0cnVlLiBJZiBSZW5kZXJPYmplY3Q6OgorICAgIHZvaWQgb25BbmltYXRpb25T
dGFydFJlc3BvbnNlKGRvdWJsZSBzdGFydFRpbWUpOworICAgIAorICAgIC8vIENhbGxlZCB0byBj
aGFuZ2UgdG8gb3IgZnJvbSBwYXVzZWQgc3RhdGUKKyAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZShi
b29sIHJ1bm5pbmcpOworICAgIGJvb2wgcGxheVN0YXRlUGxheWluZygpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uOyB9CisgICAgCisgICAgYm9vbCB3YWl0aW5nVG9TdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX05FVyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9T
VEFSVF9XQUlUX1RJTUVSOyB9CisgICAgYm9vbCBwcmVhY3RpdmUoKSBjb25zdAorICAgIHsgcmV0
dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX05FVyB8fAorICAgICAgICAgICAgIG1fYW5pbVN0YXRl
ID09IFNUQVRFX1NUQVJUX1dBSVRfVElNRVIgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9
PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQIHx8CisgICAgICAgICAgICAgbV9hbmltU3Rh
dGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICB9CisgICAgYm9vbCBwb3N0YWN0
aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfRE9ORTsgfQorICAgIGJv
b2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gIXBvc3RhY3RpdmUoKSAmJiAhcHJlYWN0aXZlKCk7
IH0KKyAgICBib29sIHJ1bm5pbmcoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZSA8IDA7IH0K
KyAgICBib29sIGlzbmV3KCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVX
OyB9CisgICAgYm9vbCB3YWl0aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
U3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsgfQorICAgIGJvb2wgd2FpdGluZ0Zv
clN0eWxlU2V0dXAoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9X
QUlUX1NUWUxFX1NFVFVQOyB9CisgICAgYm9vbCB3YWl0aW5nRm9yRW5kRXZlbnQoKSBjb25zdCAg
eyByZXR1cm4gbV93YWl0aW5nRm9yRW5kRXZlbnQ7IH0KKyAgICAKKyAgICAvLyAiYW5pbWF0aW5n
IiBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBydW5uaW5nIHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0
byBrZWVwIGZpcmluZworICAgIC8vIChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQorICAgIHZv
aWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcgPSB0cnVlKSB7IG1fYW5pbWF0aW5nID0g
aW5BbmltYXRpbmc7IH0KKyAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW5nOyB9CisgICAgCisgICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91Ymxl
IG9mZnNldCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRl
QW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0
eWxlLCBSZW5kZXJTdHlsZSomIGlvQW5pbWF0ZWRTdHlsZSkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tID0g
MCwgY29uc3QgUmVuZGVyU3R5bGUqIHRvID0gMCkgeyB9CisgICAgCisgICAgdmlydHVhbCBib29s
IHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZv
aWQgYW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgIHZvaWQgYW5pbWF0aW9uRXZlbnREaXNwYXRj
aGVyRmlyZWQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
aW50IHByb3BlcnR5LCBib29sIHJlc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRp
bWUpOworICAgIAorICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IFRyYW5zaXRpb24qIGFu
aW0pIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uLT50cmFuc2l0aW9uc01hdGNoKGFuaW0pOyB9
CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogYW5pbSkgeyBt
X2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+KGFuaW0pOyB9CisgICAgCisgICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3aWxs
IG9ubHkgYmUgdGhlIGNhc2UgZm9yCisgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBpcyB1
c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKKyAgICAvLyBz
ZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3aWxs
IHByb2JhYmx5IG5vdCBnZXQKKyAgICAvLyBiYWNrIHRoZSBTVEFSVF9USU1FIGV2ZW50LgorICAg
IHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAK
KyAgICAvLyBEb2VzIHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2ZSB0aGUgZ2l2ZW4g
cHJvcGVydHk/CisgICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KGlu
dCBwcm9wZXJ0eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoIXdhaXRpbmdUb1N0YXJ0
KCkgJiYgIXBvc3RhY3RpdmUoKSkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KTsKKyAgICB9
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnRGb3JFdmVudERpc3Bh
dGNoKCkKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdC0+bm9kZSgpICYmIG1fb2JqZWN0LT5u
b2RlKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG1fb2JqZWN0LT5ub2RlKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIHsgfQorICAgIAorICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9jb21wQW5p
bTsgfQorICAgIAorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgd2hlbiB0aGUgY29ycmVzcG9uZGlu
ZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBkbyBhbnkgZXh0cmEgd29yaworICAgIHZp
cnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9CisgICAg
dmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9
CisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29sIHJlc2V0KSB7
IH0KKyAgICAKKyAgICB2b2lkIHByaW1lRXZlbnRUaW1lcnMoKTsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBBbmltU3RhdGUgbV9hbmltU3RhdGU7CiAgICAgaW50IG1faXRlcmF0aW9uOwogICAgIAot
ICAgIGJvb2wgbV9maW5pc2hlZDsgICAgCisgICAgYm9vbCBtX2FuaW1hdGluZzsgICAgICAgLy8g
dHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMgY29udGludWFsIHRpbWVyIGZpcmluZworICAg
IGJvb2wgbV93YWl0ZWRGb3JSZXNwb25zZTsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7Ci0gICAg
Ym9vbCBtX3BhdXNlZDsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAgUmVuZGVyT2JqZWN0
KiAgIG1fb2JqZWN0OwogICAgIAotICAgIGJvb2wgbV9zdGFsZTsKKyAgICBBbmltYXRpb25UaW1l
ckNhbGxiYWNrIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjazsKKyAgICBBbmltYXRpb25FdmVudERp
c3BhdGNoZXIgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXI7CisgICAgUmVmUHRyPFRyYW5zaXRp
b24+IG1fYW5pbWF0aW9uOworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wQW5pbTsKKyAg
ICBib29sIG1fd2FpdGluZ0ZvckVuZEV2ZW50OwogfTsKIAotY2xhc3MgQ29tcG9zaXRlSW1wbGlj
aXRBbmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIH5Db21wb3Np
dGVJbXBsaWNpdEFuaW1hdGlvbigpIHsgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7IH0K
LQotICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7Ci0KLSAgICBib29sIGFuaW1h
dGluZygpIGNvbnN0OwotCi0gICAgdm9pZCByZXNldChSZW5kZXJPYmplY3QqKTsKKyNwcmFnbWEg
bWFyayAtCiAKK2NsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2Ug
eworcHVibGljOgorICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5z
aXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0pCisgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkK
KyAgICAsIG1fcHJvcGVydHkodHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5KCkpCisgICAg
LCBtX292ZXJyaWRkZW4oZmFsc2UpCisgICAgLCBtX2Zyb21TdHlsZSgwKQorICAgICwgbV90b1N0
eWxlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlv
bigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOwor
ICAgICAgICAKKyAgICAgICAgLy8gSWYgd2Ugd2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQs
IHdlIG5lZWQgdG8gZmluaXNoIHRoZSBhbmltYXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAorICAg
ICAgICAvLyBhbmltYXRpb25zIHN0aWNrIGFyb3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisgICAg
ICAgIGlmICh3YWl0aW5nRm9yRW5kRXZlbnQoKSAmJiBtX29iamVjdCkKKyAgICAgICAgICAgIEFT
U0VSVCgwKTsKKyAgICAgICAgLyogc3BtYQorICAgICAgICAgICAgbV9vYmplY3QtPnRyYW5zaXRp
b25GaW5pc2hlZChtX3Byb3BlcnR5KTsKKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICAv
LyBEbyB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhl
IHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxlZAorICAgICAgICBpZiAoIXBvc3RhY3RpdmUo
KSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9FTkRfQU5JTUFU
SU9OLCAtMSk7ICAgICAKKyAgICB9CisgICAgCisgICAgaW50IHRyYW5zaXRpb25Qcm9wZXJ0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb25B
bmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpOworICAgIHZpcnR1YWwgYm9vbCBzdGFy
dEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0
aW9uKGJvb2wgcmVzZXQpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0
ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRT
dHlsZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSA9IDAs
IGNvbnN0IFJlbmRlclN0eWxlKiB0byA9IDApOworICAgIAorICAgIHZvaWQgc2V0T3ZlcnJpZGRl
bihib29sIGIpOworICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4g
bV9vdmVycmlkZGVuOyB9CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGFmZmVjdHNQ
cm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX2Zyb21TdHlsZSAmJiBtX3RvU3R5bGU7IH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5l
clR5cGUgaW5MaXN0ZW5lclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRv
Y3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGluRXZlbnRU
eXBlLCBkb3VibGUgaW5FbGFwc2VkVGltZSk7ICAgIAorICAgIAogcHJpdmF0ZToKLSAgICBIYXNo
TWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPiBtX2FuaW1hdGlvbnM7CisgICAgaW50IG1fcHJv
cGVydHk7CisgICAgYm9vbCBtX292ZXJyaWRkZW47CisgICAgCisgICAgLy8gVGhlIHR3byBzdHls
ZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCisgICAgUmVuZGVyU3R5bGUqIG1fZnJvbVN0eWxlOwor
ICAgIFJlbmRlclN0eWxlKiBtX3RvU3R5bGU7CiB9OwogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1w
bGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbikKLTogbV9mcm9tU3R5
bGUoMCkKLSwgbV90b1N0eWxlKDApCi0sIG1fcHJvcGVydHkodHJhbnNpdGlvbi0+cHJvcGVydHko
KSkKLSwgbV9mdW5jdGlvbih0cmFuc2l0aW9uLT50aW1pbmdGdW5jdGlvbigpKQotLCBtX2R1cmF0
aW9uKHRyYW5zaXRpb24tPmR1cmF0aW9uKCkgLyAxMDAwLjApCi0sIG1fcmVwZWF0Q291bnQodHJh
bnNpdGlvbi0+cmVwZWF0Q291bnQoKSkKLSwgbV9pdGVyYXRpb24oMCkKLSwgbV9maW5pc2hlZChm
YWxzZSkKLSwgbV9zdGFydFRpbWUoY3VycmVudFRpbWUoKSkKLSwgbV9wYXVzZWQoZmFsc2UpCi0s
IG1fcGF1c2VUaW1lKG1fc3RhcnRUaW1lKQotLCBtX3N0YWxlKGZhbHNlKQorI3ByYWdtYSBtYXJr
IC0KKwordm9pZCBBbmltYXRpb25UaW1lckNhbGxiYWNrOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1h
dGlvblRpbWVyQmFzZT4qKQogeworICAgIG1fYW5pbS0+YW5pbWF0aW9uVGltZXJDYWxsYmFja0Zp
cmVkKG1fZXZlbnRUeXBlLCBtX2VsYXBzZWRUaW1lKTsKIH0KIAotSW1wbGljaXRBbmltYXRpb246
On5JbXBsaWNpdEFuaW1hdGlvbigpCit2b2lkIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcjo6dGlt
ZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikKIHsKLSAgICBBU1NFUlQoIW1fZnJv
bVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgIG1fYW5pbS0+YW5pbWF0aW9uRXZlbnREaXNwYXRj
aGVyRmlyZWQobV9lbGVtZW50LmdldCgpLCBtX25hbWUsIG1fcHJvcGVydHksIG1fcmVzZXQsIG1f
ZXZlbnRUeXBlLCBtX2VsYXBzZWRUaW1lKTsKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6
cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGZyb20sIFJlbmRlclN0
eWxlKiB0bykKKyNwcmFnbWEgbWFyayAtCisKKyNwcmFnbWEgbWFyayAtCisgICAgCitBbmltYXRp
b25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pCis6IG1fYW5p
bVN0YXRlKFNUQVRFX05FVykKKywgbV9pdGVyYXRpb24oMCkKKywgbV9hbmltYXRpbmcoZmFsc2Up
CissIG1fd2FpdGVkRm9yUmVzcG9uc2UoZmFsc2UpCissIG1fc3RhcnRUaW1lKDApCissIG1fcGF1
c2VUaW1lKC0xKQorLCBtX29iamVjdChyZW5kZXJlcikKKywgbV9hbmltYXRpb25UaW1lckNhbGxi
YWNrKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uQmFzZSo+KHRoaXMpKQorLCBtX2FuaW1hdGlvbkV2ZW50
RGlzcGF0Y2hlcihjb25zdF9jYXN0PEFuaW1hdGlvbkJhc2UqPih0aGlzKSkKKywgbV9hbmltYXRp
b24oY29uc3RfY2FzdDxUcmFuc2l0aW9uKj4odHJhbnNpdGlvbikpCissIG1fY29tcEFuaW0oY29t
cEFuaW0pCissIG1fd2FpdGluZ0ZvckVuZEV2ZW50KGZhbHNlKQogewotICAgIHNldEZpbmlzaGVk
KGZhbHNlKTsKK30KIAotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUt
PmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBpZiAobV90b1N0eWxlKQotICAg
ICAgICBtX3RvU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBtX2Zy
b21TdHlsZSA9IGZyb207Ci0gICAgaWYgKG1fZnJvbVN0eWxlKQotICAgICAgICBtX2Zyb21TdHls
ZS0+cmVmKCk7Ci0gICAgbV90b1N0eWxlID0gdG87Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAg
ICAgbV90b1N0eWxlLT5yZWYoKTsKLSAgICBpZiAoZnJvbSB8fCB0bykKLSAgICAgICAgbV9zdGFy
dFRpbWUgPSBjdXJyZW50VGltZSgpOworLy8jZGVmaW5lIERFQlVHX1NUQVRFX01BQ0hJTkUKKwor
I2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyNkZWZpbmUgRFNNX1BSSU5UX0ZPUkNFKGlucHV0
LCBuZXh0KSBcCitmcHJpbnRmKHN0ZG91dCwgIioqKiBnb3QgJXMgLS0+ICVzIGF0ICVmIGZvciBh
bmltYXRpb24gJXBcbiIsIGlucHV0LCBuZXh0LCBjdXJyZW50VGltZSgpLCB0aGlzKQorCisjZGVm
aW5lIERTTV9QUklOVChzdGF0ZSwgaW5wdXQsIG5leHQpIFwKK2ZwcmludGYoc3Rkb3V0LCAiKioq
IGdvdCAlcyBpbiAlcyAtLT4gJXMgYXQgJWYgZm9yIGFuaW1hdGlvbiAlcFxuIiwgaW5wdXQsIHN0
YXRlLCBuZXh0LCBjdXJyZW50VGltZSgpLCB0aGlzKQorCisjZGVmaW5lIERTTV9QUklOVF9QQVJB
TShzdGF0ZSwgaW5wdXQsIG5hbWUsIHBhcmFtLCBuZXh0KSBcCitmcHJpbnRmKHN0ZG91dCwgIioq
KiBnb3QgJXMgaW4gJXMgLS0+ICVzICglcz0lZikgYXQgJWYgZm9yIGFuaW1hdGlvbiAlcFxuIiwg
aW5wdXQsIHN0YXRlLCBuZXh0LCBuYW1lLCBwYXJhbSwgY3VycmVudFRpbWUoKSwgdGhpcykKKyNl
bHNlCisjZGVmaW5lIERTTV9QUklOVF9GT1JDRShpbnB1dCwgbmV4dCkKKyNkZWZpbmUgRFNNX1BS
SU5UKHN0YXRlLCBpbnB1dCwgbmV4dCkKKyNkZWZpbmUgRFNNX1BSSU5UX1BBUkFNKHN0YXRlLCBp
bnB1dCwgbmFtZSwgcGFyYW0sIG5leHQpCisjZW5kaWYKKwordm9pZCBBbmltYXRpb25CYXNlOjp1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKK3sK
KyAgICAvLyBpZiB3ZSBnZXQgYSBSRVNUQVJUIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9u
LCByZWdhcmRsZXNzIG9mIHN0YXRlCisgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX01BS0Vf
TkVXKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5QVVRfTUFLRV9ORVciLCAi
U1RBVEVfTkVXIik7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlU
X1NUWUxFX1NFVFVQKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxl
SXNTZXR1cChmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTkVXOworICAgICAg
ICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgIG1f
d2FpdGVkRm9yUmVzcG9uc2UgPSBmYWxzZTsKKyAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBV
VF9SRVNUQVJUX0FOSU1BVElPTikgeworICAgICAgICBEU01fUFJJTlRfRk9SQ0UoIlNUQVRFX0lO
UFVUX1JFU1RBUlRfQU5JTUFUSU9OIiwgIlNUQVRFX05FVyIpOworICAgICAgICBjYW5jZWxUaW1l
cnMoKTsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVf
U0VUVVApCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVw
KGZhbHNlKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgZW5kQW5pbWF0
aW9uKGZhbHNlKTsKICAgICAgICAgCi0gICAgLy8gSWYgd2UgYXJlIHN0YWxlLCBhdHRlbXB0IHRv
IHVwZGF0ZSB0byBhIG5ldyB0cmFuc2l0aW9uIHVzaW5nIHRoZSBuZXcgfGZyb218IHN0eWxlLiAg
SWYgd2UgYXJlIGFibGUgdG8gZmluZCBhIG5ldyB0cmFuc2l0aW9uLAotICAgIC8vIHRoZW4gd2Ug
d2lsbCB1bm1hcmsgb3Vyc2VsdmVzIGZvciBkZWF0aC4KLSAgICBpZiAoc3RhbGUoKSAmJiBmcm9t
ICYmIHRvKSB7Ci0gICAgICAgICBmb3IgKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBm
cm9tLT50cmFuc2l0aW9ucygpOyB0cmFuc2l0aW9uOyB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbi0+
bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSAhPSB0cmFuc2l0aW9uLT5wcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50IGR1cmF0
aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRpb24oKTsKLSAgICAgICAgICAgIGludCByZXBlYXRDb3Vu
dCA9IHRyYW5zaXRpb24tPnJlcGVhdENvdW50KCk7Ci0gICAgICAgICAgICBpZiAoZHVyYXRpb24g
JiYgcmVwZWF0Q291bnQpIHsKLSAgICAgICAgICAgICAgICBtX2R1cmF0aW9uID0gZHVyYXRpb24g
LyAxMDAwLjA7Ci0gICAgICAgICAgICAgICAgbV9yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50Owot
ICAgICAgICAgICAgICAgIG1fc3RhbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIC0xKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfQU5J
TUFUSU9OKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5QVVRfRU5EX0FOSU1B
VElPTiIsICJTVEFURV9ET05FIik7CisgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICBp
ZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkKKyAgICAgICAg
ICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOworICAgICAg
ICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBV
VF9QQVVTRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFIGF0ICVm
IGZvciBhbmltYXRpb24gJXBcbiIsIGN1cnJlbnRUaW1lKCksIHRoaXMpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05T
RSkgeworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFIHN0YXRl
LCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKKyAgICAgICAgICAgIC8v
IHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlCisgICAgICAgICAg
ICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNU
QVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JF
U1VNRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSBhdCAlZiBm
b3IgYW5pbWF0aW9uICVwXG4iLCBjdXJyZW50VGltZSgpLCB0aGlzKTsKKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX0xPT1BJTkcgfHwgbV9hbmltU3Rh
dGUgPT0gU1RBVEVfRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9u
CisgICAgICAgICAgICBzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSk7CiAgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBleGVjdXRlIHN0YXRlIG1hY2hpbmUK
KyAgICBzd2l0Y2gobV9hbmltU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTVEFURV9ORVc6CisgICAg
ICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlu
cHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyB8fCBpbnB1dCA9PSBTVEFURV9J
TlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVf
SU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVf
UlVOTklORykgeworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVfTkVXIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NU
QVJUX0FOSU1BVElPTikgPyAiU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIjogIlNUQVRFX0lO
UFVUX1BMQVlfU1RBVEVfUlVOTklORyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZWxheSIsIG1fYW5pbWF0aW9uLT5kZWxheSgpLCAiU1RBVEVfU1RBUlRfV0FJVF9USU1FUiIp
OworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZXIgdG8gdGhlIGluaXRpYWwg
ZGVsYXkgKDAgaWYgbm8gZGVsYXkpCisgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25z
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJ
VF9USU1FUjsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRU
aW1lcihtX2FuaW1hdGlvbi0+ZGVsYXkoKSwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCwgbV9hbmltYXRpb24tPmRlbGF5KCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgaW5wdXQgaXMgU1RBVEVfSU5QVVRfUExB
WV9TVEFURV9QQVVTRUQgd2UgZG9uJ3QgZG8gYW55dGhpbmcgeWV0CisgICAgICAgICAgICAgICAg
RFNNX1BSSU5UKCJTVEFURV9ORVciLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQiLCAi
U1RBVEVfTkVXIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09
IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BM
QVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09
IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVfU1RB
UlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9TVEFSVF9USU1FUl9GSVJFRCIsICJlbGFwc2Vk
VGltZSIsIHBhcmFtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNUQVRFX1NU
QVJUX1dBSVRfU1RZTEVfU0VUVVAiKTsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBo
YXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8g
cmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNU
QVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVA7CisgICAgICAgICAgICAgICAgbV9jb21wQW5pbS0+
c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cCh0cnVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0
aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAg
ICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5n
RGlzcGF0Y2hlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJ1bm5pbmcoKSk7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJT
VEFURV9TVEFSVF9XQUlUX1RJTUVSIiwgIlNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEIiwg
IlNUQVRFX1BBVVNFRF9XQUlUX1RJTUVSIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUgYW5kIHdl
IGdvdCBhIHBhdXNlLiBDYW5jZWwgdGhlIHRpbWVyLCBwYXVzZSBhbmQgd2FpdAorICAgICAgICAg
ICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5j
ZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9X
QUlUX1RJTUVSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUDoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1
dCA9PSBTVEFURV9JTlBVVF9TVFlMRV9TRVRVUCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZ
X1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNl
dFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfU0VUVVApIHsKKyAgICAgICAgICAgICAg
ICBEU01fUFJJTlQoIlNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVAiLCAiU1RBVEVfSU5QVVRf
U1RZTEVfU0VUVVAiLCAiU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSIpOworICAgICAgICAgICAg
ICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0
IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAgICAgICAgICAg
ICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBvdmVycmlkZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHN0YXJ0IGV2ZW50LCBpZiBuZWVkZWQKKyAg
ICAgICAgICAgICAgICBvbkFuaW1hdGlvblN0YXJ0KDAuMGYpOyAvLyB0aGUgZWxhcHNlZFRpbWUg
aXMgYWx3YXlzIDAgaGVyZQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0
YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpIHx8ICFz
dGFydEFuaW1hdGlvbigwKSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKiogICAgICAgICBzdGFydEFuaW1hdGlvbiBy
ZXR1cm5lZCBmYWxzZSwgc2V0dGluZyBzdGFydCB0aW1lIGltbWVkaWF0ZWx5XG4iKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRU
aW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQs
IGN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bm5p
bmcoKSk7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlUX1RJTUVS
IiwgIlNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1NUQVJUX1dBSVRfUkVT
UE9OU0UiKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0
aW5nIGZvciB0aGUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc3R5bGUgaGFzIGJlZW4gc2V0dXAu
IElmIHdlJ3JlIGFza2VkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50
LCB0aGUgc3R5bGUgbXVzdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBzbyB3ZSBjYW4gZGVhbCB3aXRo
IHRoaXMgbGlrZSB3ZSB3b3VsZAorICAgICAgICAgICAgICAgIC8vIGZvciBXQUlUX1JFU1BPTlNF
LCBleGNlcHQgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFuIGVuZEFuaW1hdGlvbigpLgorICAg
ICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOgorICAgICAg
ICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUIHx8IGlucHV0
ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
YSBzdGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0
CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRUaW1lIDw9IDApCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gcGFyYW07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAg
ICAgICAgICAgICAgICBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgRFNNX1BSSU5UX1BBUkFNKCJTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFIiwg
IlNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUIiwgInN0YXJ0VGltZSIsIHBhcmFtLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fYW5pbVN0YXRlPT1TVEFURV9MT09QSU5HKT8i
U1RBVEVfTE9PUElORyI6IlNUQVRFX0VORElORyIpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRp
b24KKyAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAg
ICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb24oKS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdE
aXNwYXRjaGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBEU01fUFJJTlQoIlNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UiLCAiU1RBVEVfSU5Q
VVRfUExBWV9TVEFURV9QQVVTRUQiLCAiU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0UiKTsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0aW5nIGZvciBhIHN0YXJ0
IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4gV2hlbiAKKyAgICAgICAg
ICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91Z2ggdGhlIHN0YXJ0IHRp
bWVyIGp1c3QgZmlyZWQKKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IDA7CisgICAgICAg
ICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfTE9PUElORzoKKyAgICAgICAgICAgIEFTU0VS
VChpbnB1dCA9PSBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRF
X0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlucHV0ID09IFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAgLy8gTG9vcCB0aW1lciBmaXJl
ZCwgbG9vcCBhZ2FpbiBvciBlbmQuCisgICAgICAgICAgICAgICAgb25BbmltYXRpb25JdGVyYXRp
b24ocGFyYW0pOworICAgICAgICAgICAgICAgIHByaW1lRXZlbnRUaW1lcnMoKTsKKyAgICAgICAg
ICAgICAgICBEU01fUFJJTlRfUEFSQU0oIlNUQVRFX0xPT1BJTkciLCAiU1RBVEVfSU5QVVRfTE9P
UF9USU1FUl9GSVJFRCIsICJlbGFwc2VkVGltZSIsIHBhcmFtLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1fYW5pbVN0YXRlPT1TVEFURV9MT09QSU5HKT8iU1RBVEVfTE9PUElO
RyI6IlNUQVRFX0VORElORyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9MT09QSU5HIiwgIlNUQVRFX0lOUFVUX1BM
QVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9SVU4iKTsKKyAgICAgICAgICAgICAgICAv
LyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQg
d2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAg
ICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24o
ZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1JVTjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX0VO
RElORzoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfVElNRVJf
RklSRUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJ
UkVEKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAg
ICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVfRU5ESU5HIiwgIlNUQVRFX0lOUFVUX0VORF9USU1F
Ul9GSVJFRCIsICJlbGFwc2VkVGltZSIsIHBhcmFtLCAiU1RBVEVfRE9ORSIpOworICAgICAgICAg
ICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCisgICAgICAgICAgICAgICAgb25B
bmltYXRpb25FbmQocGFyYW0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJl
c3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gRmlyZSBvZmYgYW5vdGhlciBzdHlsZSBjaGFuZ2Ugc28gd2UgY2FuIHNldCB0aGUg
ZmluYWwgdmFsdWUKKyAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50
KCkpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfRE9ORTsKKyAgICAgICAg
ICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0
Y2hlcigpOworICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIHdo
ZW4gd2UndmUgYmVlbiBjYWxsZWQgZnJvbSB0aW1lckZpcmVkKCkKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfRU5ESU5H
IiwgIlNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9SVU4iKTsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwg
dGhlIGFuaW1hdGlvbiBhbmQgd2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAg
ICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0g
U1RBVEVfUEFVU0VEX1JVTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHx0aGlzfCBt
YXkgYmUgZGVsZXRlZCBoZXJlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFU
RV9QQVVTRURfV0FJVF9USU1FUjoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9J
TlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkp
OworICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9QQVVTRURfV0FJVF9USU1FUiIsICJTVEFU
RV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkciLCAiU1RBVEVfTkVXIik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKKyAgICAgICAgICAgIG1fc3RhcnRUaW1l
ICs9IGN1cnJlbnRUaW1lKCkgLSBtX3BhdXNlVGltZTsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1l
ID0gLTE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGluZyBmb3Ig
dGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KKyAgICAgICAg
ICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTkVXOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfV0FJVF9SRVNQT05TRToKKyAgICAgICAgY2FzZSBT
VEFURV9QQVVTRURfUlVOOgorICAgICAgICAgICAgLy8gV2UgdHJlYXQgdGhlc2UgdHdvIGNhc2Vz
IHRoZSBzYW1lLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQsIHdoZW4gd2UgYXJlIGluIHRo
ZSBXQUlUX1JFU1BPTlNFCisgICAgICAgICAgICAvLyBzdGF0ZSwgd2UgZG9uJ3QgeWV0IGhhdmUg
YSB2YWxpZCBzdGFydFRpbWUsIHNvIHdlIHNlbmQgMCB0byBzdGFydEFuaW1hdGlvbi4gV2hlbiB0
aGUgU1RBUlRfVElNRQorICAgICAgICAgICAgLy8gZXZlbnQgY29tZXMgaW4gcW5kIHdlIHdlcmUg
aW4gdGhlIFJVTiBzdGF0ZSwgd2Ugd2lsbCBub3RpY2UgdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2V0
IHRoZSAKKyAgICAgICAgICAgIC8vIHN0YXJ0VGltZSBhbmQgd2lsbCBpZ25vcmUgaXQuCisgICAg
ICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKTsK
KyAgICAgICAgICAgIEFTU0VSVCghcnVubmluZygpKTsKKyAgICAgICAgICAgIERTTV9QUklOVCgi
U1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0UiLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5O
SU5HIiwgIlNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UiKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09
IFNUQVRFX1BBVVNFRF9SVU4pCisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVu
dFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJl
c3BvbnNlIGZyb20gdGhlIGFuaW1hdGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICBpZiAo
b3ZlcnJpZGRlbigpIHx8ICFzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBz
byBmaXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVz
cG9uc2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRE9O
RToKKyAgICAgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfRE9ORSIsICJTVEFURV9ET05F
Iik7CisgICAgICAgICAgICAvLyBXZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwg
d2UgYXJlIGRlbGV0ZWQKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAvLyB8dGhpc3wg
bWF5IGJlIGRlbGV0ZWQgaGVyZSBpZiB3ZSBjYW1lIG91dCBvZiBTVEFURV9FTkRJTkcgd2hlbiB3
ZSd2ZSBiZWVuIGNhbGxlZCBmcm9tIHRpbWVyRmlyZWQoKQorfQorICAgIAordm9pZCBBbmltYXRp
b25CYXNlOjphbmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmRv
Y3VtZW50KCkgJiYgIW1fb2JqZWN0LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKICAgICAK
LSAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQgYSBuZXcgdHJhbnNpdGlvbiwgdGhlbiBtYXJrIG91
cnNlbHZlcyBhcyBiZWluZyBmaW5pc2hlZCBzbyB0aGF0IHdlIGNhbiBiZSByZW1vdmVkLgotICAg
IGlmIChzdGFsZSgpKQotICAgICAgICBzZXRGaW5pc2hlZCh0cnVlKTsKKyAgICAvLyBGSVhNRTog
dXNlIGFuIGVudW0KKyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1h
dGlvblN0YXJ0RXZlbnQpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9T
VEFSVF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9
PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCkKKyAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQsIGVsYXBzZWRUaW1l
KTsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9u
RW5kRXZlbnQpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VORF9U
SU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0
ZWQgaGVyZQorICAgIH0KIH0KIAotZG91YmxlIEltcGxpY2l0QW5pbWF0aW9uOjpwcm9ncmVzcygp
IGNvbnN0Cit2b2lkIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVk
KEhUTUxFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9w
ZXJ0eSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNl
ZFRpbWUpCiB7Ci0gICAgZG91YmxlIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUoKSAtIG1fc3Rh
cnRUaW1lOworICAgIG1fd2FpdGluZ0ZvckVuZEV2ZW50ID0gZmFsc2U7CiAgICAgCi0gICAgaWYg
KG1fZmluaXNoZWQgfHwgIW1fZHVyYXRpb24gfHwgZWxhcHNlZFRpbWUgPj0gbV9kdXJhdGlvbikK
LSAgICAgICAgcmV0dXJuIDEuMDsKKyAgICAvLyBLZWVwIGFuIGF0b21pYyBzdHJpbmcgb24gdGhl
IHN0YWNrIHRvIGtlZXAgaXQgYWxpdmUgdW50aWwgd2UgZXhpdCB0aGlzIG1ldGhvZAorICAgIC8v
IChzaW5jZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQgbWF5IGNhdXNlIHx0aGlzfCB0byBiZSBkZWxl
dGVkLCB0aGVyZWZvcmUgcmVtb3ZpbmcKKyAgICAvLyB0aGUgbGFzdCByZWYgdG8gdGhlIGF0b21p
YyBzdHJpbmcpLgorICAgIEF0b21pY1N0cmluZyBhbmltTmFtZShuYW1lKTsKKyAgICBBdG9taWNT
dHJpbmcgYW5pbUV2ZW50VHlwZShldmVudFR5cGUpOworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxl
bWVudCBzdGlja3MgYXJvdW5kIHRvbworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudFJl
dGFpbmVyKGVsZW1lbnQpOworICAgIAorICAgIEFTU0VSVCghZWxlbWVudCB8fCAoZWxlbWVudC0+
ZG9jdW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAg
IGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFdlIGRpZG4ndCBt
YWtlIHRoZSBlbmRBbmltYXRpb24gY2FsbCBpZiB3ZSBkaXNwYXRjaGVkIGFuIGV2ZW50LiBUaGlz
IGlzIHNvCisgICAgLy8gd2UgY2FuIGNhbGwgdGhlIGFuaW1hdGlvbiBldmVudCBoYW5kbGVyIHRo
ZW4gcmVtb3ZlIHRoZSBhbmltYXRpb24uIAorICAgIC8vIFdlIGNhbid0IGNhbGwgZW5kQW5pbWF0
aW9uKCkgaGVyZSBiZWNhdXNlIGl0IGlzIHNwZWNpYWxpemVkIGRlcGVuZGluZyBvbiB3aGV0aGVy
CisgICAgLy8gd2UgYXJlIGRvaW5nIFRyYW5zaXRpb25zIG9yIEFuaW1hdGlvbnMuIFNvIHdlIGRv
IHRoZSBlcXVpdmFsZW50IHRvIGl0IGhlcmUuCisgICAgaWYgKGFuaW1FdmVudFR5cGUgPT0gRXZl
bnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQt
PnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFu
aW1hdGVkKSBzdHlsZQorICAgICAgICAgICAgc2V0Q2hhbmdlZChlbGVtZW50LT5yZW5kZXJlcigp
LT5lbGVtZW50KCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkJhc2U6
OnVwZGF0ZVBsYXlTdGF0ZShib29sIHJ1bikKK3sKKyAgICBpZiAocnVubmluZygpICE9IHJ1biB8
fCBpc25ldygpKSB7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShydW4gPyBTVEFURV9JTlBV
VF9QTEFZX1NUQVRFX1JVTk5JTkcgOiBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCwgLTEp
OworICAgIH0KK30KIAotICAgIGlmIChtX2Z1bmN0aW9uLnR5cGUoKSA9PSBMaW5lYXJUaW1pbmdG
dW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lIC8gbV9kdXJhdGlvbjsKK2RvdWJs
ZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQpIGNv
bnN0Cit7CisgICAgaWYgKHByZWFjdGl2ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBkb3VibGUgZWxhcHNlZFRpbWUgPSBydW5uaW5nKCkgPyAoY3VycmVudFRpbWUoKSAtIG1fc3Rh
cnRUaW1lKSA6IChtX3BhdXNlVGltZSAtIG1fc3RhcnRUaW1lKTsKKyAgICBpZiAocnVubmluZygp
ICYmIGVsYXBzZWRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZG91Ymxl
IGR1ciA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIAorICAgIGlmIChwb3N0YWN0aXZl
KCkgfHwgIW1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIHx8IGVsYXBzZWRUaW1lID49IGR1cikKKyAg
ICAgICAgcmV0dXJuIDEuMDsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFsIHRp
bWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgorICAgIC8vIFRoZXJlIGlzIG5vIG5l
ZWQgdG8gd29ycnkgYWJvdXQgaXRlcmF0aW9ucywgd2UgYXNzdW1lIHRoYXQgd2Ugd291bGQgaGF2
ZSAKKyAgICAvLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lCisgICAgZG91
YmxlIHQgPSBlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGludCBp
ID0gKGludCkgdDsKKyAgICB0IC09IGk7CisgICAgCisgICAgaWYgKHNjYWxlICE9IDEgfHwgb2Zm
c2V0ICE9IDApCisgICAgICAgIHQgPSAodCAtIG9mZnNldCkgKiBzY2FsZTsKKyAgICAKKyAgICBp
ZiAobV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkudHlwZSgpID09IExpbmVhclRpbWluZ0Z1
bmN0aW9uKQorICAgICAgICByZXR1cm4gdDsKICAgICAKICAgICAvLyBDdWJpYyBiZXppZXIuCi0g
ICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihtX2Z1bmN0aW9uLngxKCksIG1fZnVu
Y3Rpb24ueTEoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmN0
aW9uLngyKCksIG1fZnVuY3Rpb24ueTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsYXBzZWRUaW1lIC8gbV9kdXJhdGlvbiwgbV9kdXJhdGlvbik7CisgICAgZG91Ymxl
IHR0ID0gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKG1fYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlv
bigpLngxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Fu
aW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS55MSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueDIoKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uLT50aW1p
bmdGdW5jdGlvbigpLnkyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHQsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICByZXR1cm4gdHQ7CiB9CiAKK3Zv
aWQgQW5pbWF0aW9uQmFzZTo6cHJpbWVFdmVudFRpbWVycygpCit7CisgICAgLy8gRGVjaWRlIHdo
ZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAgICBkb3VibGUgY3QgPSBj
dXJyZW50VGltZSgpOworICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBjdCAtIG1f
c3RhcnRUaW1lOworICAgIEFTU0VSVChlbGFwc2VkRHVyYXRpb24gPj0gMCk7CisgICAgCisgICAg
ZG91YmxlIHRvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsKKyAgICBkb3Vi
bGUgZHVyYXRpb25MZWZ0ID0gMDsKKyAgICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSB0b3Rh
bER1cmF0aW9uOworICAgIGlmICh0b3RhbER1cmF0aW9uIDwgMCB8fCBlbGFwc2VkRHVyYXRpb24g
PCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
KTsKKyAgICAgICAgbmV4dEl0ZXJhdGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlv
bkxlZnQ7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIDAg
ZHVyYXRpb25MZWZ0LCBpZiB3ZSd2ZSBnb3R0ZW4gdGhlIGV2ZW50IGxhdGUgYW5kIHdlIGFyZSBh
bHJlYWR5CisgICAgLy8gcGFzdCB0b3RhbER1cmF0aW9uLiBJbiB0aGlzIGNhc2Ugd2Ugc3RpbGwg
ZmlyZSBhbiBlbmQgdGltZXIgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGVuZC4gCisgICAgLy8gVGhp
cyBkZWZlcnMgdGhlIGNhbGwgdG8gc2VuZEFuaW1hdGlvbkV2ZW50cyB0byBhdm9pZCByZS1lbnRy
YW50IGNhbGxzIHRoYXQgZGVzdHJveQorICAgIC8vIHRoZSBSZW5kZXJPYmplY3QsIGFuZCB0aGVy
ZWZvcmUgfHRoaXN8IGJlZm9yZSB3ZSdyZSBkb25lIHdpdGggaXQuCisgICAgaWYgKHRvdGFsRHVy
YXRpb24gPCAwIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgdG90YWxEdXJhdGlvbikgeworICAgICAg
ICAvLyBXZSBhcmUgbm90IGF0IHRoZSBlbmQgeWV0LCBzZW5kIGEgbG9vcCBldmVudAorICAgICAg
ICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9MT09QSU5HOworICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1l
cihkdXJhdGlvbkxlZnQsIEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvLyBXZSBh
cmUgYXQgdGhlIGVuZCwgc2VuZCBhbiBlbmQgZXZlbnQKKyAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9FTkRJTkc7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVy
KGR1cmF0aW9uTGVmdCwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQsIG5leHRJ
dGVyYXRpb25UaW1lKTsKKyAgICB9Cit9CisKKyNwcmFnbWEgbWFyayAtCisKIHN0YXRpYyBpbmxp
bmUgaW50IGJsZW5kRnVuYyhpbnQgZnJvbSwgaW50IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAK
ICAgICByZXR1cm4gaW50KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKQEAgLTIyMyw3
ICs5MTAsOCBAQCBzdGF0aWMgaW5saW5lIEludFNpemUgYmxlbmRGdW5jKGNvbnN0IEludFNpemUm
IGZyb20sIGNvbnN0IEludFNpemUmIHRvLCBkb3VibGUgcAogc3RhdGljIGlubGluZSBTaGFkb3dE
YXRhKiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSog
dG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsKLSAgICBy
ZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVzcyks
IGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Ymx1
ciwgdG8tPmJsdXIsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPmNvbG9yLCB0by0+Y29sb3Is
IHByb2dyZXNzKSk7CisgICAgcmV0dXJuIG5ldyBTaGFkb3dEYXRhKGJsZW5kRnVuYyhmcm9tLT54
LCB0by0+eCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+eSwgdG8tPnksIHByb2dyZXNzKSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1
ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3Mp
KTsKIH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzKQpAQCAtMjM3LDcgKzkyNSw4IEBAIHN0YXRpYyBpbmxpbmUgVHJh
bnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJv
bSwgY29uCiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gaSA8IGZyb21TaXpl
ID8gZnJvbVtpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9
IGkgPCB0b1NpemUgPyB0b1tpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlv
biogYmxlbmRlZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MpIDogZnJv
bU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYmxl
bmRlZE9wKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoYmxlbmRlZE9wKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI1NCwzMjYg
Kzk0Myw4MjMgQEAgc3RhdGljIGlubGluZSBFVmlzaWJpbGl0eSBibGVuZEZ1bmMoRVZpc2liaWxp
dHkgZnJvbSwgRVZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm8KICAgICByZXR1cm4gcmVzdWx0ID4g
MC4gPyBWSVNJQkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20pOwogfQogCi0jZGVmaW5l
IEJMRU5EKHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1fcHJvcGVydHkgPT0gcHJv
cCAmJiBtX3RvU3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5nZXR0ZXIoKSkge1wKLSAg
ICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAg
ICAgIGlmIChzdGFsZSgpKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICB9IFwKLSAgICBp
ZiAobV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsgXAot
ICAgICAgICBpZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICE9IG1fdG9TdHlsZS0+Z2V0dGVyKCkp
IHtcCi0gICAgICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7IFwKLSAgICAgICAgICAgIGlmICgh
YW5pbWF0ZWRTdHlsZSkgXAotICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJl
bmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0gICAg
ICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKG1fZnJvbVN0eWxlLT5nZXR0
ZXIoKSwgbV90b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAgICAgIGlm
IChtX3Byb3BlcnR5ID09IHByb3ApIFwKLSAgICAgICAgICAgICAgICByZXR1cm47IFwKLSAgICAg
ICAgfVwKLSAgICB9XAotCi0jZGVmaW5lIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IocHJvcCwg
Z2V0dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHls
ZS0+Z2V0dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSB7IFwKLSAgICAgICAgcmVzZXQo
cmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgIGlmIChzdGFs
ZSgpKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICB9IFwKLSAgICBpZiAobV9wcm9wZXJ0
eSA9PSBjQW5pbWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsgXAotICAgICAgICBDb2xv
ciBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Z2V0dGVyKCk7IFwKLSAgICAgICAgQ29sb3IgdG9D
b2xvciA9IG1fdG9TdHlsZS0+Z2V0dGVyKCk7IFwKLSAgICAgICAgaWYgKGZyb21Db2xvci5pc1Zh
bGlkKCkgfHwgdG9Db2xvci5pc1ZhbGlkKCkpIHsgXAotICAgICAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpKSBcCi0gICAgICAgICAgICAgICAgZnJvbUNvbG9yID0gbV9mcm9tU3R5bGUt
PmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpIFwKLSAgICAg
ICAgICAgICAgICB0b0NvbG9yID0gbV90b1N0eWxlLT5jb2xvcigpOyBcCi0gICAgICAgICAgICBp
ZiAoZnJvbUNvbG9yICE9IHRvQ29sb3IpIHtcCi0gICAgICAgICAgICAgICAgc2V0RmluaXNoZWQo
ZmFsc2UpOyBcCi0gICAgICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBcCi0gICAgICAg
ICAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgp
KSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRT
dHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKCkpKTtc
Ci0gICAgICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47IFwKLSAgICAgICAgICAgIH1cCi0gICAgICAgIH1cCi0gICAgfVwKLQot
I2RlZmluZSBCTEVORF9TSEFET1cocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9w
cm9wZXJ0eSA9PSBwcm9wICYmICghbV90b1N0eWxlLT5nZXR0ZXIoKSB8fCAhdGFyZ2V0U3R5bGUt
PmdldHRlcigpIHx8ICptX3RvU3R5bGUtPmdldHRlcigpICE9ICp0YXJnZXRTdHlsZS0+Z2V0dGVy
KCkpKSB7IFwKLSAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5
bGUpOyBcCi0gICAgICAgIGlmIChzdGFsZSgpKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAg
ICB9IFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09
IHByb3ApIHsgXAotICAgICAgICBpZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICYmIG1fdG9TdHls
ZS0+Z2V0dGVyKCkgJiYgKm1fZnJvbVN0eWxlLT5nZXR0ZXIoKSAhPSAqbV90b1N0eWxlLT5nZXR0
ZXIoKSkge1wKLSAgICAgICAgICAgIHNldEZpbmlzaGVkKGZhbHNlKTsgXAotICAgICAgICAgICAg
aWYgKCFhbmltYXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5l
dyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwK
LSAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUt
PmdldHRlcigpLCBtX3RvU3R5bGUtPmdldHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAg
ICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAot
ICAgICAgICB9XAotICAgIH0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21w
b3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJl
bmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBu
byB0cmFuc2l0aW9uLXByb3BlcnR5LCB0aGVuIHRoZSBvbmx5IHdheSB0byB0ZWxsIGlmIG91ciBn
b2FsIHN0YXRlIGNoYW5nZWQgaXMgdG8gY2hlY2sKLSAgICAvLyBldmVyeSBzaW5nbGUgYW5pbWF0
YWJsZSBwcm9wZXJ0eS4gIEZvciBub3cgd2UnbGwganVzdCBkaWZmIHRoZSBzdHlsZXMgdG8gYXNr
IHRoYXQgcXVlc3Rpb24sCi0gICAgLy8gYnV0IHdlIHNob3VsZCByZWFsbHkgZXhjbHVkZSBub24t
YW5pbWF0YWJsZSBwcm9wZXJ0aWVzLgotICAgIGlmICghbV90b1N0eWxlIHx8IChtX3Byb3BlcnR5
ID09IGNBbmltYXRlQWxsICYmIHRhcmdldFN0eWxlLT5kaWZmKG1fdG9TdHlsZSkpKSB7Ci0gICAg
ICAgIHJlc2V0KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICAgICAg
aWYgKHN0YWxlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IEJsb3cgdXAgc2hvcnRoYW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQuCi0gICAgc2V0
RmluaXNoZWQodHJ1ZSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBzZXRMZWZ0
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVJpZ2h0LCByaWdodCwgc2V0UmlnaHQpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5VG9wLCB0b3AsIHNldFRvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlC
b3R0b20sIGJvdHRvbSwgc2V0Qm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdpZHRoLCB3
aWR0aCwgc2V0V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5SGVpZ2h0LCBoZWlnaHQsIHNl
dEhlaWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJvcmRlckxl
ZnRXaWR0aCwgc2V0Qm9yZGVyTGVmdFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0V2lkdGgsIGJvcmRlclJpZ2h0V2lkdGgsIHNldEJvcmRlclJpZ2h0V2lkdGgpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIGJvcmRlclRvcFdpZHRoLCBzZXRCb3Jk
ZXJUb3BXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgYm9y
ZGVyQm90dG9tV2lkdGgsIHNldEJvcmRlckJvdHRvbVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eU1hcmdpbkxlZnQsIG1hcmdpbkxlZnQsIHNldE1hcmdpbkxlZnQpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5TWFyZ2luUmlnaHQsIG1hcmdpblJpZ2h0LCBzZXRNYXJnaW5SaWdodCk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIG1hcmdpblRvcCwgc2V0TWFyZ2luVG9wKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgbWFyZ2luQm90dG9tLCBzZXRNYXJnaW5C
b3R0b20pOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsIHBhZGRpbmdMZWZ0LCBz
ZXRQYWRkaW5nTGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIHBhZGRp
bmdSaWdodCwgc2V0UGFkZGluZ1JpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdU
b3AsIHBhZGRpbmdUb3AsIHNldFBhZGRpbmdUb3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFk
ZGluZ0JvdHRvbSwgcGFkZGluZ0JvdHRvbSwgc2V0UGFkZGluZ0JvdHRvbSk7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlPcGFjaXR5LCBvcGFjaXR5LCBzZXRPcGFjaXR5KTsKLSAgICBCTEVORChDU1NQ
cm9wZXJ0eUNvbG9yLCBjb2xvciwgc2V0Q29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsIHNldEJhY2tncm91bmRDb2xvcik7Ci0gICAg
QkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xv
ciwgY29sdW1uUnVsZUNvbG9yLCBzZXRDb2x1bW5SdWxlQ29sb3IpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBjb2x1bW5SdWxlV2lkdGgsIHNldENvbHVtblJ1
bGVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsIGNvbHVtbkdh
cCwgc2V0Q29sdW1uR2FwKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50
LCBjb2x1bW5Db3VudCwgc2V0Q29sdW1uQ291bnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uV2lkdGgsIGNvbHVtbldpZHRoLCBzZXRDb2x1bW5XaWR0aCk7Ci0gICAgQkxFTkRf
TUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgdGV4
dFN0cm9rZUNvbG9yLCBzZXRUZXh0U3Ryb2tlQ29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFM
SURfQ09MT1IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCB0ZXh0RmlsbENvbG9yLCBz
ZXRUZXh0RmlsbENvbG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6
b250YWxTcGFjaW5nLCBob3Jpem9udGFsQm9yZGVyU3BhY2luZywgc2V0SG9yaXpvbnRhbEJvcmRl
clNwYWNpbmcpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFj
aW5nLCB2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsIHNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyk7Ci0g
ICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwg
Ym9yZGVyTGVmdENvbG9yLCBzZXRCb3JkZXJMZWZ0Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lO
VkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBib3JkZXJSaWdodENvbG9y
LCBzZXRCb3JkZXJSaWdodENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENT
U1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsIGJvcmRlclRvcENvbG9yLCBzZXRCb3JkZXJUb3BDb2xv
cik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bUNvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgc2V0Qm9yZGVyQm90dG9tQ29sb3IpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5WkluZGV4LCB6SW5kZXgsIHNldFpJbmRleCk7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0LCBsaW5lSGVpZ2h0LCBzZXRMaW5lSGVpZ2h0KTsKLSAgICBCTEVO
RF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBvdXRsaW5lQ29s
b3IsIHNldE91dGxpbmVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0
LCBvdXRsaW5lT2Zmc2V0LCBzZXRPdXRsaW5lT2Zmc2V0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoLCBzZXRPdXRsaW5lV2lkdGgpOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywgbGV0dGVyU3BhY2luZywgc2V0TGV0dGVyU3BhY2lu
Zyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgd29yZFNwYWNpbmcsIHNldFdv
cmRTcGFjaW5nKTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3cs
IGJveFNoYWRvdywgc2V0Qm94U2hhZG93KTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlU
ZXh0U2hhZG93LCB0ZXh0U2hhZG93LCBzZXRUZXh0U2hhZG93KTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSwgdHJhbnNmb3JtLCBzZXRUcmFuc2Zvcm0pOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgdHJhbnNmb3JtT3JpZ2luWCwgc2V0
VHJhbnNmb3JtT3JpZ2luWCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1P
cmlnaW5ZLCB0cmFuc2Zvcm1PcmlnaW5ZLCBzZXRUcmFuc2Zvcm1PcmlnaW5ZKTsKLSAgICBCTEVO
RChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsIGJvcmRlclRvcExlZnRSYWRp
dXMsIHNldEJvcmRlclRvcExlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyVG9wUmlnaHRSYWRpdXMsIGJvcmRlclRvcFJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJUb3BS
aWdodFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0
UmFkaXVzLCBib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVz
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBi
b3JkZXJCb3R0b21SaWdodFJhZGl1cywgc2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgdmlzaWJpbGl0eSwgc2V0VmlzaWJpbGl0eSk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlab29tLCB6b29tLCBzZXRab29tKTsKLX0KLQotUmVuZGVy
U3R5bGUqIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRT
dHlsZSkKLXsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyZW50VHJhbnNpdGlvbnMgPSBjdXJy
ZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdGFyZ2V0VHJh
bnNpdGlvbnMgPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBib29sIHRyYW5zaXRp
b25zQ2hhbmdlZCA9IGN1cnJlbnRUcmFuc2l0aW9ucyAhPSB0YXJnZXRUcmFuc2l0aW9ucyAmJiAh
KGN1cnJlbnRUcmFuc2l0aW9ucyAmJiB0YXJnZXRUcmFuc2l0aW9ucyAmJiAqY3VycmVudFRyYW5z
aXRpb25zID09ICp0YXJnZXRUcmFuc2l0aW9ucyk7Ci0KLSAgICBpZiAobV9hbmltYXRpb25zLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBGb3IgZWFjaCB0cmFuc2l0aW9uLCB3ZSBjcmVhdGUgYSBu
ZXcgYW5pbWF0aW9uIHVubGVzcyBvbmUgZXhpc3RzIGFscmVhZHkgKGxhdGVyIG9jY3VycmVuY2Vz
IG9mIGR1cGxpY2F0ZQotICAgICAgICAvLyB0cmlnZ2VycyBpbiB0aGUgbGF5ZXIgbGlzdCBnZXQg
aWdub3JlZCkuCi0gICAgICAgIGZvciAoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IGN1
cnJlbnRUcmFuc2l0aW9uczsgdHJhbnNpdGlvbjsgdHJhbnNpdGlvbiA9IHRyYW5zaXRpb24tPm5l
eHQoKSkgewotICAgICAgICAgICAgaW50IHByb3BlcnR5ID0gdHJhbnNpdGlvbi0+cHJvcGVydHko
KTsKLSAgICAgICAgICAgIGludCBkdXJhdGlvbiA9IHRyYW5zaXRpb24tPmR1cmF0aW9uKCk7Ci0g
ICAgICAgICAgICBpbnQgcmVwZWF0Q291bnQgPSB0cmFuc2l0aW9uLT5yZXBlYXRDb3VudCgpOwot
ICAgICAgICAgICAgaWYgKHByb3BlcnR5ICYmIGR1cmF0aW9uICYmIHJlcGVhdENvdW50ICYmICFt
X2FuaW1hdGlvbnMuY29udGFpbnMocHJvcGVydHkpKSB7Ci0gICAgICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG5ldyBJbXBsaWNpdEFuaW1hdGlvbih0cmFuc2l0aW9u
KTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnMuc2V0KHByb3BlcnR5LCBhbmltYXRpb24p
OwotICAgICAgICAgICAgfQorI3ByYWdtYSBtYXJrIC0KKworLy8gcmV0dXJuIHRydWUgaWYgdGhl
cmUgaXMgYW55dGhpbmcgdG8gZG8KK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit7CisgICAgY29uc3QgVHJhbnNpdGlvbiogYW5p
bSA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpOworICAgIAorICAgIC8vIE5vdGhpbmcgdG8g
ZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgdHJhbnNpdGlvbnMgb3IgaWYgdGhlIGN1cnJlbnQgYW5k
IHRhcmdldCB0cmFuc2l0aW9ucyBhcmUgdGhlIHNhbWUKKyAgICBpZiAobV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkgJiYgIWFuaW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgbnVtQW5p
bXMgPSAwOworICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAg
Ly8gU2VlIGlmIHRoZSBsaXN0cyBtYXRjaAorICAgIGZvciAoIDsgYW5pbTsgYW5pbSA9IGFuaW0t
Pm5leHQoKSkgeworICAgICAgICArK251bUFuaW1zOworICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogaW1wbEFuaW0gPSAoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gQ1NTUHJvcGVydHlJ
bnZhbGlkKSA/IDAgOgorICAgICAgICBtX3RyYW5zaXRpb25zLmdldChhbmltLT50cmFuc2l0aW9u
UHJvcGVydHkoKSk7CisgICAgICAgIGlmICghaW1wbEFuaW0gfHwgIWltcGxBbmltLT5hbmltYXRp
b25zTWF0Y2goYW5pbSkpIHsKKyAgICAgICAgICAgIHRyYW5zaXRpb25zQ2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBpZiAoIXRy
YW5zaXRpb25zQ2hhbmdlZCAmJiBtX3RyYW5zaXRpb25zLnNpemUoKSAhPSBudW1BbmltcykKKyAg
ICAgICAgdHJhbnNpdGlvbnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIXRyYW5zaXRp
b25zQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRyYW5zaXRpb25zIGhh
dmUgY2hhbmdlZCwgdXBkYXRlIHRoZSBsaXN0CisgICAgcmVzZXRUcmFuc2l0aW9ucyhyZW5kZXJl
cik7CisgICAgCisgICAgaWYgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIC8vIEFkZCBhbGwgdGhlIG5ldyBhbmltYXRpb25zCisgICAgZm9y
IChhbmltID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCk7IGFuaW07IGFuaW0gPSBhbmltLT5u
ZXh0KCkpIHsKICAgICAgICAgCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhbmltYXRpb24gb2Jq
ZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3
YW50IHRoZW0KLSAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRl
ZC4KLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gMDsKLSAgICBIYXNoTWFwPGludCwgSW1wbGlj
aXRBbmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIFZl
Y3RvcjxpbnQ+IG9ic29sZXRlVHJhbnNpdGlvbnM7Ci0gICAgCi0gICAgLy8gTG9vayBhdCB0aGUg
ImFsbCIgYW5pbWF0aW9uIGZpcnN0LgotICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbGxBbmltYXRp
b24gPSBtX2FuaW1hdGlvbnMuZ2V0KGNBbmltYXRlQWxsKTsKLSAgICBpZiAoYWxsQW5pbWF0aW9u
KSB7Ci0gICAgICAgIGFsbEFuaW1hdGlvbi0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0KTsKLSAgICAgICAgaWYgKHRyYW5zaXRpb25zQ2hh
bmdlZCkKLSAgICAgICAgICAgIC8vIE1hcmsgdGhlICJhbGwiIGFuaW1hdGlvbiBhcyBzdGFsZSBp
ZiB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIGNoYW5nZWQuICBTdGFsZSBhbmltYXRpb25zIGNvbnRp
bnVlCi0gICAgICAgICAgICAvLyB0byBibGVuZCBvbiBhIHRpbWVyLCBhbmQgdGhlbiByZW1vdmUg
dGhlbXNlbHZlcyB3aGVuIGZpbmlzaGVkLgotICAgICAgICAgICAgYWxsQW5pbWF0aW9uLT5zZXRT
dGFsZSgpOworICAgICAgICBpbnQgcHJvcGVydHkgICAgICAgID0gYW5pbS0+dHJhbnNpdGlvblBy
b3BlcnR5KCk7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiAgICAgPSBhbmltLT5kdXJhdGlvbigp
OworICAgICAgICBkb3VibGUgZGVsYXkgICAgICAgID0gYW5pbS0+ZGVsYXkoKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBh
cyBzdGFsZSwgdGhlbiB3ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gaXRl
cmF0aW9uIG9mIHRoZSBoYXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAoYWxsQW5pbWF0
aW9uLT5maW5pc2hlZCgpICYmIGFsbEFuaW1hdGlvbi0+c3RhbGUoKSkKLSAgICAgICAgICAgIG9i
c29sZXRlVHJhbnNpdGlvbnMuYXBwZW5kKGNBbmltYXRlQWxsKTsKKyAgICAgICAgaWYgKHByb3Bl
cnR5ICYmIChkdXJhdGlvbiB8fCBkZWxheSkgJiYgIW1fdHJhbnNpdGlvbnMuY29udGFpbnMocHJv
cGVydHkpKSB7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbmV3
IEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+KGFuaW0pLCByZW5kZXJl
ciwgdGhpcyk7CisgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnNldChwcm9wZXJ0eSwgYW5pbWF0
aW9uKTsKKyAgICAgICAgfQogICAgIH0KK30KKworUmVuZGVyU3R5bGUqIENvbXBvc2l0ZUFuaW1h
dGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit7CisgICAgUmVuZGVyU3R5bGUqIHJl
c3VsdFN0eWxlID0gMDsKICAgICAKLSAgICAvLyBOb3cgbG9vayBhdCB0aGUgc3BlY2lhbGl6ZWQg
YW5pbWF0aW9ucy4KLSAgICBmb3IgKEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpp
dGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgLy8gU2tpcCBvdmVyIHRoZSAiYWxsIiBhbmltYXRpb24sIHNpbmNlIHdlIGFuaW1hdGVk
IGl0IGFscmVhZHkuCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5wcm9wZXJ0eSgpID09IGNBbmlt
YXRlQWxsKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpdC0+c2Vj
b25kLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCBy
ZXN1bHQpOwotICAgICAgICBpZiAodHJhbnNpdGlvbnNDaGFuZ2VkKQotICAgICAgICAgICAgLy8g
TWFyayBhbnkgcnVubmluZyBhbmltYXRpb25zIGFzIHN0YWxlIGlmIHRoZSBzZXQgb2YgdHJhbnNp
dGlvbnMgY2hhbmdlZC4gIFN0YWxlIGFuaW1hdGlvbnMgY29udGludWUKLSAgICAgICAgICAgIC8v
IHRvIGJsZW5kIG9uIGEgdGltZXIsIGFuZCB0aGVuIHJlbW92ZSB0aGVtc2VsdmVzIHdoZW4gZmlu
aXNoZWQuCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdGFsZSgpOwotICAgICAgICAKLSAg
ICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBkb25lIGFuZCB3ZSBhcmUgbWFya2VkIGFzIHN0
YWxlLCB0aGVuIHdlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHRoZQotICAgICAgICAvLyBpdGVyYXRp
b24gb2YgdGhlIGhhc2htYXAgaXMgZmluaXNoZWQuCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5m
aW5pc2hlZCgpICYmIGl0LT5zZWNvbmQtPnN0YWxlKCkpCi0gICAgICAgICAgICBvYnNvbGV0ZVRy
YW5zaXRpb25zLmFwcGVuZChpdC0+c2Vjb25kLT5wcm9wZXJ0eSgpKTsKLQotICAgIH0KLSAgICAK
LSAgICAvLyBOb3cgY3VsbCBvdXQgYW55IHN0YWxlIGFuaW1hdGlvbnMgdGhhdCBhcmUgZmluaXNo
ZWQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9ic29sZXRlVHJhbnNpdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5p
bWF0aW9ucy50YWtlKG9ic29sZXRlVHJhbnNpdGlvbnNbaV0pOwotICAgICAgICBhbmltYXRpb24t
PnJlc2V0KHJlbmRlcmVyLCAwLCAwKTsKLSAgICAgICAgZGVsZXRlIGFuaW1hdGlvbjsKLSAgICB9
Ci0KLSAgICBpZiAodHJhbnNpdGlvbnNDaGFuZ2VkKSB7Ci0gICAgICAgIC8vIElmIG91ciB0cmFu
c2l0aW9ucyBjaGFuZ2VkIHdlIG5lZWQgdG8gYWRkIG5ldyBhbmltYXRpb25zIGZvciBhbnkgdHJh
bnNpdGlvbnMgdGhhdAotICAgICAgICAvLyBkb24ndCBleGlzdCB5ZXQuICBJZiBhIG5ldyB0cmFu
c2l0aW9uIGNvbmZsaWN0cyB3aXRoIGEgY3VycmVudGx5IHJ1bm5pbmcgc3RhbGUgdHJhbnNpdGlv
biwgdGhlbiB3ZSB3aWxsIG5vdCBhZGQgaXQuCi0gICAgICAgIC8vIFRoZSBzdGFsZSB0cmFuc2l0
aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpdHNlbGYgdG8gdGhlIG5ldyB0cmFuc2l0
aW9uIGlmIGl0IGV2ZXIgZ2V0cyByZXNldCBvciBmaW5pc2hlcy4KLSAgICAgICAgZm9yIChjb25z
dCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gdGFyZ2V0VHJhbnNpdGlvbnM7IHRyYW5zaXRpb247
IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBwcm9w
ZXJ0eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQgZHVyYXRpb24g
PSB0cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVhdENvdW50ID0g
dHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAmJiBk
dXJhdGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5zKHByb3BlcnR5
KSkgewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcg
SW1wbGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRp
b25zLnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKKyAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJh
bnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3RhcnR1cCkKKyAg
ICB1cGRhdGVUcmFuc2l0aW9ucyhyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7
CisgICAgCisgICAgaWYgKGN1cnJlbnRTdHlsZSkgeworICAgICAgICAvLyBOb3cgdGhhdCB3ZSBo
YXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUgbmV3
IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KKyAgICAgICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRl
clN0eWxlKiYgb25seSBpZiBuZWVkZWQuCisgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgICAgIGZv
ciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5z
aXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qICBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGlmIChhbmltKSB7Cisg
ICAgICAgICAgICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxl
LCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRTdHlsZSA/IHJlc3VsdFN0eWxlIDogdGFyZ2V0
U3R5bGU7Cit9CiAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgcmV0dXJuIHRhcmdldFN0eWxlOworLy8gImFuaW1hdGluZyIgbWVhbnMgdGhhdCBzb21ldGhp
bmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIHRoZSB0aW1lciB0byBrZWVwIGZpcmluZworLy8g
KGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0
QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0QW5p
bWF0aW5nKGluQW5pbWF0aW5nKTsKKyAgICB9ICAgIAogfQogCi1ib29sIENvbXBvc2l0ZUltcGxp
Y2l0QW5pbWF0aW9uOjphbmltYXRpbmcoKSBjb25zdAorYm9vbCBDb21wb3NpdGVBbmltYXRpb246
OmFuaW1hdGluZygpCiB7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8
aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmICghaXQtPnNlY29uZC0+Zmlu
aXNoZWQoKSkKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5hbmltYXRpbmco
KSAmJiB0cmFuc2l0aW9uLT5ydW5uaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9ICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb21wb3NpdGVJbXBsaWNpdEFu
aW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3ZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpyZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICBkZWxldGUgdHJhbnNpdGlv
bjsKKyAgICB9CisgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworfQorCit2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgSW1w
bGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5yZXNldChyZW5kZXJlciwg
MCwgMCk7CisgICAgaWYgKHN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gUmVzZXQgdHJhbnNpdGlvbnMKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghYW5pbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoYW5pbS0+cG9zdGFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZl
bnQoKSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKGFuaW0tPlNUQVRF
X0lOUFVUX01BS0VfTkVXLCAtMSk7CisgICAgICAgICAgICBhbmltLT5yZXNldChyZW5kZXJlcik7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmlt
YXRpb25TdGFydFRpbWUoZG91YmxlIHQpCit7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCit7CisgICAg
Ly8gU2V0IHN0YXJ0IHRpbWUgZm9yIGdpdmVuIHByb3BlcnR5IHRyYW5zaXRpb24KKyAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmlt
ICYmIGFuaW0tPndhaXRpbmdGb3JTdGFydFRpbWUoKSAmJiAKKyAgICAgICAgICAgIChhbmltLT50
cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSB8fCBhbmltLT50cmFuc2l0aW9uUHJvcGVy
dHkoKSA9PSBjQW5pbWF0ZUFsbCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIHQpOworICAgIH0K
K30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKK3sKKyAg
ICBpZiAobV9zdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N1c3BlbmRl
ZCA9IHRydWU7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpIHsKKyAgICAgICAgICAg
IGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKK3sKKyAgICBpZiAoIW1f
c3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNwZW5kZWQgPSBmYWxz
ZTsKKworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5pbS0+
dXBkYXRlUGxheVN0YXRlKHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KQor
eworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
dHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgaWYgKGFuaW0gJiYgKGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8
IGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAg
IGFuaW0tPnNldE92ZXJyaWRkZW4odHJ1ZSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkp
Cit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAg
ICAgICBpZiAoYW5pbSAmJiAoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gcHJvcGVydHkg
fHwgYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAg
ICAgYW5pbS0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6c3R5bGVJc1NldHVwKCkKK3sKKyAgICBpZiAobV9udW1TdHlsZUlzU2V0dXBX
YWl0ZXJzID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPndh
aXRpbmdGb3JTdHlsZVNldHVwKCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAsIC0xKTsKKyAgICB9Cit9
CisKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9w
ZXJ0eSkgY29uc3QKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJv
cGVydHkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworI3ByYWdtYSBtYXJrIC0KKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQmFzZSB7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyQmFzZShpbnQgcHJvcCkKKyAgICA6IG1fcHJvcChw
cm9wKQorICAgIHsgfQorICAgIHZpcnR1YWwgflByb3BlcnR5V3JhcHBlckJhc2UoKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3Q9MDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
ZykgY29uc3Q9MDsKKyAgICAKKyAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3A7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50IG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorY2xhc3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIFByb3BlcnR5
V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckdldHRlcihpbnQgcHJv
cCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCisgICAgOiBQcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3ApCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAg
dmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAo
Yi0+Km1fZ2V0dGVyKSgpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBUIChSZW5kZXJT
dHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citj
bGFzcyBQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsK
K3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXIoaW50IHByb3AsIFQgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgOiBQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoKGEt
PipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIHByb2cpKTsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBQ
cm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFNoYWRv
d0RhdGEqPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KGludCBwcm9wLCBT
aGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9vbCkpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8U2hhZG93RGF0YSo+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikK
KyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIFNoYWRvd0Rh
dGEqIHNoYWRvd2EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFkb3dEYXRhKiBzaGFk
b3diID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghc2hhZG93YSAm
JiBzaGFkb3diIHx8IHNoYWRvd2EgJiYgIXNoYWRvd2IpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChzaGFkb3dhICYmIHNoYWRvd2IgJiYgKCpzaGFkb3dhICE9ICpzaGFk
b3diKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25z
dAorICAgIHsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YSA9IChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIFNoYWRvd0RhdGEqIHNoYWRvd2IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICBTaGFkb3dEYXRhIGRlZmF1bHRTaGFkb3dEYXRhKDAsIDAsIDAsIENvbG9yOjp0cmFuc3BhcmVu
dCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNoYWRvd2EpCisgICAgICAgICAgICBzaGFkb3dh
ID0gJmRlZmF1bHRTaGFkb3dEYXRhOworICAgICAgICBpZiAoIXNoYWRvd2IpCisgICAgICAgICAg
ICBzaGFkb3diID0gJmRlZmF1bHRTaGFkb3dEYXRhOworICAgICAgICAKKyAgICAgICAgKGRzdC0+
Km1fc2V0dGVyKShibGVuZEZ1bmMoc2hhZG93YSwgc2hhZG93YiwgcHJvZyksIGZhbHNlKTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFNo
YWRvd0RhdGEqLCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckludFNpemUgOiBw
dWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPEludFNpemU+IHsKK3B1YmxpYzoKKyAgICBQcm9w
ZXJ0eVdyYXBwZXJJbnRTaXplKGludCBwcm9wLCBJbnRTaXplIChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IEludFNpemUmKSkK
KyAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxJbnRTaXplPihwcm9wLCBnZXR0ZXIpCisgICAg
LCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAg
eworICAgICAgICBJbnRTaXplIHNpemVhID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgSW50
U2l6ZSBzaXplYiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
KHNpemVhID09IHNpemViKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICBJbnRTaXplIHNpemVhID0gKGEt
PiptX2dldHRlcikoKTsKKyAgICAgICAgSW50U2l6ZSBzaXplYiA9IChiLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKHNp
emVhLCBzaXplYiwgcHJvZykpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCAoUmVu
ZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgSW50U2l6ZSYpOworfTsKKworY2xhc3MgUHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyQmFzZSB7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoaW50IHByb3As
IGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFz
ZShwcm9wKQorICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQor
ICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJv
bUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4q
bV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xvcjsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICBDb2xvciBm
cm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGIt
PiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2cpKTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlciko
KSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYp
OworfTsKKwogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgewogcHVibGljOgogICAg
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKik7CiAgICAgfkFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogZ2V0KFJl
bmRlck9iamVjdCopOworICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYWNjZXNzQ29tcG9z
aXRlQW5pbWF0aW9uKFJlbmRlck9iamVjdCopOwogICAgIGJvb2wgY2xlYXIoUmVuZGVyT2JqZWN0
Kik7CiAgICAgCi0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiopOwotICAgIHZvaWQgdXBkYXRlVGltZXIoKTsKLQotICAgIGJvb2wgaGFzSW1wbGlj
aXRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0K
LQorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4qKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisgICAg
dm9pZCB1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU+Kik7CisgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIo
KTsKKyAgICAKKyAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV9jb21w
b3NpdGVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9j
dW1lbnQqIGRvY3VtZW50KTsKKyAgICAKKyAgICB2b2lkIGNsZWFudXBGaW5pc2hlZEFuaW1hdGlv
bnMoKTsKKyAgICAKKyAgICB2b2lkIHN0eWxlSXNTZXR1cCgpOworICAgIAorICAgIGJvb2wgaXNB
bmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0
eSkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKGludCBwcm9w
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIAorICAg
IC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9uIHRp
bWVycworICAgIHN0YXRpYyBib29sIGJsZW5kUHJvcGVydGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5
bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3Vi
bGUgcHJvZyk7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVwKGJvb2wg
d2FpdGluZykgeyBpZiAod2FpdGluZykgbV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzKys7IGVsc2Ug
bV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzLS07IH0KKyAgICAKIHByaXZhdGU6Ci0gICAgSGFzaE1h
cDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+IG1fYW5pbWF0aW9u
czsKLSAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4gbV90aW1lcjsKKyAgICBz
dGF0aWMgdm9pZCBlbnN1cmVQcm9wZXJ0eU1hcCgpOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1h
cDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmltYXRpb24qPiBSZW5kZXJPYmplY3RBbmltYXRp
b25NYXA7CisgICAgCisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwIG1fY29tcG9zaXRlQW5p
bWF0aW9uczsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4gbV9hbmltYXRp
b25UaW1lcjsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4gbV91cGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyOwogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIHVpbnQzMl90IG1f
bnVtU3R5bGVJc1NldHVwV2FpdGVyczsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPFByb3BlcnR5
V3JhcHBlckJhc2UqPiogZ19wcm9wZXJ0eVdyYXBwZXJzOworICAgIHN0YXRpYyBpbnQgZ19wcm9w
ZXJ0eVdyYXBwZXJNYXBbbnVtQ1NTUHJvcGVydGllc107CiB9OwogCisjcHJhZ21hIG1hcmsgLQor
CitWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Z19wcm9wZXJ0eVdyYXBwZXJzID0gMDsKK2ludCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6Z19wcm9wZXJ0eVdyYXBwZXJNYXBbXTsKKwogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKiBmcmFtZSkKLSAgICA6IG1fdGltZXIo
dGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp0aW1lckZpcmVkKQotICAgICwgbV9m
cmFtZShmcmFtZSkKKzogbV9hbmltYXRpb25UaW1lcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCissIG1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0
Y2hlcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVJlbmRlcmluZ0Rp
c3BhdGNoZXJGaXJlZCkKKywgbV9mcmFtZShmcmFtZSkKKywgbV9udW1TdHlsZUlzU2V0dXBXYWl0
ZXJzKDApCiB7CisgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsKIH0KIAogQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6On5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgpCiB7Ci0gICAgZGVsZXRl
QWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fY29tcG9zaXRl
QW5pbWF0aW9ucyk7CiB9CiAKLUNvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6Z2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCisvLyBzdGF0aWMK
K3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZVByb3BlcnR5TWFwKCkKIHsK
LSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9hbmltYXRpb25z
LmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmltYXRpb24gJiYgcmVuZGVyZXItPnN0eWxlKCkt
PnRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uID0gbmV3IENvbXBvc2l0ZUltcGxp
Y2l0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1h
dGlvbik7CisgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJl
IHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBBbmltYXRp
b25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KKyAgICBpZiAoZ19wcm9wZXJ0eVdyYXBwZXJzID09
IDApIHsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzID0gbmV3IFZlY3RvcjxQcm9wZXJ0eVdy
YXBwZXJCYXNlKj4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIHBy
b3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBhbmQgYmxlbmRzCisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihD
U1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpzZXRMZWZ0
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNldFJpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0eWxlOjp0
b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJl
bmRlclN0eWxlOjpib3R0b20sICZSZW5kZXJTdHlsZTo6c2V0Qm90dG9tKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQ
cm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdpZHRo
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0eWxlOjpoZWlnaHQsICZSZW5k
ZXJTdHlsZTo6c2V0SGVpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyTGVm
dFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJMZWZ0V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyUmlnaHRXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRo
LCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRv
cFdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tV2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjpt
YXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQpKTsKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3Bl
cnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6
c2V0TWFyZ2luUmlnaHQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5
bGU6Om1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Ub3ApKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1By
b3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6Om1hcmdpbkJvdHRvbSwgJlJlbmRlclN0
eWxlOjpzZXRNYXJnaW5Cb3R0b20pKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZS
ZW5kZXJTdHlsZTo6cGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxM
ZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdSaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFk
ZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRp
bmdUb3ApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20pKTsKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0
T3BhY2l0eSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxlOjpj
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldEJhY2tncm91bmRDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
R2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5HYXAp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwgJlJlbmRlclN0
eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCkpOworICAgICAg
ICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtbldpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVySG9yaXpvbnRhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNp
bmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcpKTsKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGlj
YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZykp
OworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
PGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZSZW5kZXJTdHlsZTo6ekluZGV4LCAmUmVuZGVyU3R5
bGU6OnNldFpJbmRleCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OmxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJv
cGVydHlPdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZU9mZnNldCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eU91dGxp
bmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0T3V0
bGluZVdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6
bGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQ
cm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldFdvcmRTcGFjaW5nKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxl
OjpzZXRUcmFuc2Zvcm0pKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2lu
WCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5z
Zm9ybU9yaWdpblgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwg
JlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9y
bU9yaWdpblkpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BMZWZ0UmFkaXVzLCAm
UmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wTGVmdFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcFJpZ2h0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclRvcFJpZ2h0UmFkaXVzKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90
dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21S
aWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cykpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPEVW
aXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0
eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNpYmlsaXR5KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9vbSwg
JlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb20pKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiB0aGVzZSBtaWdodCBiZSBpbnZhbGlkIGNvbG9ycywgbmVlZCB0byBj
aGVjayBmb3IgdGhhdAorICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxl
Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENv
bHVtblJ1bGVDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRTdHJva2VDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dEZpbGxDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29s
b3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckxlZnRDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9y
LCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
UmlnaHRDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwg
JlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BD
b2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgJlJl
bmRlclN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0
b21Db2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsICZSZW5k
ZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvcikpOwor
ICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgYXJlIGZvciBzaGFkb3dzCisgICAgICAgIGdfcHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3csICZSZW5kZXJTdHlsZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6
OnNldEJveFNoYWRvdykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJlbmRlclN0eWxl
Ojp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkgbnVtQ1NTUHJvcGVydGll
czsgKytpKQorICAgICAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJNYXBbaV0gPSAtMTsKKyAgICAg
ICAgCisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBB
U1NFUlQoKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9w
ZXJ0eSA8IG51bUNTU1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJN
YXBbKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9wZXJ0
eV0gPSBpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBzdGF0aWMKK2Jvb2wgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnByb3BlcnRpZXNFcXVhbChpbnQgcHJvcCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIGlmIChwcm9wID09IGNBbmlt
YXRlQWxsKSB7CisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoISgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+ZXF1YWxzKGEsIGIpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgaW50IHByb3BJbmRleCA9IHByb3AgLSBmaXJzdENTU1Byb3BlcnR5OworICAgICAgICAK
KyAgICAgICAgaWYgKHByb3BJbmRleCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNTU1Byb3BlcnRp
ZXMpIHsKKyAgICAgICAgICAgIGludCBpID0gZ19wcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcEluZGV4
XTsKKyAgICAgICAgICAgIHJldHVybiAoaSA+PSAwKSA/ICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtp
XS0+ZXF1YWxzKGEsIGIpIDogdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gc3RhdGljIC0gcmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBzb2Z0
d2FyZSBhbmltYXRpb24gdGltZXJzCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpi
bGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpCit7CisgICAgaWYgKHBy
b3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAgICAgYm9vbCBuZWVkc1RpbWVyID0gZmFsc2U7Cisg
ICAgCisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBQ
cm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldOwor
ICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwgYikpIHsKKyAgICAgICAgICAgICAg
ICB3cmFwcGVyLT5ibGVuZChkc3QsIGEsIGIsIHByb2cpOworICAgICAgICAgICAgICAgIG5lZWRz
VGltZXIgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBu
ZWVkc1RpbWVyOworICAgIH0KKyAgICAKKyAgICBpbnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0
Q1NTUHJvcGVydHk7CisgICAgaWYgKHByb3BJbmRleCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNT
U1Byb3BlcnRpZXMpIHsKKyAgICAgICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtwcm9w
SW5kZXhdOworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldOworICAgICAgICAgICAg
d3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9nKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworQ29tcG9z
aXRlQW5pbWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWNjZXNzQ29tcG9zaXRl
QW5pbWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKKyAg
ICBpZiAoIWFuaW1hdGlvbikgeworICAgICAgICBhbmltYXRpb24gPSBuZXcgQ29tcG9zaXRlQW5p
bWF0aW9uKCFyZW5kZXJlci0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCksIHRoaXMpOworICAg
ICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBhbmltYXRpb24pOwogICAg
IH0KICAgICByZXR1cm4gYW5pbWF0aW9uOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpjbGVhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIENvbXBvc2l0ZUlt
cGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMudGFrZShyZW5kZXJlcik7
CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUg
c3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KKyAgICAvLyBkbyBhIHNldENoYW5nZWQoKSB3
aGVuIHN1c3BlbmRlZAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLnRha2UocmVuZGVyZXIpOwogICAgIGlmICghYW5pbWF0aW9uKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5yZXNldChyZW5kZXJlcik7CisgICAg
YW5pbWF0aW9uLT5yZXNldFRyYW5zaXRpb25zKHJlbmRlcmVyKTsKKyAgICBib29sIHdhc1N1c3Bl
bmRlZCA9IGFuaW1hdGlvbi0+c3VzcGVuZGVkKCk7CiAgICAgZGVsZXRlIGFuaW1hdGlvbjsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdhc1N1c3BlbmRlZDsKK30KKwordm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpCit7Cisg
ICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5p
bWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdp
bigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbXBBbmltLT5jbGVhbnVwRmlu
aXNoZWRBbmltYXRpb25zKHJlbmRlcmVyKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnN0eWxlSXNTZXR1cCgpCit7CisgICAgaWYgKG1fbnVtU3R5bGVJc1Nl
dHVwV2FpdGVycyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVuZGVyT2JqZWN0
QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAg
IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgaXQtPnNlY29uZC0+c3R5bGVJ
c1NldHVwKCk7CisgICAgfQogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVUaW1lcigpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmlt
YXRpb25UaW1lcigpCiB7CiAgICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAgICBIYXNoTWFw
PFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwg
Q29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5hbmlt
YXRpbmcoKSkgeworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBm
b3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyAr
K2l0KSB7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+YW5pbWF0
aW5nKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoYW5pbWF0aW5nKSB7Ci0gICAgICAg
IGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV90aW1lci5zdGFydFJlcGVh
dGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Ci0gICAgfSBlbHNlIGlmIChtX3RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgICAgICBpZiAoIW1fYW5pbWF0aW9u
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRSZXBl
YXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAgIH0gZWxzZSBpZiAobV9hbmltYXRpb25U
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKK30KKwor
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hl
ckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopCit7CisgICAgaWYgKG1f
ZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpCit7CisgICAgaWYg
KCFtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3Vw
ZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0KIH0KIAotdm9p
ZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4qIHRpbWVyKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4q
IHRpbWVyKQogeworICAgIC8vY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpOworICAgIAogICAg
IC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFuZ2VkIG9u
IGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8gYW4gaW1t
ZWRpYXRlCiAgICAgLy8gdXBkYXRlUmVuZGVyaW5nLiAgSXQgd2lsbCB0aGVuIGNhbGwgYmFjayB0
byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KICAgICBib29sIGFuaW1hdGluZyA9IGZhbHNlOwot
ICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6
aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5k
ZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQtPmFuaW1hdGluZygpKSB7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25z
dF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOwor
ICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNF
bmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsK
KyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRpbmcoKSkg
ewogICAgICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGl0LT5maXJzdC0+
ZWxlbWVudCgpLT5zZXRDaGFuZ2VkKCk7CisgICAgICAgICAgICBjb21wQW5pbS0+c2V0QW5pbWF0
aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNldENoYW5nZWQocmVuZGVyZXItPmVsZW1lbnQoKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRl
UmVuZGVyaW5nKCk7CiAgICAgCi0gICAgdXBkYXRlVGltZXIoKTsKKyAgICB1cGRhdGVBbmltYXRp
b25UaW1lcigpOwogfQogCi1BbmltYXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250cm9sbGVy
KEZyYW1lKiBmcmFtZSkKLTptX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZy
YW1lKSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzQW5pbWF0aW5nUHJvcGVy
dHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0Cit7Cisg
ICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
Z2V0KG9iaik7CisgICAgaWYgKCFhbmltYXRpb24pIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KTsKK30KKwordm9p
ZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQq
IGRvY3VtZW50KQoreworICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0
KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAo
cmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBjb21wQW5pbS0+
c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQW5pbWF0aW9uVGlt
ZXIoKTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0
aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVu
ZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5m
aXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKKyAgICAgICAg
ICAgIGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgfQorICAgIAorICAgIHVwZGF0
ZUFuaW1hdGlvblRpbWVyKCk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKK3ZvaWQgSW1wbGljaXRB
bmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUs
IFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKQoreworICAgIGlmICghcnVubmluZygpIHx8
ICFtX29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBJZiB3ZSdyZSBub3QgcnVubmluZyBhbnkgYW5pbWF0aW9ucyBhbmQgdGhl
cmUgaXMgbm8gY2hhbmdlIGluIG91ciBwcm9wLCBqdXN0IHJldHVybiAKKyAgICBpZiAoaXNuZXco
KSAmJiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKG1fcHJvcGVy
dHksIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1l
YW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgorICAgIC8v
IElmIHNvLCB3ZSBuZWVkIHRvIHJlc2V0IGFuZCBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlCisg
ICAgaWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVf
SU5QVVRfTUFLRV9ORVcsIC0xKTsKKyAgICAgICAgcmVzZXQocmVuZGVyZXIpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICBpb0FuaW1hdGVkU3R5
bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odGFyZ2V0U3R5bGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuZCB0aGUgdGFyZ2V0
U3R5bGUgdmFsdWUgaGFzIGNoYW5nZWQgZnJvbSBvdXIgY3VycmVudCB0b1N0eWxlIHZhbHVlLCB3
ZSBuZWVkIHRvIHJlc2V0LgorICAgIC8vIFdlIGFsc28gbmVlZCB0byByZXNldCBpZiB3ZSBhcmUg
bmV3LgorICAgIGlmIChpc25ldygpIHx8ICFtX3RvU3R5bGUgfHwgIUFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwobV9wcm9wZXJ0eSwgbV90b1N0eWxlLCB0YXJnZXRT
dHlsZSkpIHsKKyAgICAgICAgLy8gT3BhY2l0eSBpcyBzcGVjaWFsLiBUaGlzIGlzIGNoYW5naW5n
IGEgY29uc3QgUmVuZGVyU3R5bGUsIGJ1dCB3ZSBrbm93IHdoYXQgd2UgYXJlIGRvaW5nLCByZWFs
bHkgOi0pCisgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gZG8gdGhpcz8KKyAgICAgICAgaWYgKCFp
c25ldygpICYmIG1fZnJvbVN0eWxlICYmIChtX3Byb3BlcnR5ID09IENTU1Byb3BlcnR5T3BhY2l0
eSB8fCBtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsKSkgeworICAgICAgICAgICAgLy8gR2V0IHRo
ZSBibGVuZGVkIHZhbHVlIG9mIG9wYWNpdHkgaW50byB0aGUgY3VycmVudFN0eWxlICh3aGljaCB3
aWxsIGJlIHRoZSBuZXcgZnJvbVN0eWxlKQorICAgICAgICAgICAgZG91YmxlIHByb2cgPSBwcm9n
cmVzcygxLCAwKTsKKyAgICAgICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpibGVu
ZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlPcGFjaXR5LCBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4o
Y3VycmVudFN0eWxlKSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7CisgICAgICAgIH0K
KyAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAg
IH0KKyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCisgICAgLy8gV2Uga25v
dyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQK
KyAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgaW9BbmltYXRlZFN0eWxlID0gbmV3
IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKKyAg
ICAKKyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDApOworICAgIGJvb2wgbmVlZHNBbmlt
ID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcyhtX3Byb3BlcnR5
LCBpb0FuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOworICAgIGlm
IChuZWVkc0FuaW0pCisgICAgICAgIHNldEFuaW1hdGluZygpOworCisgICAgLy9BU1NFUlQobmVl
ZHNBbmltICE9IG1fd2FpdGVkRm9yUmVzcG9uc2UgfHwgcHJlYWN0aXZlKCkpOworfQorCitib29s
IEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5kQW5pbWF0
aW9uKGJvb2wgcmVzZXQpCit7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5pbWF0
aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQogeworICAgIC8vIHdlJ3JlIGNvbnZlcnRpbmcg
dGhlIGFuaW1hdGlvbiBpbnRvIGEgdHJhbnNpdGlvbiBoZXJlCisgICAgaWYgKCFzZW5kVHJhbnNp
dGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgaW5FbGFwc2Vk
VGltZSkpIHsKKyAgICAgICAgLy8gd2UgZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3
b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigpLCBzbyB3ZSdsbCBqdXN0IGVuZAorICAgICAgICAvLyBp
dCBoZXJlLgorICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgfQorfQorCitib29sIElt
cGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
aW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHJldHVybiBmYWxzZTsg
Ly8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246
OnJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tIC8q
ID0gMCAqLywgY29uc3QgUmVuZGVyU3R5bGUqIHRvIC8qID0gMCAqLykKK3sKKyAgICBBU1NFUlQo
KCFtX3RvU3R5bGUgJiYgIXRvKSB8fCBtX3RvU3R5bGUgIT0gdG8pOworICAgIEFTU0VSVCgoIW1f
ZnJvbVN0eWxlICYmICFmcm9tKSB8fCBtX2Zyb21TdHlsZSAhPSBmcm9tKTsKKyAgICBpZiAobV9m
cm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJl
bmEoKSk7CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5kZXJlZihyZW5k
ZXJlci0+cmVuZGVyQXJlbmEoKSk7CisgICAgCisgICAgbV9mcm9tU3R5bGUgPSBjb25zdF9jYXN0
PFJlbmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMgcmVhZC1vbmx5LCBvdGhlciB0aGFuIHRo
ZSByZWYKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5yZWYoKTsK
KyAgICAKKyAgICBtX3RvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odG8pOyAgICAg
ICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmIChtX3RvU3R5
bGUpCisgICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7CisgICAgCisgICAgLy8gcmVzdGFydCB0aGUg
dHJhbnNpdGlvbgorICAgIGlmIChmcm9tICYmIHRvKQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hp
bmUoU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sIC0xKTsKK30KKwordm9pZCBJbXBsaWNp
dEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRlbihib29sIGIpCit7CisgICAgaWYgKGIgIT0gbV9vdmVy
cmlkZGVuKSB7CisgICAgICAgIG1fb3ZlcnJpZGRlbiA9IGI7CisgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShtX292ZXJyaWRkZW4gPyBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSA6IFNUQVRF
X0lOUFVUX1JFU1VNRV9PVkVSUklERSwgLTEpOworICAgIH0KK30KKworYm9vbCBJbXBsaWNpdEFu
aW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSB8fAorICAgIChtX3Byb3BlcnR5ID09IGNBbmltYXRl
QWxsICYmICFBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKHByb3Bl
cnR5LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSk7Cit9CiAKKyNwcmFnbWEgbWFyayAtCisKK0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorOiBt
X2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkKK3sKKyAgICAKIH0K
IAogQW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNvbnRyb2xsZXIoKQpAQCAtNTgxLDQy
ICsxNzY3LDk4IEBAIEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRpb25Db250cm9sbGVyKCkK
ICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNl
bEltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBBbmltYXRp
b25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0gICAgaWYgKCFtX2RhdGEtPmhhc0ltcGxpY2l0QW5pbWF0aW9ucygpKQorICAgIGlmICghbV9k
YXRhLT5oYXNBbmltYXRpb25zKCkpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGlmICht
X2RhdGEtPmNsZWFyKHJlbmRlcmVyKSkKLSAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+c2V0
Q2hhbmdlZCgpOworICAgICAgICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkpOwogfQog
Ci1SZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW1wbGljaXRBbmltYXRp
b25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKK1Jl
bmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sgICAgCisgICAgLy8gZG9u
J3QgZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCisgICAgaWYgKCFyZW5kZXJlci0+
ZG9jdW1lbnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAg
ICAgcmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOworICAgIAorICAgIGlmICgoIW9sZFN0eWxlIHx8ICFvbGRTdHlsZS0+
dHJhbnNpdGlvbnMoKSkgJiYgIW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKQorICAgICAgICByZXR1
cm4gbmV3U3R5bGU7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9IG5ld1N0
eWxlOworICAgIAogICAgIC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNpdCBhbmlt
YXRpb25zIGZyb20gYSBoYXNodGFibGUuICBXZSB0aGVuIGNvbXBhcmUgdGhlbQogICAgIC8vIGFn
YWluc3QgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4g
c3luYy4gIElmIGRlc3RpbmF0aW9uIHZhbHVlcwogICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVz
ZXQgdGhlIGFuaW1hdGlvbi4gIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVlcyBh
bmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAgICAgQVNTRVJUKHJlbmRlcmVyLT5l
bGVtZW50KCkpOyAvLyBGSVhNRTogV2UgZG8gbm90IGFuaW1hdGUgZ2VuZXJhdGVkIGNvbnRlbnQg
eWV0LgorICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0g
bV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ocmVuZGVyZXIpOworICAgIGJsZW5kZWRT
dHlsZSA9IHJlbmRlcmVyQW5pbWF0aW9ucy0+YW5pbWF0ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5l
d1N0eWxlKTsKKyAgICAKKyAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAg
CisgICAgaWYgKGJsZW5kZWRTdHlsZSAhPSBuZXdTdHlsZSkgeworICAgICAgICAvLyBJZiB0aGUg
YW5pbWF0aW9ucy90cmFuc2l0aW9ucyBjaGFuZ2Ugb3BhY2l0eSwgdHJhbnNmb3JtIG9yIHBlcnNw
ZWN0aXZlLCB3ZSBuZWVlZCB0byB1cGRhdGUKKyAgICAgICAgLy8gdGhlIHN0eWxlIHRvIGltcG9z
ZSB0aGUgc3RhY2tpbmcgcnVsZXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSBpbiBDU1NT
dHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZSgpLgorICAgICAgICBpZiAoYmxlbmRlZFN0
eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKChibGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYp
KSkgLy8gRklYTUUgfHwgYmxlbmRlZFN0eWxlLT5oYXNUcmFuc2Zvcm1PclBlcnNwZWN0aXZlKCkp
KSkKKyAgICAgICAgICAgIGJsZW5kZWRTdHlsZS0+c2V0WkluZGV4KDApOworICAgIH0KKyAgICBy
ZXR1cm4gYmxlbmRlZFN0eWxlOworfQogCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24q
IGFuaW1hdGlvbiA9IG1fZGF0YS0+Z2V0KHJlbmRlcmVyKTsKLSAgICBpZiAoIWFuaW1hdGlvbikK
LSAgICAgICAgcmV0dXJuIG5ld1N0eWxlOwordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXRB
bmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiBvYmosIGRvdWJsZSB0KQoreworICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21w
b3NpdGVBbmltYXRpb24ob2JqKTsKKyAgICByZW5kZXJlckFuaW1hdGlvbnMtPnNldEFuaW1hdGlv
blN0YXJ0VGltZSh0KTsKK30KIAotICAgIFJlbmRlclN0eWxlKiByZXN1bHQgPSBhbmltYXRpb24t
PmFuaW1hdGUocmVuZGVyZXIsIHJlbmRlcmVyLT5zdHlsZSgpLCBuZXdTdHlsZSk7Ci0gICAgbV9k
YXRhLT51cGRhdGVUaW1lcigpOwotICAgIHJldHVybiByZXN1bHQ7Cit2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnNldFRyYW5zaXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiBvYmosIGludCBw
cm9wZXJ0eSwgZG91YmxlIHQpCit7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiByZW5kZXJlckFu
aW1hdGlvbnMgPSBtX2RhdGEtPmFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihvYmopOworICAgIHJl
bmRlcmVyQW5pbWF0aW9ucy0+c2V0VHJhbnNpdGlvblN0YXJ0VGltZShwcm9wZXJ0eSwgdCk7Cit9
CisKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kYXRhLT5pc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihvYmosIHByb3BlcnR5KTsKIH0K
IAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygpCit2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkK
IHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRhYmxlIGFuZCBjYWxsIHBhdXNl
IG9uIGVhY2ggYW5pbWF0aW9uLgotICAgIC8vIEtpbGwgb3VyIHRpbWVyLgorI2lmZGVmIERFQlVH
X1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIg
JXAgc3VzcGVuZEFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwXG4iLCB0aGlzLCBkb2N1bWVudCk7
CisjZW5kaWYKKyAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKGRvY3VtZW50KTsKIH0KIAot
dm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKCkKK3ZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0g
ICAgLy8gRklYTUU6IFdhbGsgdGhlIHdob2xlIGhhc2h0YWJsZSBhbmQgY2FsbCByZXN1bWUgb24g
ZWFjaCBhbmltYXRpb24uCi0gICAgLy8gU3RhcnQgb3VyIHRpbWVyLgorI2lmZGVmIERFQlVHX1NU
QVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAg
cmVzdW1lQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNl
bmRpZgorICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9ucyhkb2N1bWVudCk7CiB9CiAKK3ZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkKK3sK
KyAgICBtX2RhdGEtPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworfQorCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0eWxlSXNTZXR1cCgpCit7CisgICAgbV9kYXRhLT5zdHls
ZUlzU2V0dXAoKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JT
dHlsZUlzU2V0dXAoYm9vbCB3YWl0aW5nKQoreworICAgIGlmICh3YWl0aW5nKQorICAgICAgICBt
X251bVN0eWxlSXNTZXR1cFdhaXRlcnMrKzsKKyAgICBlbHNlCisgICAgICAgIG1fbnVtU3R5bGVJ
c1NldHVwV2FpdGVycy0tOworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c2V0V2FpdGluZ0Zv
clN0eWxlSXNTZXR1cCh3YWl0aW5nKTsKK30KKyAgICAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9BbmltYXRpb25Db250cm9sbGVyLmggYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJv
bGxlci5oCmluZGV4IGZkYTExNDMuLmNiYjdjNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9B
bmltYXRpb25Db250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaApAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHlsZTsKQEAgLTQyLDE0ICs0MywyNSBA
QCBwdWJsaWM6CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlcihGcmFtZSopOwogICAgIH5BbmltYXRp
b25Db250cm9sbGVyKCk7CiAgICAgCi0gICAgdm9pZCBjYW5jZWxJbXBsaWNpdEFuaW1hdGlvbnMo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgUmVuZGVyU3R5bGUqIHVwZGF0ZUltcGxpY2l0QW5pbWF0aW9u
cyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIHZvaWQgY2FuY2Vs
QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICBSZW5kZXJTdHlsZSogdXBkYXRlQW5pbWF0
aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogICAgIAotICAgIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICB2b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqIG9iaiwgZG91YmxlIHQp
OworICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqIG9iaiwgaW50
IHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5
T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9p
ZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCB1cGRhdGVB
bmltYXRpb25UaW1lcigpOworICAgIAorICAgIHZvaWQgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNw
YXRjaGVyKCk7CisgICAgCisgICAgdm9pZCBzdHlsZUlzU2V0dXAoKTsKICAgICAKIHByaXZhdGU6
CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fZGF0YTsKKyAgICAKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCmluZGV4IDZlNmExNWMuLjA4YTA3ZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTQ5MCw3ICsxNDkwLDcgQEAg
dm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1l
bnQpCiAgICAgICAgIGlmICh2aWV3LT5mcmFtZSgpKSB7CiAgICAgICAgICAgICBpZiAoZG9jdW1l
bnQgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmhhc0xh
eWVyKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmxheWVyKCktPnN1
c3BlbmRNYXJxdWVlcygpOwotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS0+YW5pbWF0aW9uKCkt
PnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRp
b24oKS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZDhiZTY0ZC4uMmNmYWNlMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMTQ5LDcgKzIxNDksNyBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogdm9pZCBSZW5kZXJP
YmplY3Q6OnNldEFuaW1hdGFibGVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYg
KCFpc1RleHQoKSAmJiBtX3N0eWxlICYmIHN0eWxlKQotICAgICAgICBzdHlsZSA9IGFuaW1hdGlv
bigpLT51cGRhdGVJbXBsaWNpdEFuaW1hdGlvbnModGhpcywgc3R5bGUpOworICAgICAgICBzdHls
ZSA9IGFuaW1hdGlvbigpLT51cGRhdGVBbmltYXRpb25zKHRoaXMsIHN0eWxlKTsKIAogICAgIHNl
dFN0eWxlKHN0eWxlKTsKIH0KQEAgLTI1MjgsNyArMjUyOCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpkZXN0cm95KCkKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAK
LSAgICBhbmltYXRpb24oKS0+Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFu
aW1hdGlvbigpLT5jYW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgLy8gQnkgZGVmYXVsdCBu
byByZWYtY291bnRpbmcuIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGRvZXNuJ3QgY2FsbAogICAg
IC8vIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBkbyByZWYtY291bnRpbmcuIElm
IGFueXRoaW5nCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA4N2Q4NDQ1Li5hMzc3
YWQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9p
ZCBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKQogICAgIC8vIFNvIHRoZSBjb2RlIGJlbG93IGluY2x1
ZGVzIGNvcGllZCBhbmQgcGFzdGVkIGNvbnRlbnRzIG9mCiAgICAgLy8gYm90aCBSZW5kZXJCb3g6
OmRlc3Ryb3koKSBhbmQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkuCiAgICAgLy8gRml4IG9yaWdp
bmFsbHkgbWFkZSBmb3IgPHJkYXI6Ly9wcm9ibGVtLzQyMjg4MTg+LgotICAgIGFuaW1hdGlvbigp
LT5jYW5jZWxJbXBsaWNpdEFuaW1hdGlvbnModGhpcyk7CisgICAgYW5pbWF0aW9uKCktPmNhbmNl
bEFuaW1hdGlvbnModGhpcyk7CiAKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkKICAg
ICAgICAgdi0+cmVtb3ZlV2lkZ2V0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCmluZGV4IDAyMTNhMjkuLjQwMmM1YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTQxLDYgKzQxLDEyIEBAIHN0YXRpYyBib29sIGltYWdlc0Vx
dWl2YWxlbnQoU3R5bGVJbWFnZSogaW1hZ2UxLCBTdHlsZUltYWdlKiBpbWFnZTIpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKKy8vIGNvbXBhcmUgZmxvYXRpbmcgcG9pbnRzLCB0YWtpbmcgbmFuIGlu
dG8gYWNjb3VudAorc3RhdGljIGlubGluZSBib29sIGZsb2F0aW5nUG9pbnRWYWx1ZXNFcXVhbChm
bG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiAoaXNuYW4oYSkgJiYgaXNuYW4oYikpIHx8
IChhID09IGIpOworfQorCiBib29sIE5pbmVQaWVjZUltYWdlOjpvcGVyYXRvcj09KGNvbnN0IE5p
bmVQaWVjZUltYWdlJiBvKSBjb25zdAogewogICAgIHJldHVybiBpbWFnZXNFcXVpdmFsZW50KG1f
aW1hZ2UuZ2V0KCksIG8ubV9pbWFnZS5nZXQoKSkgJiYgbV9zbGljZXMgPT0gby5tX3NsaWNlcyAm
JiBtX2hvcml6b250YWxSdWxlID09IG8ubV9ob3Jpem9udGFsUnVsZSAmJgpAQCAtNjY1LDExMCAr
NjcxLDg3IEBAIFRyYW5zZm9ybU9wZXJhdGlvbiogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpi
bGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyCiB9CiAKIFRyYW5zaXRpb246OlRyYW5z
aXRpb24oKQotICAgIDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25E
dXJhdGlvbigpKQotICAgICwgbV9yZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5z
aXRpb25SZXBlYXRDb3VudCgpKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6
aW5pdGlhbFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKQorICAgIDogbV9kdXJhdGlvbihSZW5k
ZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKFJlbmRl
clN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKSkKKyAgICAsIG1fZGVsYXkoUmVuZGVyU3R5
bGU6OmluaXRpYWxEZWxheSgpKQogICAgICwgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlh
bFRyYW5zaXRpb25Qcm9wZXJ0eSgpKQogICAgICwgbV9kdXJhdGlvblNldChmYWxzZSkKLSAgICAs
IG1fcmVwZWF0Q291bnRTZXQoZmFsc2UpCiAgICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0KGZhbHNl
KQorICAgICwgbV9kZWxheVNldChmYWxzZSkKICAgICAsIG1fcHJvcGVydHlTZXQoZmFsc2UpCiAg
ICAgLCBtX25leHQoMCkKIHsKIH0KIAogVHJhbnNpdGlvbjo6VHJhbnNpdGlvbihjb25zdCBUcmFu
c2l0aW9uJiBvKQotICAgIDogbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCi0gICAgLCBtX3JlcGVh
dENvdW50KG8ubV9yZXBlYXRDb3VudCkKKyAgICA6IFJlZkNvdW50ZWQ8VHJhbnNpdGlvbj4oKQor
ICAgICwgbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCiAgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8u
bV90aW1pbmdGdW5jdGlvbikKKyAgICAsIG1fZGVsYXkoby5tX2RlbGF5KQogICAgICwgbV9wcm9w
ZXJ0eShvLm1fcHJvcGVydHkpCiAgICAgLCBtX2R1cmF0aW9uU2V0KG8ubV9kdXJhdGlvblNldCkK
LSAgICAsIG1fcmVwZWF0Q291bnRTZXQoby5tX3JlcGVhdENvdW50U2V0KQogICAgICwgbV90aW1p
bmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVuY3Rpb25TZXQpCisgICAgLCBtX2RlbGF5U2V0KG8u
bV9kZWxheVNldCkKICAgICAsIG1fcHJvcGVydHlTZXQoby5tX3Byb3BlcnR5U2V0KQotICAgICwg
bV9uZXh0KG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDApCisgICAgLCBt
X25leHQoby5tX25leHQgPyBuZXcgVHJhbnNpdGlvbigqKG8ubV9uZXh0LmdldCgpKSkgOiAwKQog
ewogfQogCi1UcmFuc2l0aW9uOjp+VHJhbnNpdGlvbigpCi17Ci0gICAgZGVsZXRlIG1fbmV4dDsK
LX0KLQogVHJhbnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24m
IG8pCiB7CiAgICAgaWYgKG1fbmV4dCAhPSBvLm1fbmV4dCkgewotICAgICAgICBkZWxldGUgbV9u
ZXh0OwotICAgICAgICBtX25leHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCpvLm1fbmV4
dCkgOiAwOworICAgICAgICBtX25leHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCooby5t
X25leHQuZ2V0KCkpKSA6IDA7CiAgICAgfQogCisgICAgbV9kZWxheSA9IG8ubV9kZWxheTsKICAg
ICBtX2R1cmF0aW9uID0gby5tX2R1cmF0aW9uOwotICAgIG1fcmVwZWF0Q291bnQgPSBvLm1fcmVw
ZWF0Q291bnQ7CiAgICAgbV90aW1pbmdGdW5jdGlvbiA9IG8ubV90aW1pbmdGdW5jdGlvbjsKICAg
ICBtX3Byb3BlcnR5ID0gby5tX3Byb3BlcnR5OwogCisgICAgbV9kZWxheVNldCA9IG8ubV9kZWxh
eVNldDsKICAgICBtX2R1cmF0aW9uU2V0ID0gby5tX2R1cmF0aW9uU2V0OwotICAgIG1fcmVwZWF0
Q291bnRTZXQgPSBvLm1fcmVwZWF0Q291bnRTZXQ7CiAgICAgbV90aW1pbmdGdW5jdGlvblNldCA9
IG8ubV90aW1pbmdGdW5jdGlvblNldDsKICAgICBtX3Byb3BlcnR5U2V0ID0gby5tX3Byb3BlcnR5
U2V0OwogCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFRyYW5zaXRpb246Om9wZXJhdG9y
PT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QKK2Jvb2wgVHJhbnNpdGlvbjo6dHJhbnNpdGlv
bnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiBvKSBjb25zdAogewotICAgIHJldHVybiBtX2R1cmF0
aW9uID09IG8ubV9kdXJhdGlvbiAmJiBtX3JlcGVhdENvdW50ID09IG8ubV9yZXBlYXRDb3VudCAm
JiBtX3RpbWluZ0Z1bmN0aW9uID09IG8ubV90aW1pbmdGdW5jdGlvbiAmJgotICAgICAgICAgICBt
X3Byb3BlcnR5ID09IG8ubV9wcm9wZXJ0eSAmJiBtX2R1cmF0aW9uU2V0ID09IG8ubV9kdXJhdGlv
blNldCAmJiBtX3JlcGVhdENvdW50U2V0ID09IG8ubV9yZXBlYXRDb3VudFNldCAmJgotICAgICAg
ICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8ubV90aW1pbmdGdW5jdGlvblNldCAmJiBtX3By
b3BlcnR5U2V0ID09IG8ubV9wcm9wZXJ0eVNldCAmJgotICAgICAgICAgICAoKG1fbmV4dCAmJiBv
Lm1fbmV4dCkgPyAqbV9uZXh0ID09ICpvLm1fbmV4dCA6IG1fbmV4dCA9PSBvLm1fbmV4dCk7Cisg
ICAgaWYgKCFvKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYm9vbCByZXN1bHQg
PSBtX2R1cmF0aW9uID09IG8tPm1fZHVyYXRpb24gJiYKKyAgICAgICAgICAgICAgICAgIG1fdGlt
aW5nRnVuY3Rpb24gPT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgorICAgICAgICAgICAgICAgICAg
bV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5ID09
IG8tPm1fcHJvcGVydHkgJiYgCisgICAgICAgICAgICAgICAgICBtX2R1cmF0aW9uU2V0ID09IG8t
Pm1fZHVyYXRpb25TZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0
ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX2RlbGF5
U2V0ID09IG8tPm1fZGVsYXlTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlTZXQg
PT0gby0+bV9wcm9wZXJ0eVNldDsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZGVm
aW5lIEZJTExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcCkgXAorZm9yIChjdXJyID0gdGhpczsg
Y3VyciAmJiBjdXJyLT50ZXN0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfSBcCitpZiAoY3Vy
ciAmJiBjdXJyICE9IHRoaXMpIHsgXAorLyogV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5p
bmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLiAqLyBcCitmb3IgKFRyYW5zaXRp
b24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IFwKK2N1cnIt
PnByb3AgPSBwYXR0ZXJuLT5wcm9wOyBcCitwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOyBcCitp
ZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKSBcCitwYXR0ZXJuID0gdGhpczsgXAorfSBc
CiB9CiAKIHZvaWQgVHJhbnNpdGlvbjo6ZmlsbFVuc2V0UHJvcGVydGllcygpCiB7CiAgICAgVHJh
bnNpdGlvbiogY3VycjsKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzRHVy
YXRpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYgY3Vy
ciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5n
IHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFuc2l0
aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAg
ICAgICAgY3Vyci0+bV9kdXJhdGlvbiA9IHBhdHRlcm4tPm1fZHVyYXRpb247Ci0gICAgICAgICAg
ICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0g
Y3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlz
UmVwZWF0Q291bnRTZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIg
JiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVt
YWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChU
cmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewot
ICAgICAgICAgICAgY3Vyci0+bV9yZXBlYXRDb3VudCA9IHBhdHRlcm4tPm1fcmVwZWF0Q291bnQ7
Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYg
KHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0g
dGhpczsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJy
ICYmIGN1cnItPmlzVGltaW5nRnVuY3Rpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9
Ci0gICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8g
ZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4K
LSAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1
cnItPm5leHQoKSkgewotICAgICAgICAgICAgY3Vyci0+bV90aW1pbmdGdW5jdGlvbiA9IHBhdHRl
cm4tPm1fdGltaW5nRnVuY3Rpb247Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4
dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAg
ICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
Y3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNQcm9wZXJ0eVNldCgpOyBjdXJyID0gY3Vyci0+
bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8g
V2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4g
c3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5tX3Byb3BlcnR5ID0g
cGF0dGVybi0+bV9wcm9wZXJ0eTsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0
KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAg
ICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQorICAgIEZJTExfVU5T
RVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgbV9kdXJhdGlvbik7CisgICAgRklMTF9VTlNFVF9Q
Uk9QRVJUWShpc1RpbWluZ0Z1bmN0aW9uU2V0LCBtX3RpbWluZ0Z1bmN0aW9uKTsKKyAgICBGSUxM
X1VOU0VUX1BST1BFUlRZKGlzRGVsYXlTZXQsIG1fZGVsYXkpOworICAgIEZJTExfVU5TRVRfUFJP
UEVSVFkoaXNUcmFuc2l0aW9uUHJvcGVydHlTZXQsIG1fcHJvcGVydHkpOwogfQogCiBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKQEAgLTgyNCw3
ICs4MDcsNiBAQCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp+U3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YSgpCiAgICAgZGVsZXRlIG1fY29udGVudDsKICAgICBkZWxldGUgbV9jb3VudGVyRGly
ZWN0aXZlczsKICAgICBkZWxldGUgbV9ib3hTaGFkb3c7Ci0gICAgZGVsZXRlIG1fdHJhbnNpdGlv
bjsKICNpZiBFTkFCTEUoWEJMKQogICAgIGRlbGV0ZSBiaW5kaW5nVVJJOwogI2VuZGlmCkBAIC0x
ODY5LDMyICsxODUxLDU4IEBAIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIFJl
bmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpCiB2b2lkIFJlbmRlclN0eWxlOjphZGp1
c3RUcmFuc2l0aW9ucygpCiB7CiAgICAgaWYgKHRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgaWYg
KHRyYW5zaXRpb25zKCktPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAodHJhbnNpdGlvbnMoKS0+
aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNsZWFyVHJhbnNpdGlvbnMo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIFRyYW5zaXRpb24q
IG5leHQ7CiAgICAgICAgIGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vzc1RyYW5zaXRpb25zKCk7
IHA7IHAgPSBuZXh0KSB7Ci0gICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OworICAgICAgICAg
ICAgbmV4dCA9IHAtPm5leHQoKTsKICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXh0OwotICAgICAgICAgICAgICAgIHAt
Pm1fbmV4dCA9IDA7CisgICAgICAgICAgICAgICAgcC0+c2V0TmV4dCgwKTsgLy8gcmVtb3ZlcyB0
aGUgcmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAgICAgICAgICAgICAgIG5leHQgPSAwOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgCisK
KyAgICAgICAgaWYgKCF0cmFuc2l0aW9ucygpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAg
ICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBpbnRvIGxheWVycyB0aGF0IGRvbid0IGhhdmUgc29tZSBw
cm9wZXJ0aWVzIHNldC4KICAgICAgICAgYWNjZXNzVHJhbnNpdGlvbnMoKS0+ZmlsbFVuc2V0UHJv
cGVydGllcygpOworICAgICAgICAKKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBk
dXBsaWNhdGUgcHJvcGVydGllcy4gVGhpcyBpcyBhbiBPKG5eMikgYWxnb3JpdGhtCisgICAgICAg
IC8vIGJ1dCB0aGUgbGlzdHMgdGVuZCB0byBiZSB2ZXJ5IHNob3J0LCBzbyBpdCBpcyBwcm9iYWJs
eSBvaworICAgICAgICBUcmFuc2l0aW9uKiBwcmV2aSA9IDA7CisgICAgICAgIGZvciAoVHJhbnNp
dGlvbiogcGkgPSBhY2Nlc3NUcmFuc2l0aW9ucygpOyBwaTsgKSB7CisgICAgICAgICAgICBUcmFu
c2l0aW9uKiBuZXh0aSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAgICBmb3IgKFRyYW5zaXRpb24q
IHBqID0gbmV4dGk7IHBqOyApIHsKKyAgICAgICAgICAgICAgICBpZiAocGktPnRyYW5zaXRpb25Q
cm9wZXJ0eSgpID09IHBqLT50cmFuc2l0aW9uUHJvcGVydHkoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyB0b3NzIHBpCisgICAgICAgICAgICAgICAgICAgIHBpID0gcGktPm5leHQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZXZpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmktPnNldE5leHQocGkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0g
cGk7CisgICAgICAgICAgICAgICAgICAgIG5leHRpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcGogPSBuZXh0aTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBwaiA9IHBqLT5uZXh0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwcmV2aSA9IHBpOworICAgICAgICAgICAgcGkgPSBuZXh0aTsKKyAgICAg
ICAgfQogICAgIH0KIH0KIAogVHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRp
b25zKCkKIHsKLSAgICBUcmFuc2l0aW9uKiBsYXllciA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFj
Y2VzcygpLT5tX3RyYW5zaXRpb247CisgICAgVHJhbnNpdGlvbiogbGF5ZXIgPSByYXJlTm9uSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uLmdldCgpOwogICAgIGlmICghbGF5ZXIp
CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSBu
ZXcgVHJhbnNpdGlvbigpOwotICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFu
c2l0aW9uOworICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uLmdl
dCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBlYmFi
OGI2Li4yZDIxMTg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTEy
NTcsNTggKzEyNTcsNjggQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV95MjsKIH07CiAKLXN0cnVj
dCBUcmFuc2l0aW9uIHsKK2NsYXNzIFRyYW5zaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFu
c2l0aW9uPiB7CiBwdWJsaWM6CiAgICAgVHJhbnNpdGlvbigpOwotICAgIH5UcmFuc2l0aW9uKCk7
CiAKLSAgICBUcmFuc2l0aW9uKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAg
VHJhbnNpdGlvbiogbmV4dCgpIHsgcmV0dXJuIG1fbmV4dDsgfQorICAgIGNvbnN0IFRyYW5zaXRp
b24qIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBUcmFuc2l0aW9u
KiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAKKyAgICBib29sIGlzRGVsYXlTZXQo
KSBjb25zdCB7IHJldHVybiBtX2RlbGF5U2V0OyB9CiAgICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9kdXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNSZXBlYXRDb3VudFNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0Q291bnRTZXQ7IH0KICAgICBib29sIGlzVGltaW5n
RnVuY3Rpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9Ci0gICAg
Ym9vbCBpc1Byb3BlcnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQorICAg
IGJvb2wgaXNUcmFuc2l0aW9uUHJvcGVydHlTZXQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5
U2V0OyB9CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZHVyYXRp
b25TZXQgJiYgIW1fcmVwZWF0Q291bnRTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1f
cHJvcGVydHlTZXQ7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICghbV9kdXJhdGlvblNldCAmJiAhbV9kZWxheVNldCAmJiAhbV90aW1pbmdGdW5jdGlv
blNldCAmJiAhbV9wcm9wZXJ0eVNldCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eU9y
WmVyb0R1cmF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VtcHR5KCkgfHwg
KG1fZHVyYXRpb24gPT0gMCAmJiBtX2RlbGF5IDw9IDApOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNsZWFyRGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJh
dGlvbigpIHsgbV9kdXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclJlcGVhdENv
dW50KCkgeyBtX3JlcGVhdENvdW50U2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNsZWFyVGltaW5n
RnVuY3Rpb24oKSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xl
YXJQcm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9Ci0KLSAgICBpbnQgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgaW50IHJlcGVhdENvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBlYXRDb3VudDsgfQotICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9u
JiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KLSAg
ICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgdm9pZCBj
bGVhclRyYW5zaXRpb25Qcm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CiAgICAg
Ci0gICAgdm9pZCBzZXREdXJhdGlvbihpbnQgZCkgeyBtX2R1cmF0aW9uID0gZDsgbV9kdXJhdGlv
blNldCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFJlcGVhdENvdW50KGludCBjKSB7IG1fcmVwZWF0
Q291bnQgPSBjOyBtX3JlcGVhdENvdW50U2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIGYpIHsgbV90aW1pbmdGdW5jdGlvbiA9IGY7
IG1fdGltaW5nRnVuY3Rpb25TZXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQg
dCkgeyBtX3Byb3BlcnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7IH0KLQotICAgIHZvaWQg
c2V0TmV4dChUcmFuc2l0aW9uKiBuKSB7IGlmIChtX25leHQgIT0gbikgeyBkZWxldGUgbV9uZXh0
OyBtX25leHQgPSBuOyB9IH0KKyAgICBmbG9hdCBkZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVs
YXk7IH0KKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9
CisgICAgY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90aW1pbmdGdW5jdGlvbjsgfQorICAgIGludCB0cmFuc2l0aW9uUHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CiAKLSAgICBUcmFuc2l0aW9uJiBvcGVyYXRvcj0oY29u
c3QgVHJhbnNpdGlvbiYgbyk7ICAgIAorICAgIHZvaWQgc2V0RGVsYXkoZmxvYXQgYykgeyBtX2Rl
bGF5ID0gYzsgbV9kZWxheVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldER1cmF0aW9uKGRvdWJs
ZSBkKSB7IEFTU0VSVChkID49IDApOyBtX2R1cmF0aW9uID0gZDsgbV9kdXJhdGlvblNldCA9IHRy
dWU7IH0KKyAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBm
KSB7IG1fdGltaW5nRnVuY3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gdHJ1ZTsgfQor
ICAgIHZvaWQgc2V0VHJhbnNpdGlvblByb3BlcnR5KGludCB0KSB7IG1fcHJvcGVydHkgPSB0OyBt
X3Byb3BlcnR5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TmV4dChUcmFuc2l0aW9uKiBuKSB7
IGlmIChtX25leHQuZ2V0KCkgIT0gbikgeyBtX25leHQgPSBuOyB9IH0KKyAgICAKKyAgICBUcmFu
c2l0aW9uJiBvcGVyYXRvcj0oY29uc3QgVHJhbnNpdGlvbiYgbyk7CiAgICAgVHJhbnNpdGlvbihj
b25zdCBUcmFuc2l0aW9uJiBvKTsKIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2l0
aW9uJiBvKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNpdGlvbiYgbykg
Y29uc3QgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKLSAgICB9CisgICAgLy8gcmV0
dXJuIHRydWUgaWYgYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBtYXRjaCAoZXhjbHVkaW5nIG1f
bmV4dCkKKyAgICBib29sIHRyYW5zaXRpb25zTWF0Y2goY29uc3QgVHJhbnNpdGlvbiogdCkgY29u
c3Q7CiAKKyAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSB0cmFuc2l0aW9uIGluIHRoZSBjaGFpbiAo
ZGVmaW5lZCBieSBtX25leHQpIG1hdGNoIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFu
c2l0aW9uJiBvKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uc01hdGNoKCZvKSAmJiAoKG1fbmV4
dCAmJiBvLm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQpIDogKG1fbmV4dCA9PSBvLm1f
bmV4dCkpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KKyAgICAKICAgICB2b2lkIGZpbGxVbnNldFByb3Bl
cnRpZXMoKTsKIAotICAgIGludCBtX2R1cmF0aW9uOwotICAgIGludCBtX3JlcGVhdENvdW50Owor
cHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKICAgICBUaW1pbmdGdW5jdGlvbiBtX3Rp
bWluZ0Z1bmN0aW9uOworICAgIGZsb2F0IG1fZGVsYXk7CiAgICAgaW50IG1fcHJvcGVydHk7Ci0K
LSAgICBib29sIG1fZHVyYXRpb25TZXQ7Ci0gICAgYm9vbCBtX3JlcGVhdENvdW50U2V0OwotICAg
IGJvb2wgbV90aW1pbmdGdW5jdGlvblNldDsKLSAgICBib29sIG1fcHJvcGVydHlTZXQ7Ci0KLSAg
ICBUcmFuc2l0aW9uKiBtX25leHQ7CisgICAgCisgICAgYm9vbCBtX2R1cmF0aW9uU2V0ICAgICAg
IDogMTsKKyAgICBib29sIG1fdGltaW5nRnVuY3Rpb25TZXQgOiAxOworICAgIGJvb2wgbV9kZWxh
eVNldCAgICAgICAgICA6IDE7CisgICAgYm9vbCBtX3Byb3BlcnR5U2V0ICAgICAgIDogMTsKKyAg
ICAKKyAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV9uZXh0OwogfTsKIAogY2xhc3MgU3R5bGVSZWZs
ZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVSZWZsZWN0aW9uPiB7CkBAIC0xMzg5LDcg
KzEzOTksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gbV9i
b3hSZWZsZWN0OwogCi0gICAgVHJhbnNpdGlvbiogbV90cmFuc2l0aW9uOworICAgIFJlZlB0cjxU
cmFuc2l0aW9uPiBtX3RyYW5zaXRpb247CiAKICAgICBGaWxsTGF5ZXIgbV9tYXNrOwogICAgIE5p
bmVQaWVjZUltYWdlIG1fbWFza0JveEltYWdlOwpAQCAtMjAzMCw5ICsyMDQwLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYmFja2dyb3VuZC0+bV9vdXRsaW5lLl9vZmZzZXQ7CiAgICAgfQog
ICAgIFNoYWRvd0RhdGEqIHRleHRTaGFkb3coKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVk
RGF0YS0+dGV4dFNoYWRvdzsgfQotICAgIENvbG9yIHRleHRTdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KKyAgICBjb25zdCBD
b2xvciYgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEt
PnRleHRTdHJva2VDb2xvcjsgfQogICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlV2lkdGg7IH0KLSAgICBDb2xvciB0
ZXh0RmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxs
Q29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgdGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0RmlsbENvbG9yOyB9CiAgICAgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5vcGFjaXR5OyB9CiAgICAgRUFw
cGVhcmFuY2UgYXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVBcHBlYXJh
bmNlPihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hcHBlYXJhbmNlKTsgfQogICAgIEVCb3hBbGln
bm1lbnQgYm94QWxpZ24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQm94QWxpZ25tZW50
PihyYXJlTm9uSW5oZXJpdGVkRGF0YS0+ZmxleGlibGVCb3gtPmFsaWduKTsgfQpAQCAtMjA4OCw3
ICsyMDk4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJvcGVydHkgZ2V0
dGVyIG1ldGhvZHMKICAgICBUcmFuc2l0aW9uKiBhY2Nlc3NUcmFuc2l0aW9ucygpOwotICAgIGNv
bnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1fdHJhbnNpdGlvbjsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRp
b25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbi5n
ZXQoKTsgfQogICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgpIGNvbnN0IHsg
cmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAgIEVUZXh0U2Vj
dXJpdHkgdGV4dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRTZWN1
cml0eT4ocmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIzNTIsNyArMjM2
Miw3IEBAIHB1YmxpYzoKICAgICAvLyBFbmQgQ1NTMyBTZXR0ZXJzCiAgICAKICAgICAvLyBBcHBs
ZS1zcGVjaWZpYyBwcm9wZXJ0eSBzZXR0ZXJzCi0gICAgdm9pZCBjbGVhclRyYW5zaXRpb25zKCkg
eyBkZWxldGUgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbjsgcmFy
ZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IDA7IH0KKyAgICB2b2lk
IGNsZWFyVHJhbnNpdGlvbnMoKSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3Ry
YW5zaXRpb24gPSAwOyB9CiAgICAgdm9pZCBpbmhlcml0VHJhbnNpdGlvbnMoY29uc3QgVHJhbnNp
dGlvbiogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbklu
aGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpwYXJl
bnQpOyB9CiAgICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygpOwogICAgIHZvaWQgc2V0TGluZUNs
YW1wKGludCBjKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIGxpbmVDbGFtcCwgYyk7
IH0KQEAgLTI1MTEsOSArMjUyMSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTGVuZ3RoIGluaXRp
YWxUcmFuc2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQpOyB9CiAg
ICAgCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBpbnQgaW5pdGlh
bFRyYW5zaXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgaW50IGluaXRp
YWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGljIFRpbWlu
Z0Z1bmN0aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVybiBUaW1p
bmdGdW5jdGlvbigpOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRpYWxEZWxheSgpIHsgcmV0dXJu
IDA7IH0KKyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxEdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0K
KyAgICBzdGF0aWMgVGltaW5nRnVuY3Rpb24gaW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkgeyByZXR1
cm4gVGltaW5nRnVuY3Rpb24oKTsgfQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbFRyYW5zaXRpb25Q
cm9wZXJ0eSgpIHsgcmV0dXJuIGNBbmltYXRlQWxsOyB9CiAgICAgc3RhdGljIGludCBpbml0aWFs
TGluZUNsYW1wKCkgeyByZXR1cm4gLTE7IH0KICAgICBzdGF0aWMgYm9vbCBpbml0aWFsVGV4dFNp
emVBZGp1c3QoKSB7IHJldHVybiB0cnVlOyB9Cg==
</data>
<flag name="review"
          id="9755"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22152</attachid>
            <date>2008-07-07 19:06:00 -0700</date>
            <delta_ts>2008-07-07 19:06:00 -0700</delta_ts>
            <desc>Test case for simple transitions</desc>
            <filename>transition_left.html</filename>
            <type>text/html</type>
            <size>1209</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgoJPHRpdGxlPlRyYW5zaXRpb24gb2YgbGVmdCBw
cm9wZXJ0eTwvdGl0bGU+CiAgICA8c3R5bGU+CiAgICAgICAgIGRpdiB7CiAgICAgICAgICAgICBw
b3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICBsZWZ0OiAxMDBweDsKICAgICAgICAgICAg
IGhlaWdodDogMjAwcHg7CiAgICAgICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiAjOWJiOwogICAgICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXBy
b3BlcnR5OiBsZWZ0OwogICAgICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAx
czsKICAgICAgICAgfQogICAgIDwvc3R5bGU+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KICAgICAgCiAgICAgIHZhciBmbGFnID0gdHJ1ZTsKICAg
ICAgCiAgICAgIGZ1bmN0aW9uIGluaXQoKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRhcmdldCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oZXZ0KSB7CiAg
ICAgICAgICBpZiAoZmxhZykKICAgICAgICAgICAgZXZ0LnRhcmdldC5zdHlsZS5sZWZ0ID0gIjMw
MHB4IjsKICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgIGV2dC50YXJnZXQuc3R5bGUubGVmdCA9
ICIxMDBweCI7CiAgICAgICAgICBmbGFnID0gIWZsYWc7CiAgICAgICAgfSwgZmFsc2UpOwogICAg
ICB9CiAgICAgIAogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGluaXQsIGZh
bHNlKTsKICAgICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KICA8aDE+VHJhbnNpdGlvbiBvZiAn
bGVmdCcgcHJvcGVydHk8L2gxPgoKICA8cD5UaGUgZWxlbWVudCBiZWxvdyBzaG91bGQgbW92ZSAy
MDAgcGl4ZWxzIGxlZnQgb3IgcmlnaHQgd2hlbiBjbGlja2VkPC9wPgogIAogIDxkaXYgaWQ9InRh
cmdldCI+CiAgICBUaGlzIGVsZW1lbnQgc2hvdWxkIHRyYW5zaXRpb24uCiAgPC9kaXY+Cgo8L2Jv
ZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22153</attachid>
            <date>2008-07-07 19:06:28 -0700</date>
            <delta_ts>2008-07-07 19:06:28 -0700</delta_ts>
            <desc>test case for different timing functions</desc>
            <filename>software_transitions_timing_functions.html</filename>
            <type>text/html</type>
            <size>2659</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgogICJodHRw
Oi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIj4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8
bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD11dGYtOCI+CiAgICA8dGl0bGU+VGltaW5nIEZ1bmN0aW9ucyBmb3IgVHJhbnNpdGlvbnM8L3Rp
dGxlPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KICAgICAgCiAg
ICAgIGJvZHkgewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAg
ICB9CiAgICAgIAogICAgICAuY29udGFpbmVyIGRpdiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0
aXZlOwogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAg
YmFja2dyb3VuZDogIzk5YzsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGxl
ZnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiA1czsKICAgICAgICBtYXJn
aW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgIAogICAgICAuY29udGFpbmVyOmhvdmVyIC5k
ZWZhdWx0LAogICAgICAuY29udGFpbmVyOmhvdmVyIC5lYXNlLAogICAgICAuY29udGFpbmVyOmhv
dmVyIC5saW5lYXIsCiAgICAgIC5jb250YWluZXI6aG92ZXIgLmVhc2UtaW4sCiAgICAgIC5jb250
YWluZXI6aG92ZXIgLmVhc2Utb3V0LAogICAgICAuY29udGFpbmVyOmhvdmVyIC5lYXNlLWluLW91
dCwKICAgICAgLmNvbnRhaW5lcjpob3ZlciAuY3ViaWMsCiAgICAgIC5jb250YWluZXI6aG92ZXIg
LmVycm9yIHsKICAgICAgICBsZWZ0OiA0MDBweDsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lciAu
ZWFzZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsK
ICAgICAgfQoKICAgICAgLmNvbnRhaW5lciAubGluZWFyIHsKICAgICAgICAtd2Via2l0LXRyYW5z
aXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIg
LmVhc2UtaW4gewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVh
c2UtaW47CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIgLmVhc2Utb3V0IHsKICAgICAgICAtd2Vi
a2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDsKICAgICAgfQoKICAgICAg
LmNvbnRhaW5lciAuZWFzZS1pbi1vdXQgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1p
bmctZnVuY3Rpb246IGVhc2UtaW4tb3V0OwogICAgICB9CgogICAgICAuY29udGFpbmVyIC5jdWJp
YyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6
aWVyKC40MiwgLjAsIC41OCwgMS4wKQogICAgICB9CgogICAgICAuY29udGFpbmVyIC5lcnJvciB7
CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogYmFuYW5hczsKICAg
ICAgfQoKICAgICAgI2VuZG1hcmtlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAg
ICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGxlZnQ6IDQwMHB4OwogICAgICAgIHRvcDogMTAwcHg7
CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CiAg
ICAgIH0KCiAgICAgIAogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGlk
PSJlbmRtYXJrZXIiPgogICAgPC9kaXY+CgogICAgPGgxPlRpbWluZyBmdW5jdGlvbnMgZm9yIHRy
YW5zaXRpb25zPC9oMT4KICAgIDxwPk9uIGhvdmVyLCB0aGUgZWxlbWVudHMgYmVsb3cgc2hvdWxk
IHRyYW5zaXRpb24gdXNpbmcgdGhlCiAgICAgIGRlc2NyaWJlZCB0aW1pbmcgZnVuY3Rpb25zPC9w
PgogICAgICAKICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgIAogICAgICA8ZGl2IGNs
YXNzPSJkZWZhdWx0Ij4KICAgICAgICBEZWZhdWx0IChubyB0aW1pbmcgZnVuY3Rpb24gc3BlY2lm
aWVkLCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgRWFzZSkKICAgICAgPC9kaXY+CgogICAgICA8ZGl2
IGNsYXNzPSJlYXNlIj4KICAgICAgICBFYXNlICh0aGUgZGVmYXVsdCBlYXNlIGZ1bmN0aW9uKQog
ICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImxpbmVhciI+CiAgICAgICAgTGluZWFyCiAg
ICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZWFzZS1pbiI+CiAgICAgICAgRWFzZSBJbgog
ICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImVhc2Utb3V0Ij4KICAgICAgICBFYXNlIE91
dAogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImVhc2UtaW4tb3V0Ij4KICAgICAgICBF
YXNlIEluIE91dAogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImN1YmljIj4KICAgICAg
ICBDdWJpYyBiZXppZXIgc3BlY2lmaWVkIHRoZSBzYW1lIGFzIEVhc2UgSW4gT3V0CiAgICAgIDwv
ZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXJyb3IiPgogICAgICAgIEJvZ3VzIGRlZmluaXRpb24s
IHNob3VsZCBiZWNvbWUgZGVmYXVsdCBvZiBFYXNlCiAgICAgIDwvZGl2PgogICAgICAKICAgIDwv
ZGl2PgogICAgCiAgICAKICAgIAogIDwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22154</attachid>
            <date>2008-07-07 19:07:00 -0700</date>
            <delta_ts>2008-07-07 19:07:00 -0700</delta_ts>
            <desc>Test case for transition delay</desc>
            <filename>transition-delay.html</filename>
            <type>text/html</type>
            <size>1429</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgoJPHRpdGxlPlRyYW5zaXRpb24gRGVsYXk8L3Rp
dGxlPgogICAgPHN0eWxlPgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGhlaWdodDogMzQwcHg7CiAgICAg
ICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgCiAgICAgIC5ib3ggewog
ICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAg
aGVpZ2h0OiAxMDBweDsKICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogIzY2RjsKICAgICAgICB6LWluZGV4OiAwOwogICAgICB9CiAgICAgIAovKiAgICAgICNj
b250YWluZXI6aG92ZXIgPiAuYm94IHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNs
YXRlWCgzODBweCk7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0
LXRyYW5zZm9ybTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDJzOwogICAg
ICB9CiovCiAgICAgICNjb250YWluZXIuZm9vcHkgPiAuYm94IHsKICAgICAgICAtd2Via2l0LXRy
YW5zZm9ybTogdHJhbnNsYXRlWCgzODBweCk7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXBy
b3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVy
YXRpb246IDJzOwogICAgICB9CiAgICAgIAogICAgICAjYm94MSB7CiAgICAgICAgLXdlYmtpdC10
cmFuc2l0aW9uLWRlbGF5OiAyMDBtczsKICAgICAgfQoKICAgICAgI2JveDIgewogICAgICAgIC13
ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMnM7CiAgICAgIH0KCiAgICAgICNib3gzIHsKICAgICAg
ICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDRzOwogICAgICB9CiAgICAgPC9zdHlsZT4KICAg
ICAKPC9oZWFkPgo8Ym9keT4KPHA+Q2xpY2sgdG8gYW5pbWF0ZTwvcD4KPGRpdiBpZD0iY29udGFp
bmVyIiBvbmNsaWNrPSJ0aGlzLmNsYXNzTmFtZSA9ICdmb29weSciPgogIDxkaXYgY2xhc3M9ImJv
eCIgaWQ9ImJveDEiPgogICAgICBEZWxheTogMjAwbXMKICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJi
b3giIGlkPSJib3gyIj4KICAgICAgRGVsYXk6IDJzCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iYm94
IiBpZD0iYm94MyI+CiAgICAgIERlbGF5OiA0cwogIDwvZGl2Pgo8L2Rpdj4KPC9ib2R5Pgo8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22315</attachid>
            <date>2008-07-16 13:58:09 -0700</date>
            <delta_ts>2008-07-22 18:37:59 -0700</delta_ts>
            <desc>updated animation controller patch</desc>
            <filename>patch4-new-animation-controller-updated.patch</filename>
            <type>text/plain</type>
            <size>132646</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDEzNjUy
OTUuLmIxNTdhZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTE4Nyw2ICsxODgsMTAgQEAgc3RhdGljIGNvbnN0IGludCBjb21wdXRlZFBy
b3BlcnRpZXNbXSA9IHsKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5LAorICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRp
bWluZ0Z1bmN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwK
QEAgLTEwNTUsNiArMTA2MCw2MyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9ucygp
OworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0
LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHQtPmRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EdXJhdGlvbjogeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRy
YW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7
CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh0LT5kdXJhdGlv
bigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246
IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0
ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAg
ICAgICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSB0LT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHRm
LngxKCksIHRmLnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCk7
CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNy
ZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogeworICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNp
dGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0
OyB0ID0gdC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+cHJv
cGVydHkoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVOb25lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9
PSBjQW5pbWF0ZUFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiYWxsIjsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGdl
dFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wKSk7CisgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5hbWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCJhbGwiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgpAQCAt
MTExMiwxMSArMTE3NCw2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFk
ZGluZ1N0YXJ0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGFib3Zl
IGFyZSB1bmltcGxlbWVudGVkLgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCmluZGV4IDIwMWY4ODEuLmNkMTliOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTI4MCw4
ICsxMjgwLDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25SZXBlYXRDb3VudDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blRpbWluZ0Z1bmN0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJv
cGVydHk6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CkBAIC0xNjk1LDggKzE2OTUs
OSBAQCB2b2lkIENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4m
IGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5z
aXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQgfTsKKyAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbiB9OwogICAgIGNvbnN0IGludCBudW1Qcm9wZXJ0aWVzID0gc2l6ZW9mKHBy
b3BlcnRpZXMpIC8gc2l6ZW9mKHByb3BlcnRpZXNbMF0pOwogICAgIAogICAgIFNob3J0aGFuZFNj
b3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbik7CkBAIC0yMTkyLDIw
ICsyMTkzLDIwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElk
LCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKQor
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZURlbGF5KCkKIHsKICAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVOb3cpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOwogICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZU
aW1lLCBtX3N0cmljdCkpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0
KTsKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRHVyYXRpb24oKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluZmluaXRl
KQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFs
dWUtPmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlcnxGTm9uTmVnLCBtX3N0
cmljdCkpCisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWV8Rk5vbk5lZywgbV9zdHJpY3Qp
KQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVl
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC0yMjI4LDcgKzIyMjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUaW1pbmdG
dW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdQogICAg
IHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VUaW1pbmdGdW5jdGlvbigpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRWFz
ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaW5lYXIgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
RWFzZUluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQgfHwgdmFsdWUtPmlkID09IENT
U1ZhbHVlRWFzZUluT3V0KQpAQCAtMjI5MiwxOCArMjI5MywxOCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVz
dWx0KQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1
cmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25E
dXJhdGlvbigpOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uRGVsYXk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRGVsYXkoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblJlcGVhdENv
dW50KCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25E
dXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlvbigp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUaW1p
bmdGdW5jdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zODkzLDcgKzM4OTQsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSgpCiAKICAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEg
bGlzdCBvZiBmdW5jdGlvbmFsIHByaW1pdGl2ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVy
YXRpb25zLgogICAgIC8vIFdlIGNvbGxlY3QgYSBsaXN0IG9mIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVjaWZpZXMgYSBzaW5nbGUgb3BlcmF0aW9uLgotICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biB8fCAhdmFsdWUtPmZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4
IGY2NGQzNjMuLjZjZmVjMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisr
KyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC04NCwxMSArODQsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBs
dmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKTsKIAogICAgICAgICB2b2lkIGFkZFRyYW5z
aXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBy
dmFsKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uRHVyYXRp
b24oKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUmVwZWF0
Q291bnQoKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb24oKTsKLSAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NT
UGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpOworCisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRGVsYXkoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VEdXJhdGlvbigpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRp
bWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNp
dGlvblByb3BlcnR5KCk7CisKKyAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUo
Q1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpOwogICAgICAgICBib29s
IHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
ICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwog
ICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4gYi9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmluZGV4IDQ4OTJhZTEuLjUwMzk0ZTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KKysrIGIvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHlOYW1lcy5pbgpAQCAtMTQyLDExICsxNDIsNiBAQCB3b3JkLXNwYWNpbmcK
IHdvcmQtd3JhcAogei1pbmRleAogem9vbQotLXdlYmtpdC10cmFuc2l0aW9uCi0td2Via2l0LXRy
YW5zaXRpb24tZHVyYXRpb24KLS13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQotLXdlYmtpdC10
cmFuc2l0aW9uLXJlcGVhdC1jb3VudAotLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlv
bgogLXdlYmtpdC1hcHBlYXJhbmNlCiAtd2Via2l0LWJhY2tncm91bmQtY2xpcAogLXdlYmtpdC1i
YWNrZ3JvdW5kLWNvbXBvc2l0ZQpAQCAtMjI1LDYgKzIyMCwxMSBAQCB6b29tCiAtd2Via2l0LXRy
YW5zZm9ybS1vcmlnaW4KIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14CiAtd2Via2l0LXRyYW5z
Zm9ybS1vcmlnaW4teQorLXdlYmtpdC10cmFuc2l0aW9uCistd2Via2l0LXRyYW5zaXRpb24tZGVs
YXkKKy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLXByb3Bl
cnR5Cistd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LXVzZXItZHJh
ZwogLXdlYmtpdC11c2VyLW1vZGlmeQogLXdlYmtpdC11c2VyLXNlbGVjdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAppbmRleCBjNzZkZTA1Li44MmUzNWM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcApAQCAtMTg5LDcgKzE4OSw3IEBAIGlmIChpc0luaGVyaXQpIHsgXAogICAgIGNvbnN0IFRy
YW5zaXRpb24qIGN1cnJQYXJlbnQgPSBtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpOyBcCiAg
ICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3VyclBhcmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwK
ICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtl
IGEgbmV3IGxheWVyLiovIFwKKyAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyB0cmFu
c2l0aW9uLiovIFwKICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwK
ICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0g
XApAQCAtMjAwLDQyICsyMDAsNDMgQEAgaWYgKGlzSW5oZXJpdCkgeyBcCiAgICAgfSBcCiAgICAg
XAogICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsgXAotICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWlu
aW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisgICAgICAgIC8q
IFJlc2V0IGFueSByZW1haW5pbmcgdHJhbnNpdGlvbnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5
IHNldC4gKi8gXAogICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKICAgICB9IFwKLX0gZWxzZSBpZiAoaXNJ
bml0aWFsKSB7IFwKKyAgICByZXR1cm47IFwKK30gXAoraWYgKGlzSW5pdGlhbCkgeyBcCiAgICAg
VHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAot
ICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvbiMj
UHJvcCgpKTsgXAorICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFs
IyNQcm9wKCkpOyBcCiAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3Vy
ckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAogICAgICAgICBjdXJyQ2hp
bGQtPmNsZWFyIyNQcm9wKCk7IFwKKyAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVf
VFJBTlNJVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgeyBcCiBIQU5ETEVfVFJBTlNJVElP
Tl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQgfHwgaXNJ
bml0aWFsKSBcCi0gICAgcmV0dXJuOyBcCiBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxl
LT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCiBUcmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBcCiBp
ZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAotICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQg
cHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQuICovIFwK
KyAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgdHJhbnNpdGlvbiwgY3Jl
YXRpbmcgbmV3IHRyYW5zaXRpb25zIGFzIG5lZWRlZC4gKi8gXAogICAgIENTU1ZhbHVlTGlzdCog
dmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOyBcCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAog
ICAgICAgICBpZiAoIWN1cnJDaGlsZCkgeyBcCi0gICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2Ug
YSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwKLSAgICAgICAgICAgIGN1cnJDaGls
ZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKLSAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChj
dXJyQ2hpbGQpOyBcCisgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyB0cmFuc2l0aW9uIHRv
IGhvbGQgdGhpcyB2YWx1ZSAqLyBcCisgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9u
KCk7IFwKKyAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIG1hcFRyYW5zaXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOyBcCisgICAgICAgIG1hcCMjUHJvcChjdXJyQ2hpbGQs
IHZhbHVlTGlzdC0+aXRlbShpKSk7IFwKICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOyBc
CiAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiAgICAgfSBcCiB9IGVs
c2UgeyBcCi0gICAgbWFwVHJhbnNpdGlvbiMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAorICAg
IG1hcCMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAogICAgIGN1cnJDaGlsZCA9IGN1cnJDaGls
ZC0+bmV4dCgpOyBcCiB9IFwKIHdoaWxlIChjdXJyQ2hpbGQpIHsgXAotICAgIC8qIFJlc2V0IGFs
bCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAg
ICAvKiBSZXNldCBhbGwgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9w
ZXJ0eSBzZXQuICovIFwKICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogfSB9CkBAIC00NzM1LDE4ICs0NzM2LDE4IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2
YWx1ZSkKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQogICAgICAgICAgICAgbV9zdHlsZS0+
aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAg
ICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUoZGVsYXksIERlbGF5LCB2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246
CiAgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKGR1cmF0aW9uLCBEdXJhdGlvbiwgdmFs
dWUpCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blJlcGVhdENvdW50OgotICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShyZXBlYXRDb3Vu
dCwgUmVwZWF0Q291bnQsIHZhbHVlKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHk6CisgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQ
cm9wZXJ0eSwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9W
QUxVRSh0aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAg
ICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcGVydHksIFByb3BlcnR5LCB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgpAQCAtNDk4NywxMCArNDk4OCwx
MCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGxheWVyLT5zZXRZUG9zaXRpb24obCk7CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1cmF0aW9uKFRyYW5zaXRpb24q
IHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
RHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNp
dGlvbkR1cmF0aW9uKCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihSZW5kZXJT
dHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00
OTk5LDM1ICs1MDAwLDM2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1
cmF0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2CiAKICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9u
KGludCgxMDAwKnByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CiAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX01TKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihpbnQocHJp
bWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRE
dXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOwogfQogCi12
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25SZXBlYXRDb3VudChUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cERlbGF5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRSZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5z
aXRpb25SZXBlYXRDb3VudCgpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGVsYXkoUmVuZGVy
U3R5bGU6OmluaXRpYWxEZWxheSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlSW5maW5pdGUpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KC0xKTsK
LSAgICBlbHNlCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KGludChwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm93KQorICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheSgwKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0
RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZh
bHVlKCkvMTAwMC4wZik7CisgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSog
dmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRp
b24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1Zh
bHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9u
LT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbigpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQorICAgIAogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7CkBAIC01MDQ5LDE3ICs1MDUxLDE3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhCiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIGlmICh2YWx1ZS0+
aXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CiAgICAgICAgIENTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUqIHRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVGltaW5nRnVuY3Rp
b25WYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24o
VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgdGltaW5nRnVuY3Rpb24t
PngxKCksIHRpbWluZ0Z1bmN0aW9uLT55MSgpLCB0aW1pbmdGdW5jdGlvbi0+eDIoKSwgdGltaW5n
RnVuY3Rpb24tPnkyKCkpKTsKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
VHJhbnNpdGlvblByb3BlcnR5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwUHJvcGVydHkoVHJhbnNpdGlvbiogdHJhbnNp
dGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkg
PT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFByb3Bl
cnR5KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MDY3LDcgKzUwNjksNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9u
LCBDU1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
LSAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSk7
CisgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFn
ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAwMGI5ZTY4Li5jMzhiNjI5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCkBAIC0yMDQsMTAgKzIwNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQg
bWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1h
cEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1h
cFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9p
ZCBtYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
ICAgIHZvaWQgbWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1
ZSopOwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NT
VmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBEZWxheShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICAgICAgdm9pZCBtYXBEdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAg
ICAgdm9pZCBtYXBUaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAg
ICAgdm9pZCBtYXBQcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2
b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbiBiL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlS2V5d29yZHMuaW4KaW5kZXggM2NiZmI4NS4uYjM5ZTE1MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgorKysgYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtl
eXdvcmRzLmluCkBAIC01NjMsNiArNTYzLDExIEBAIHZpc3VhbAogbGluZXMKIAogIworIyBDU1Nf
UFJPUF9fV0VCS0lUX1RSQU5TSVRJT05fREVMQVkKKyMKK25vdworCisjCiAjIENTU19QUk9QX19X
RUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT04KICMKIGVhc2UKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmNwcAppbmRleCA1NzY0OTZhLi5hNmU3MWNkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQotICAgIDogQ1NTVmFsdWVMaXN0KGZh
bHNlKQorICAgIDogQ1NTVmFsdWVMaXN0KHRydWUpCiAgICAgLCBtX3R5cGUob3ApCiB7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKaW5kZXggNTVmNTY0My4uMDVhN2RiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKKyNpbmNsdWRl
ICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgpAQCAtMjk3LDYg
KzI5OCw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXNYSFRNTCkK
ICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgICwgbV9pbkxvd0JhbmR3aWR0aERp
c3BsYXkoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fbG9hZENvbXBsZXRlKGZhbHNlKQogewogICAg
IG1fZG9jdW1lbnQucmVzZXRTa2lwcGluZ1JlZih0aGlzKTsKIApAQCAtMTE2Niw2ICsxMTY4LDEw
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVJlbmRlcmluZygpCiB7CiAgICAgaWYgKGhhc0NoYW5n
ZWRDaGlsZCgpKQogICAgICAgICByZWNhbGNTdHlsZShOb0NoYW5nZSk7CisgICAgCisgICAgLy8g
dGVsbCB0aGUgYW5pbWF0aW9uIGNvbnRyb2xsZXIgdGhhdCB0aGUgc3R5bGUgaXMgYXZhaWxhYmxl
IGFuZCBpdCBjYW4gc3RhcnQgYW5pbWF0aW9ucworICAgIGlmIChtX2ZyYW1lKQorICAgICAgICBt
X2ZyYW1lLT5hbmltYXRpb24oKS0+c3R5bGVBdmFpbGFibGUoKTsKIH0KIAogdm9pZCBEb2N1bWVu
dDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCkKQEAgLTE1NDcsNiArMTU1Myw4IEBAIHZvaWQg
RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgIGlmIChmKQogICAgICAgICBmLT5sb2FkZXIo
KS0+c3RhcnRJY29uTG9hZGVyKCk7CiAKKyAgICBtX2xvYWRDb21wbGV0ZSA9IHRydWU7CisKICAg
ICBkaXNwYXRjaEltYWdlTG9hZEV2ZW50c05vdygpOwogICAgIHRoaXMtPmRpc3BhdGNoV2luZG93
RXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChmKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDM0
YzExYS4uOWIyOTY2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03NTEsNiArNzUxLDkgQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwogICAgIHZvaWQgY2FuY2VsRm9jdXNBcHBl
YXJhbmNlVXBkYXRlKCk7CiAgICAgCisgICAgLy8gZm9yIGFuaW1hdGlvbnMgdG8ga25vdyB3aGV0
aGVyIHRoZXkgY2FuIHJ1biB5ZXQgb3Igbm90CisgICAgYm9vbCBsb2FkQ29tcGxldGUoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZTsgfQorICAgIAogICAgIC8vIEZGIG1ldGhvZCBmb3Ig
YWNjZXNzaW5nIHRoZSBzZWxlY3Rpb24gYWRkZWQgZm9yIGNvbXBhdGFiaWxpdHkuCiAgICAgRE9N
U2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICAKQEAgLTEwNDYsNiArMTA0OSw4
IEBAIHByaXZhdGU6CiAjaWYgVVNFKExPV19CQU5EV0lEVEhfRElTUExBWSkKICAgICBib29sIG1f
aW5Mb3dCYW5kd2lkdGhEaXNwbGF5OwogI2VuZGlmCisKKyAgICBib29sIG1fbG9hZENvbXBsZXRl
OyAgICAvLyBmb3IgYW5pbWF0aW9ucyB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZXkgY2FuIHJ1
biB5ZXQKIH07CiAKIGlubGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21p
Y1N0cmluZ0ltcGwqIGlkKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBjODNhN2QyLi4xMGYyYThkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcApAQCAtNzg0LDkgKzc4NCw5IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQogICAgICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2gg
IT0gTm9DaGFuZ2UpCisgICAgICAgIGlmIChjaCAhPSBOb0NoYW5nZSkgewogICAgICAgICAgICAg
c2V0UmVuZGVyU3R5bGUobmV3U3R5bGUpOwotICAgICAgICBlbHNlIGlmIChjaGFuZ2VkKCkgJiYg
KGRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2Vu
ZGFudFJ1bGVzKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZCgpICYmIChzdHlsZUNo
YW5nZVR5cGUoKSAhPSBBbmltYXRpb25TdHlsZUNoYW5nZSkgJiYgKGRvY3VtZW50KCktPnVzZXNT
aWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkpKSB7CiAg
ICAgICAgICAgICAvLyBBbHRob3VnaCBubyBjaGFuZ2Ugb2NjdXJyZWQsIHdlIHVzZSB0aGUgbmV3
IHN0eWxlIHNvIHRoYXQgdGhlIGNvdXNpbiBzdHlsZSBzaGFyaW5nIGNvZGUgd29uJ3QgZ2V0CiAg
ICAgICAgICAgICAvLyBmb29sZWQgaW50byBiZWxpZXZpbmcgdGhpcyBzdHlsZSBpcyB0aGUgc2Ft
ZS4gIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIGRvY3VtZW50IGFjdHVhbGx5IHVzZXMK
ICAgICAgICAgICAgIC8vIHNpYmxpbmcvZGVzY2VuZGFudCBydWxlcywgc2luY2Ugb3RoZXJ3aXNl
IGl0IGlzbid0IHBvc3NpYmxlIGZvciBhbmNlc3RvciBzdHlsZXMgdG8gYWZmZWN0IHNoYXJpbmcg
b2YKQEAgLTc5NSwxMiArNzk1LDEzIEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlSW50ZXJu
YWwobmV3U3R5bGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldFJlbmRl
clN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0eWxlQ2hh
bmdlVHlwZSgpID09IEFuaW1hdGlvblN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgIHNldFJlbmRl
clN0eWxlKG5ld1N0eWxlKTsKIAogICAgICAgICBuZXdTdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+
cmVuZGVyQXJlbmEoKSk7CiAKICAgICAgICAgaWYgKGNoYW5nZSAhPSBGb3JjZSkgewotICAgICAg
ICAgICAgaWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9zaXRp
b25hbFJ1bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA9PSBGdWxsU3R5bGVDaGFuZ2UpCisgICAg
ICAgICAgICBpZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBoYXNQb3Np
dGlvbmFsUnVsZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKICAg
ICAgICAgICAgICAgICBjaGFuZ2UgPSBGb3JjZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBjaGFuZ2UgPSBjaDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMu
aCBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCA4NzJjNmNmLi5kMjg5ODI5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvV2ViQ29yZS9kb20vRXZlbnRO
YW1lcy5oCkBAIC0xMTksNiArMTE5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgbmFtZXNwYWNl
IEV2ZW50TmFtZXMgewogICAgIG1hY3JvKHByb2dyZXNzKSBcCiAgICAgbWFjcm8oc3RhbGxlZCkg
XAogICAgIFwKKyAgICBtYWNybyh3ZWJraXRBbmltYXRpb25FbmQpIFwKKyAgICBtYWNybyh3ZWJr
aXRBbmltYXRpb25TdGFydCkgXAorICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbikg
XAorICAgIFwKKyAgICBtYWNybyh3ZWJraXRUcmFuc2l0aW9uRW5kKSBcCisgICAgXAogLy8gZW5k
IG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSAogCiAjaWZuZGVmIERPTV9FVkVOVF9OQU1FU19I
SURFX0dMT0JBTFMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9k
b20vTm9kZS5jcHAKaW5kZXggNTJhMWE1OC4uMWYwNjhjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTM3Miw3ICszNzIsNyBA
QCB2b2lkIE5vZGU6OnNldENoYW5nZWQoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCiAgICAg
aWYgKChjaGFuZ2VUeXBlICE9IE5vU3R5bGVDaGFuZ2UpICYmICFhdHRhY2hlZCgpKSAvLyBjaGFu
Z2VkIGNvbXBhcmVkIHRvIHdoYXQ/CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghKGNoYW5n
ZVR5cGUgPT0gSW5saW5lU3R5bGVDaGFuZ2UgJiYgbV9zdHlsZUNoYW5nZSA9PSBGdWxsU3R5bGVD
aGFuZ2UpKQorICAgIGlmICghKGNoYW5nZVR5cGUgPT0gSW5saW5lU3R5bGVDaGFuZ2UgJiYgKG1f
c3R5bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlIHx8IG1fc3R5bGVDaGFuZ2UgPT0gQW5pbWF0
aW9uU3R5bGVDaGFuZ2UpKSkKICAgICAgICAgbV9zdHlsZUNoYW5nZSA9IGNoYW5nZVR5cGU7CiAK
ICAgICBpZiAobV9zdHlsZUNoYW5nZSAhPSBOb1N0eWxlQ2hhbmdlKSB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggODMwYWJmNS4uZWRm
YzZjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05v
ZGUuaApAQCAtNjEsNyArNjEsNyBAQCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGE7CiAKIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNo
YW5nZSwgSW5saW5lU3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSB9OworZW51bSBTdHlsZUNo
YW5nZVR5cGUgeyBOb1N0eWxlQ2hhbmdlLCBJbmxpbmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hh
bmdlLCBBbmltYXRpb25TdHlsZUNoYW5nZSB9OwogCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBET0NV
TUVOVF9QT1NJVElPTl9FUVVJVkFMRU5UID0gMHgwMDsKIGNvbnN0IHVuc2lnbmVkIHNob3J0IERP
Q1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9IDB4MDE7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgYi9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAK
aW5kZXggZTViZDNjMS4uOThmMzkyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZFBhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcApAQCAtMTI3LDcg
KzEyNyw3IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlKiBwYWdlKQogICAgICAgICBt
X2RvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnVucGF1c2VBbmltYXRpb25zKCk7CiAj
ZW5kaWYKIAotICAgIG1haW5GcmFtZS0+YW5pbWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnMoKTsK
KyAgICBtYWluRnJhbWUtPmFuaW1hdGlvbigpLT5yZXN1bWVBbmltYXRpb25zKG1fZG9jdW1lbnQu
Z2V0KCkpOwogCiAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91c2VQcmVzc05v
ZGUobW91c2VQcmVzc05vZGUoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IDg0ZTMxMDAuLjg5NDBhMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9B
bmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCkBAIC00Myw2ICs0NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIAorc3RhdGlj
IHZvaWQgc2V0Q2hhbmdlZChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCAobm9k
ZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAg
IG5vZGUtPnNldENoYW5nZWQoQW5pbWF0aW9uU3R5bGVDaGFuZ2UpOworfQorCiAvLyBUaGUgZXBz
aWxvbiB2YWx1ZSB3ZSBwYXNzIHRvIFVuaXRCZXppZXI6OnNvbHZlIGdpdmVuIHRoYXQgdGhlIGFu
aW1hdGlvbiBpcyBnb2luZyB0byBydW4gb3ZlciB8ZHVyfCBzZWNvbmRzLiBUaGUgbG9uZ2VyIHRo
ZQogLy8gYW5pbWF0aW9uLCB0aGUgbW9yZSBwcmVjaXNpb24gd2UgbmVlZCBpbiB0aGUgdGltaW5n
IGZ1bmN0aW9uIHJlc3VsdCB0byBhdm9pZCB1Z2x5IGRpc2NvbnRpbnVpdGllcy4KIHN0YXRpYyBp
bmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pIHsgcmV0dXJuIDEuIC8g
KDIwMC4gKiBkdXJhdGlvbik7IH0KQEAgLTU1LDEzNyArNjMsNzQzIEBAIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5LCBk
b3VibGUgcDJ4CiAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRp
b24pKTsKIH0KIAotY2xhc3MgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb247CisjcHJhZ21hIG1h
cmsgLQogCi1jbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1w
dWJsaWM6Ci0gICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiopOwotICAgIH5J
bXBsaWNpdEFuaW1hdGlvbigpOworY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOworY2xhc3MgQW5p
bWF0aW9uQmFzZTsKIAotICAgIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlv
biosIFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKK2NsYXNzIEFuaW1h
dGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uVGltZXJCYXNlKEFuaW1hdGlv
bkJhc2UqIGFuaW0pCisgICAgOiBtX3RpbWVyKHRoaXMsICZBbmltYXRpb25UaW1lckJhc2U6OnRp
bWVyRmlyZWQpCisgICAgLCBtX2FuaW0oYW5pbSkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3Rh
cnRPbmVTaG90KDApOworICAgIH0KKyAgICB2aXJ0dWFsIH5BbmltYXRpb25UaW1lckJhc2UoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0PTAp
CisgICAgeworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjYW5jZWxUaW1lcigpCisgICAgeworICAgICAgICBtX3RpbWVyLnN0b3Ao
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uVGltZXJCYXNlPiopID0gMDsKKyAgICAKK3ByaXZhdGU6CisgICAgVGltZXI8QW5pbWF0aW9u
VGltZXJCYXNlPiBtX3RpbWVyOworICAgIAorcHJvdGVjdGVkOgorICAgIEFuaW1hdGlvbkJhc2Uq
IG1fYW5pbTsKK307CiAKLSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KiBmcm9tLCBSZW5kZXJTdHlsZSogdG8pOworY2xhc3MgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVy
IDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uRXZl
bnREaXNwYXRjaGVyKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAorICAgIDogQW5pbWF0aW9uVGltZXJC
YXNlKGFuaW0pCisgICAgLCBtX3Byb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCkKKyAgICAsIG1f
cmVzZXQoZmFsc2UpCisgICAgLCBtX2VsYXBzZWRUaW1lKC0xKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB+QW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3RhcnRUaW1lcihIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1l
KQorICAgIHsKKyAgICAgICAgbV9lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgbV9uYW1lID0g
bmFtZTsKKyAgICAgICAgbV9wcm9wZXJ0eSA9IHByb3BlcnR5OworICAgICAgICBtX3Jlc2V0ID0g
cmVzZXQ7CisgICAgICAgIG1fZXZlbnRUeXBlID0gZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBz
ZWRUaW1lID0gZWxhcHNlZFRpbWU7CisgICAgICAgIEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRU
aW1lcigpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxB
bmltYXRpb25UaW1lckJhc2U+Kik7CiAgICAgCi0gICAgZG91YmxlIHByb2dyZXNzKCkgY29uc3Q7
Citwcml2YXRlOgorICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9lbGVtZW50OworICAgIEF0b21p
Y1N0cmluZyBtX25hbWU7CisgICAgaW50IG1fcHJvcGVydHk7CisgICAgYm9vbCBtX3Jlc2V0Owor
ICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKKyAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsK
K307CiAKLSAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9Citj
bGFzcyBBbmltYXRpb25UaW1lckNhbGxiYWNrIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7
CitwdWJsaWM6CisgICAgQW5pbWF0aW9uVGltZXJDYWxsYmFjayhBbmltYXRpb25CYXNlKiBhbmlt
KSAKKyAgICA6IEFuaW1hdGlvblRpbWVyQmFzZShhbmltKQorICAgICwgbV9lbGFwc2VkVGltZSgw
KQorICAgIHsgfQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQ2FsbGJhY2soKSB7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+
Kik7CiAgICAgCi0gICAgYm9vbCBmaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmluaXNoZWQ7
IH0KLSAgICB2b2lkIHNldEZpbmlzaGVkKGJvb2wgZikgeyBtX2ZpbmlzaGVkID0gZjsgfQorICAg
IHZvaWQgc3RhcnRUaW1lcihkb3VibGUgdGltZW91dCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICB7CisgICAgICAgIG1fZXZlbnRUeXBlID0g
ZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBzZWRUaW1lID0gZWxhcHNlZFRpbWU7CisgICAgICAg
IEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRUaW1lcih0aW1lb3V0KTsKKyAgICB9CiAgICAgCi0g
ICAgYm9vbCBzdGFsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhbGU7IH0KLSAgICB2b2lkIHNldFN0
YWxlKCkgeyBtX3N0YWxlID0gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBBdG9taWNTdHJpbmcgbV9l
dmVudFR5cGU7CisgICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Cit9OworCisjcHJhZ21hIG1hcmsg
LQorICAgIAorY2xhc3MgSW1wbGljaXRBbmltYXRpb247CitjbGFzcyBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTsKIAorLy8gQSBDb21wb3NpdGVBbmltYXRpb24gcmVwcmVzZW50cyBhIGNvbGxl
Y3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0CisvLyBhcmUgcnVubmluZywgc3VjaCBhcyBhIG51bWJl
ciBvZiBwcm9wZXJ0aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KKworY2xhc3MgQ29tcG9zaXRl
QW5pbWF0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVB
bmltYXRpb24oYm9vbCBzdXNwZW5kZWQsIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBhbmlt
YXRpb25Db250cm9sbGVyKQorICAgIDogbV9zdXNwZW5kZWQoc3VzcGVuZGVkKQorICAgICwgbV9h
bmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgLCBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycygwKQorICAgIHsgfQorICAgIAorICAgIH5Db21wb3NpdGVBbmltYXRp
b24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdHJhbnNpdGlvbnMpOworICAg
IH0KKyAgICAKKyAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIAorICAg
IHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcpOworICAgIGJvb2wgYW5pbWF0aW5n
KCk7CisgICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9wKTsgfQorICAgIAorICAgIHZv
aWQgcmVzZXRUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHJlc2V0QW5pbWF0
aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICAKKyAgICB2b2lkIGNsZWFudXBGaW5pc2hlZEFuaW1h
dGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygp
OworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworICAgIGJvb2wgc3VzcGVuZGVkKCkgY29u
c3QgICAgICB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQorICAgIAorICAgIHZvaWQgb3ZlcnJpZGVJ
bXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKKyAgICB2b2lkIHJlc3VtZU92ZXJyaWRk
ZW5JbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKKyAgICAKKyAgICB2b2lkIHN0eWxl
QXZhaWxhYmxlKCk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9w
ZXJ0eSkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUo
Ym9vbCB3YWl0aW5nKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSB0d28gc3R5bGVz
IHRoYXQgd2UgYXJlIGJsZW5kaW5nLgotICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKLSAg
ICBSZW5kZXJTdHlsZSogbV90b1N0eWxlOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEltcGxp
Y2l0QW5pbWF0aW9uKj4gQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDsKKyAgICAKKyAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwICAgbV90cmFuc2l0aW9uczsKKyAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zdXNwZW5kZWQ7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAg
ICAgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnM7Cit9OwogCi0gICAgaW50IG1fcHJvcGVydHk7
Ci0gICAgVGltaW5nRnVuY3Rpb24gbV9mdW5jdGlvbjsKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsK
KyNwcmFnbWEgbWFyayAtCiAKLSAgICBpbnQgbV9yZXBlYXRDb3VudDsKK2NsYXNzIEFuaW1hdGlv
bkJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEFuaW1hdGlvbkJhc2Uo
Y29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29t
cG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSk7ICAgIAorICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJh
c2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRf
U1RZTEVfQVZBSUxBQkxFKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0
eWxlQXZhaWxhYmxlKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgZG91YmxlIHN0YXJ0VGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgIHsgcmV0dXJuIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOyB9CisgICAgCisgICAgdm9pZCBj
YW5jZWxUaW1lcnMoKQorICAgIHsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLmNh
bmNlbFRpbWVyKCk7CisgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLmNhbmNlbFRp
bWVyKCk7CisgICAgfQorICAgIAorICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5zaXRpb25zIGdv
IHRocm91Z2ggdGhlIHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RBUlRFRCBzdGF0
ZQorICAgIC8vIHRoZSBhbmltYXRpb24gaXMgc3RhcnRlZC4gVGhpcyBtYXkgb3IgbWF5IG5vdCBy
ZXF1aXJlIGRlZmVycmVkIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdG9yLgorICAgIC8vIElmIHNv
LCB3ZSBzdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgdGhhdCByZXNwb25zZSBpcyByZWNlaXZlZCAo
YW5kIGl0IHJldHVybnMgdGhlIHN0YXJ0IHRpbWUpLgorICAgIC8vIE90aGVyd2lzZSwgd2UgdXNl
IHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlIHN0YXJ0IHRpbWUgYW5kIGdvIGltbWVkaWF0ZWx5IHRv
IHRoZSBMT09QSU5HIG9yCisgICAgLy8gRU5ESU5HIHN0YXRlLgorICAgIGVudW0gQW5pbVN0YXRl
IHsgCisgICAgICAgIFNUQVRFX05FVywgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9u
IGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBydW5uaW5nIHlldAorICAgICAgICBTVEFURV9T
VEFSVF9XQUlUX1RJTUVSLCAgICAgICAgIC8vIHN0YXJ0IHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcg
Zm9yIGZpcmUKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUsICAgLy8g
d2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFuaW1hdGlvbnMKKyAgICAg
ICAgU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSwgICAgICAvLyBhbmltYXRpb24gc3RhcnRlZCwg
d2FpdGluZyBmb3IgcmVzcG9uc2UKKyAgICAgICAgU1RBVEVfTE9PUElORywgICAgICAgICAgICAg
ICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGxvb3AgdGltZXIg
cnVubmluZywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9FTkRJTkcsICAgICAgICAg
ICAgICAgICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRp
bWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAgU1RBVEVfUEFVU0VEX1dBSVRf
VElNRVIsICAgICAgICAvLyBhbmltYXRpb24gaW4gcGF1c2UgbW9kZSB3aGVuIGFuaW1hdGlvbiBz
dGFydGVkCisgICAgICAgIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFLCAgICAgLy8gYW5pbWF0
aW9uIHBhdXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCisgICAgICAgIFNUQVRFX1BBVVNFRF9S
VU4sICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIExPT1BJTkcgb3Ig
RU5ESU5HIHN0YXRlCisgICAgICAgIFNUQVRFX0RPTkUgICAgICAgICAgICAgICAgICAgICAgLy8g
ZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5kIHJlbW92ZWQKKyAgICB9Owor
ICAgIAorICAgIGVudW0gQW5pbVN0YXRlSW5wdXQgeworICAgICAgICBTVEFURV9JTlBVVF9NQUtF
X05FVywgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3IGZyb20gYW55IHN0YXRlCisgICAg
ICAgIFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3Rz
IGEgc3RhcnQKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sICAvLyBmb3Jj
ZSBhIHJlc3RhcnQgZnJvbSBhbnkgc3RhdGUKKyAgICAgICAgU1RBVEVfSU5QVVRfU1RBUlRfVElN
RVJfRklSRUQsICAvLyBzdGFydCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9TVFlM
RV9BVkFJTEFCTEUsICAgICAgICAvLyBzdHlsZSBpcyBzZXR1cCwgcmVhZHkgdG8gc3RhcnQgYW5p
bWF0aW5nCisgICAgICAgIFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCAgICAgLy8gbV9zdGFy
dFRpbWUgd2FzIHNldAorICAgICAgICBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVELCAgIC8v
IGxvb3AgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVELCAg
ICAvLyBlbmQgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5QVVRfUEFVU0VfT1ZFUlJJREUs
ICAgICAvLyBwYXVzZSBhbiBhbmltYXRpb24gZHVlIHRvIG92ZXJyaWRlCisgICAgICAgIFNUQVRF
X0lOUFVUX1JFU1VNRV9PVkVSUklERSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0
aW9uCisgICAgICAgIFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORywgLy8gcGxheSBzdGF0
ZSBwYXVzZWQgLT4gcnVubmluZworICAgICAgICBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNF
RCwgIC8vIHBsYXkgc3RhdGUgcnVubmluZyAtPiBwYXVzZWQKKyAgICAgICAgU1RBVEVfSU5QVVRf
RU5EX0FOSU1BVElPTiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkgc3RhdGUKKyAgICB9
OworICAgIAorICAgIC8vIENhbGxlZCB3aGVuIGFuaW1hdGlvbiBpcyBpbiBORVcgc3RhdGUgdG8g
c3RhcnQgYW5pbWF0aW9uCisgICAgdm9pZCB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5w
dXQgaW5wdXQsIGRvdWJsZSBwYXJhbSk7CisgICAgCisgICAgLy8gQW5pbWF0aW9uIGhhcyBhY3R1
YWxseSBzdGFydGVkLCBhdCBwYXNzZWQgdGltZQorICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFjayBh
bmQgaXMgb25seSByZWNlaXZlZCB3aGVuIFJlbmRlck9iamVjdDo6c3RhcnRBbmltYXRpb24oKSBv
ciBSZW5kZXJPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbigpIAorICAgIC8vIHJldHVybnMgdHJ1ZS4g
SWYgUmVuZGVyT2JqZWN0OjoKKyAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZShkb3Vi
bGUgc3RhcnRUaW1lKTsKKyAgICAKKyAgICAvLyBDYWxsZWQgdG8gY2hhbmdlIHRvIG9yIGZyb20g
cGF1c2VkIHN0YXRlCisgICAgdm9pZCB1cGRhdGVQbGF5U3RhdGUoYm9vbCBydW5uaW5nKTsKKyAg
ICBib29sIHBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQor
ICAgIAorICAgIGJvb2wgd2FpdGluZ1RvU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0
ZSA9PSBTVEFURV9ORVcgfHwgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9USU1FUjsg
fQorICAgIGJvb2wgcHJlYWN0aXZlKCkgY29uc3QKKyAgICB7IHJldHVybiBtX2FuaW1TdGF0ZSA9
PSBTVEFURV9ORVcgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9X
QUlUX1RJTUVSIHx8CisgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJ
VF9TVFlMRV9BVkFJTEFCTEUgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9T
VEFSVF9XQUlUX1JFU1BPTlNFOworICAgIH0KKyAgICBib29sIHBvc3RhY3RpdmUoKSBjb25zdCB7
IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ET05FOyB9CisgICAgYm9vbCBhY3RpdmUoKSBj
b25zdCB7IHJldHVybiAhcG9zdGFjdGl2ZSgpICYmICFwcmVhY3RpdmUoKTsgfQorICAgIGJvb2wg
cnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIDwgMDsgfQorICAgIGJvb2wgaXNu
ZXcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ORVc7IH0KKyAgICBib29s
IHdhaXRpbmdGb3JTdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFU
RV9TVEFSVF9XQUlUX1JFU1BPTlNFOyB9CisgICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxF
X0FWQUlMQUJMRTsgfQorICAgIGJvb2wgd2FpdGluZ0ZvckVuZEV2ZW50KCkgY29uc3QgIHsgcmV0
dXJuIG1fd2FpdGluZ0ZvckVuZEV2ZW50OyB9CisgICAgCisgICAgLy8gImFuaW1hdGluZyIgbWVh
bnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIGEgdGltZXIgdG8ga2Vl
cCBmaXJpbmcKKyAgICAvLyAoZS5nLiBhIHNvZnR3YXJlIGFuaW1hdGlvbikKKyAgICB2b2lkIHNl
dEFuaW1hdGluZyhib29sIGluQW5pbWF0aW5nID0gdHJ1ZSkgeyBtX2FuaW1hdGluZyA9IGluQW5p
bWF0aW5nOyB9CisgICAgYm9vbCBhbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlu
ZzsgfQorICAgIAorICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZz
ZXQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1h
dGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
UmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXNl
dChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSA9IDAsIGNv
bnN0IFJlbmRlclN0eWxlKiB0byA9IDApIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICB2b2lkIGFu
aW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJlZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
ZG91YmxlIGVsYXBzZWRUaW1lKTsKKyAgICB2b2lkIGFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZp
cmVkKEhUTUxFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBw
cm9wZXJ0eSwgYm9vbCByZXNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKTsK
KyAgICAKKyAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiBhbmltKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGlvbi0+dHJhbnNpdGlvbnNNYXRjaChhbmltKTsgfQorICAg
IAorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qIGFuaW0pIHsgbV9hbmlt
YXRpb24gPSBjb25zdF9jYXN0PFRyYW5zaXRpb24qPihhbmltKTsgfQorICAgIAorICAgIC8vIFJl
dHVybiB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5
IGJlIHRoZSBjYXNlIGZvcgorICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0
byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCisgICAgLy8gc2V0IHRo
ZSBzdGFydCB0aW1lLiBJZiBhbiBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbiwgaXQgd2lsbCBwcm9i
YWJseSBub3QgZ2V0CisgICAgLy8gYmFjayB0aGUgU1RBUlRfVElNRSBldmVudC4KKyAgICB2aXJ0
dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAg
Ly8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3Bl
cnR5PworICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJv
cGVydHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKCF3YWl0aW5nVG9TdGFydCgpICYm
ICFwb3N0YWN0aXZlKCkpICYmIGFmZmVjdHNQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgfQorICAg
ICAgICAKK3Byb3RlY3RlZDoKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudEZvckV2ZW50RGlzcGF0
Y2goKQorICAgIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5ub2RlKCkgJiYgbV9vYmplY3QtPm5v
ZGUoKS0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obV9vYmplY3QtPm5vZGUoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9CisgICAgCisgICAgQ29t
cG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24oKSB7IHJldHVybiBtX2NvbXBBbmlt
OyB9CisgICAgCisgICAgLy8gVGhlc2UgYXJlIGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5n
IHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2FuIGRvIGFueSBleHRyYSB3b3JrCisgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25BbmltYXRpb25JdGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpIHsg
fQorICAgIAorICAgIHZvaWQgcHJpbWVFdmVudFRpbWVycygpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIEFuaW1TdGF0ZSBtX2FuaW1TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb247CiAgICAgCi0g
ICAgYm9vbCBtX2ZpbmlzaGVkOyAgICAKKyAgICBib29sIG1fYW5pbWF0aW5nOyAgICAgICAvLyB0
cmFuc2l0aW9uL2FuaW1hdGlvbiByZXF1aXJlcyBjb250aW51YWwgdGltZXIgZmlyaW5nCisgICAg
Ym9vbCBtX3dhaXRlZEZvclJlc3BvbnNlOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICBi
b29sIG1fcGF1c2VkOwogICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBSZW5kZXJPYmplY3Qq
ICAgbV9vYmplY3Q7CiAgICAgCi0gICAgYm9vbCBtX3N0YWxlOworICAgIEFuaW1hdGlvblRpbWVy
Q2FsbGJhY2sgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrOworICAgIEFuaW1hdGlvbkV2ZW50RGlz
cGF0Y2hlciBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8VHJhbnNpdGlv
bj4gbV9hbmltYXRpb247CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBtX2NvbXBBbmltOworICAg
IGJvb2wgbV93YWl0aW5nRm9yRW5kRXZlbnQ7CiB9OwogCi1jbGFzcyBDb21wb3NpdGVJbXBsaWNp
dEFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgfkNvbXBvc2l0
ZUltcGxpY2l0QW5pbWF0aW9uKCkgeyBkZWxldGVBbGxWYWx1ZXMobV9hbmltYXRpb25zKTsgfQot
Ci0gICAgUmVuZGVyU3R5bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLQotICAgIGJvb2wgYW5pbWF0
aW5nKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCopOworI3ByYWdtYSBt
YXJrIC0KIAorY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7
CitwdWJsaWM6CisgICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogdHJhbnNp
dGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5p
bSkKKyAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVuZGVyZXIsIGNvbXBBbmltKQor
ICAgICwgbV9wcm9wZXJ0eSh0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpKQorICAgICwgbV9vdmVycmlk
ZGVuKGZhbHNlKQorICAgICwgbV9mcm9tU3R5bGUoMCkKKyAgICAsIG1fdG9TdHlsZSgwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SW1wbGljaXRBbmltYXRpb24oKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX2Zyb21TdHlsZSAmJiAhbV90b1N0eWxlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYW4gZW5kIGV2ZW50LCB3ZSBuZWVkIHRv
IGZpbmlzaCB0aGUgYW5pbWF0aW9uIHRvIG1ha2Ugc3VyZSBubyBvbGQKKyAgICAgICAgLy8gYW5p
bWF0aW9ucyBzdGljayBhcm91bmQgaW4gdGhlIGxvd2VyIGxldmVscworICAgICAgICBpZiAod2Fp
dGluZ0ZvckVuZEV2ZW50KCkgJiYgbV9vYmplY3QpCisgICAgICAgICAgICBBU1NFUlQoMCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBEbyB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQgb2YgaW4gdGhl
IGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxlZAorICAgICAg
ICBpZiAoIXBvc3RhY3RpdmUoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFU
RV9JTlBVVF9FTkRfQU5JTUFUSU9OLCAtMSk7ICAgICAKKyAgICB9CisgICAgCisgICAgaW50IHBy
b3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgaW5FbGFwc2VkVGltZSk7CisgICAgdmlydHVhbCBi
b29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBl
bmRBbmltYXRpb24oYm9vbCByZXNldCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGlvQW5pbWF0ZWRTdHlsZSk7CisgICAgdmlydHVh
bCB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBm
cm9tID0gMCwgY29uc3QgUmVuZGVyU3R5bGUqIHRvID0gMCk7CisgICAgCisgICAgdm9pZCBzZXRP
dmVycmlkZGVuKGJvb2wgYik7CisgICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25zdCB7
IHJldHVybiBtX292ZXJyaWRkZW47IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmly
ZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
YWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbVN0eWxlICYmIG1fdG9TdHlsZTsgfQorICAgIAor
cHJvdGVjdGVkOgorICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6
Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29i
amVjdC0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
aW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsgICAgCisgICAgCiBwcml2YXRlOgot
ICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+IG1fYW5pbWF0aW9uczsKKyAgICBp
bnQgbV9wcm9wZXJ0eTsKKyAgICBib29sIG1fb3ZlcnJpZGRlbjsKKyAgICAKKyAgICAvLyBUaGUg
dHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KKyAgICBSZW5kZXJTdHlsZSogbV9mcm9t
U3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIG1fdG9TdHlsZTsKIH07CiAKLUltcGxpY2l0QW5pbWF0
aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uKQotOiBt
X2Zyb21TdHlsZSgwKQotLCBtX3RvU3R5bGUoMCkKLSwgbV9wcm9wZXJ0eSh0cmFuc2l0aW9uLT5w
cm9wZXJ0eSgpKQotLCBtX2Z1bmN0aW9uKHRyYW5zaXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkpCi0s
IG1fZHVyYXRpb24odHJhbnNpdGlvbi0+ZHVyYXRpb24oKSAvIDEwMDAuMCkKLSwgbV9yZXBlYXRD
b3VudCh0cmFuc2l0aW9uLT5yZXBlYXRDb3VudCgpKQotLCBtX2l0ZXJhdGlvbigwKQotLCBtX2Zp
bmlzaGVkKGZhbHNlKQotLCBtX3N0YXJ0VGltZShjdXJyZW50VGltZSgpKQotLCBtX3BhdXNlZChm
YWxzZSkKLSwgbV9wYXVzZVRpbWUobV9zdGFydFRpbWUpCi0sIG1fc3RhbGUoZmFsc2UpCisjcHJh
Z21hIG1hcmsgLQorCit2b2lkIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2s6OnRpbWVyRmlyZWQoVGlt
ZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCiB7CisgICAgbV9hbmltLT5hbmltYXRpb25UaW1lckNh
bGxiYWNrRmlyZWQobV9ldmVudFR5cGUsIG1fZWxhcHNlZFRpbWUpOwogfQogCi1JbXBsaWNpdEFu
aW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKCkKK3ZvaWQgQW5pbWF0aW9uRXZlbnREaXNwYXRj
aGVyOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKQogewotICAgIEFTU0VS
VCghbV9mcm9tU3R5bGUgJiYgIW1fdG9TdHlsZSk7CisgICAgbV9hbmltLT5hbmltYXRpb25FdmVu
dERpc3BhdGNoZXJGaXJlZChtX2VsZW1lbnQuZ2V0KCksIG1fbmFtZSwgbV9wcm9wZXJ0eSwgbV9y
ZXNldCwgbV9ldmVudFR5cGUsIG1fZWxhcHNlZFRpbWUpOwogfQogCi12b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogZnJvbSwg
UmVuZGVyU3R5bGUqIHRvKQorI3ByYWdtYSBtYXJrIC0KKworI3ByYWdtYSBtYXJrIC0KKyAgICAK
K0FuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlv
biwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSkK
KzogbV9hbmltU3RhdGUoU1RBVEVfTkVXKQorLCBtX2l0ZXJhdGlvbigwKQorLCBtX2FuaW1hdGlu
ZyhmYWxzZSkKKywgbV93YWl0ZWRGb3JSZXNwb25zZShmYWxzZSkKKywgbV9zdGFydFRpbWUoMCkK
KywgbV9wYXVzZVRpbWUoLTEpCissIG1fb2JqZWN0KHJlbmRlcmVyKQorLCBtX2FuaW1hdGlvblRp
bWVyQ2FsbGJhY2soY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0
aW9uRXZlbnREaXNwYXRjaGVyKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uQmFzZSo+KHRoaXMpKQorLCBt
X2FuaW1hdGlvbihjb25zdF9jYXN0PFRyYW5zaXRpb24qPih0cmFuc2l0aW9uKSkKKywgbV9jb21w
QW5pbShjb21wQW5pbSkKKywgbV93YWl0aW5nRm9yRW5kRXZlbnQoZmFsc2UpCiB7Ci0gICAgc2V0
RmluaXNoZWQoZmFsc2UpOworfQogCi0gICAgaWYgKG1fZnJvbVN0eWxlKQotICAgICAgICBtX2Zy
b21TdHlsZS0+ZGVyZWYocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwotICAgIGlmIChtX3RvU3R5
bGUpCi0gICAgICAgIG1fdG9TdHlsZS0+ZGVyZWYocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwot
ICAgIG1fZnJvbVN0eWxlID0gZnJvbTsKLSAgICBpZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIG1f
ZnJvbVN0eWxlLT5yZWYoKTsKLSAgICBtX3RvU3R5bGUgPSB0bzsKLSAgICBpZiAobV90b1N0eWxl
KQotICAgICAgICBtX3RvU3R5bGUtPnJlZigpOwotICAgIGlmIChmcm9tIHx8IHRvKQotICAgICAg
ICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Cit2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0
ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQoreworICAg
IC8vIGlmIHdlIGdldCBhIFJFU1RBUlQgdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJl
Z2FyZGxlc3Mgb2Ygc3RhdGUKKyAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfTUFLRV9ORVcp
IHsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZB
SUxBQkxFKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKGZhbHNlKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgbV93YWl0
ZWRGb3JSZXNwb25zZSA9IGZhbHNlOworICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JF
U1RBUlRfQU5JTUFUSU9OKSB7CisgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICBpZiAo
bV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUpCisgICAgICAg
ICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAg
ICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUgPSAwOwor
ICAgICAgICBtX3BhdXNlVGltZSA9IC0xOworICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOwog
ICAgICAgICAKLSAgICAvLyBJZiB3ZSBhcmUgc3RhbGUsIGF0dGVtcHQgdG8gdXBkYXRlIHRvIGEg
bmV3IHRyYW5zaXRpb24gdXNpbmcgdGhlIG5ldyB8dG98IHN0eWxlLiAgSWYgd2UgYXJlIGFibGUg
dG8gZmluZCBhIG5ldyB0cmFuc2l0aW9uLAotICAgIC8vIHRoZW4gd2Ugd2lsbCB1bm1hcmsgb3Vy
c2VsdmVzIGZvciBkZWF0aC4KLSAgICBpZiAoc3RhbGUoKSAmJiBmcm9tICYmIHRvKSB7Ci0gICAg
ICAgICBmb3IgKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSB0by0+dHJhbnNpdGlvbnMo
KTsgdHJhbnNpdGlvbjsgdHJhbnNpdGlvbiA9IHRyYW5zaXRpb24tPm5leHQoKSkgewotICAgICAg
ICAgICAgaWYgKG1fcHJvcGVydHkgIT0gdHJhbnNpdGlvbi0+cHJvcGVydHkoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCBkdXJhdGlvbiA9IHRyYW5zaXRpb24t
PmR1cmF0aW9uKCk7Ci0gICAgICAgICAgICBpbnQgcmVwZWF0Q291bnQgPSB0cmFuc2l0aW9uLT5y
ZXBlYXRDb3VudCgpOwotICAgICAgICAgICAgaWYgKGR1cmF0aW9uICYmIHJlcGVhdENvdW50KSB7
Ci0gICAgICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMC4wOwotICAgICAg
ICAgICAgICAgIG1fcmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICAgICAgICAgICAgICBt
X3N0YWxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGlmIChydW5uaW5nKCkpCisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RB
VEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAtMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX0FOSU1BVElPTikgeworICAgICAg
ICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJU
X1dBSVRfU1RZTEVfQVZBSUxBQkxFKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGlu
Z0ZvclN0eWxlQXZhaWxhYmxlKGZhbHNlKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9E
T05FOworICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUEFVU0VfT1ZFUlJJREUpIHsKKyAg
ICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UpIHsKKyAg
ICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiB0aGUgV0FJVF9SRVNQT05TRSBzdGF0ZSwgdGhlIGFu
aW1hdGlvbiB3aWxsIGdldCBjYW5jZWxlZCBiZWZvcmUgCisgICAgICAgICAgICAvLyB3ZSBnZXQg
YSByZXNwb25zZSwgc28gbW92ZSB0byB0aGUgbmV4dCBzdGF0ZQorICAgICAgICAgICAgZW5kQW5p
bWF0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBV
VF9TVEFSVF9USU1FX1NFVCwgY3VycmVudFRpbWUoKSk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9SRVNVTUVfT1ZF
UlJJREUpIHsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX0xPT1BJTkcgfHwgbV9h
bmltU3RhdGUgPT0gU1RBVEVfRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5p
bWF0aW9uCisgICAgICAgICAgICBzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBleGVjdXRlIHN0YXRlIG1h
Y2hpbmUKKyAgICBzd2l0Y2gobV9hbmltU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTVEFURV9ORVc6
CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9O
IHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyB8fCBpbnB1dCA9PSBT
VEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0g
U1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlf
U1RBVEVfUlVOTklORykgeworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZXIg
dG8gdGhlIGluaXRpYWwgZGVsYXkgKDAgaWYgbm8gZGVsYXkpCisgICAgICAgICAgICAgICAgbV93
YWl0ZWRGb3JSZXNwb25zZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0g
U1RBVEVfU1RBUlRfV0FJVF9USU1FUjsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVy
Q2FsbGJhY2suc3RhcnRUaW1lcihtX2FuaW1hdGlvbi0+ZGVsYXkoKSwgRXZlbnROYW1lczo6d2Vi
a2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgbV9hbmltYXRpb24tPmRlbGF5KCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfU1RBUlRfV0FJVF9U
SU1FUjoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9USU1F
Ul9GSVJFRCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9USU1F
Ul9GSVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAg
ICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBz
dGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAg
ICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFOwor
ICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSh0
cnVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVu
ZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hh
bmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5p
bWF0aW9uKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bm5pbmcoKSk7
CisgICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRv
IGZpcmUgYW5kIHdlIGdvdCBhIHBhdXNlLiBDYW5jZWwgdGhlIHRpbWVyLCBwYXVzZSBhbmQgd2Fp
dAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAg
ICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNU
QVRFX1BBVVNFRF9XQUlUX1RJTUVSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEU6CisgICAgICAg
ICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfQVZBSUxBQkxFIHx8IGlucHV0
ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUWUxFX0FW
QUlMQUJMRSkgeworICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVs
bCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGgg
c3RhcnQgdGltZQorICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJ
VF9SRVNQT05TRTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdmVycmlkZUFu
aW1hdGlvbnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTZW5kIHN0
YXJ0IGV2ZW50LCBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvblN0YXJ0KDAu
MGYpOyAvLyB0aGUgZWxhcHNlZFRpbWUgaXMgYWx3YXlzIDAgaGVyZQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAg
ICBpZiAob3ZlcnJpZGRlbigpIHx8ICFzdGFydEFuaW1hdGlvbigwKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBz
byBmaXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbV9hbmltU3Rh
dGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bm5pbmcoKSk7CisgICAgICAg
ICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhl
IHN0eWxlIGhhcyBiZWVuIHNldHVwLiBJZiB3ZSdyZSBhc2tlZCB0byB3YWl0CisgICAgICAgICAg
ICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhlIHN0eWxlIG11c3QgaGF2ZSBiZWVuIHByb2Nlc3Nl
ZCwgc28gd2UgY2FuIGRlYWwgd2l0aCB0aGlzIGxpa2Ugd2Ugd291bGQKKyAgICAgICAgICAgICAg
ICAvLyBmb3IgV0FJVF9SRVNQT05TRSwgZXhjZXB0IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyBh
biBlbmRBbmltYXRpb24oKS4KKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IDA7CisgICAg
ICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfU1RBUlRf
V0FJVF9SRVNQT05TRToKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9T
VEFSVF9USU1FX1NFVCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFS
VF9USU1FX1NFVCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIGEgc3RhcnQgdGltZSwgc2V0IGl0LCB1bmxlc3MgdGhlIHN0
YXJ0VGltZSBpcyBhbHJlYWR5IHNldAorICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0VGltZSA8
PSAwKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGVuIHRoZSBlbmQgb3IgbG9vcCBl
dmVudCBuZWVkcyB0byBmaXJlCisgICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVycygpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28g
d2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKG1f
b2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb24o
KS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3
YWl0aW5nIGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2Fp
dC4gV2hlbiAKKyAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0
aG91Z2ggdGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKKyAgICAgICAgICAgICAgICBtX3BhdXNl
VGltZSA9IDA7CisgICAgICAgICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfTE9PUElORzoK
KyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVE
IHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAg
Ly8gTG9vcCB0aW1lciBmaXJlZCwgbG9vcCBhZ2FpbiBvciBlbmQuCisgICAgICAgICAgICAgICAg
b25BbmltYXRpb25JdGVyYXRpb24ocGFyYW0pOworICAgICAgICAgICAgICAgIHByaW1lRXZlbnRU
aW1lcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUgYW5pbWF0aW9u
IGFuZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBjdXJyZW50VGltZSgpOwor
ICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICAgICAgICAgIGVuZEFuaW1h
dGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9QQVVTRURf
UlVOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RB
VEVfRU5ESU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9U
SU1FUl9GSVJFRCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfVElN
RVJfRklSRUQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAg
ICAgICAgICAgLy8gRW5kIHRpbWVyIGZpcmVkLCBmaW5pc2ggdXAKKyAgICAgICAgICAgICAgICBv
bkFuaW1hdGlvbkVuZChwYXJhbSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBGaXJlIG9mZiBhbm90aGVyIHN0eWxlIGNoYW5nZSBzbyB3ZSBjYW4gc2V0IHRo
ZSBmaW5hbCB2YWx1ZQorICAgICAgICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1l
bnQoKSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ET05FOworICAgICAg
ICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb24oKS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNw
YXRjaGVyKCk7CisgICAgICAgICAgICAgICAgLy8gfHRoaXN8IG1heSBiZSBkZWxldGVkIGhlcmUg
d2hlbiB3ZSd2ZSBiZWVuIGNhbGxlZCBmcm9tIHRpbWVyRmlyZWQoKQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hp
bGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKKyAgICAgICAgICAgICAg
ICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgICAgICAgICAgY2FuY2VsVGlt
ZXJzKCk7CisgICAgICAgICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9SVU47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEX1dBSVRfVElNRVI6CisgICAgICAgICAgICBBU1NF
UlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKTsKKyAgICAgICAgICAg
IEFTU0VSVCghcnVubmluZygpKTsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKKyAg
ICAgICAgICAgIG1fc3RhcnRUaW1lICs9IGN1cnJlbnRUaW1lKCkgLSBtX3BhdXNlVGltZTsKKyAg
ICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5k
IHdhaXQgYWdhaW4KKyAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTkVXOworICAgICAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfV0FJVF9SRVNQ
T05TRToKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfUlVOOgorICAgICAgICAgICAgLy8gV2Ug
dHJlYXQgdGhlc2UgdHdvIGNhc2VzIHRoZSBzYW1lLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRo
YXQsIHdoZW4gd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFCisgICAgICAgICAgICAvLyBzdGF0
ZSwgd2UgZG9uJ3QgeWV0IGhhdmUgYSB2YWxpZCBzdGFydFRpbWUsIHNvIHdlIHNlbmQgMCB0byBz
dGFydEFuaW1hdGlvbi4gV2hlbiB0aGUgU1RBUlRfVElNRQorICAgICAgICAgICAgLy8gZXZlbnQg
Y29tZXMgaW4gcW5kIHdlIHdlcmUgaW4gdGhlIFJVTiBzdGF0ZSwgd2Ugd2lsbCBub3RpY2UgdGhh
dCB3ZSBoYXZlIGFscmVhZHkgc2V0IHRoZSAKKyAgICAgICAgICAgIC8vIHN0YXJ0VGltZSBhbmQg
d2lsbCBpZ25vcmUgaXQuCisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRf
UExBWV9TVEFURV9SVU5OSU5HKTsKKyAgICAgICAgICAgIEFTU0VSVCghcnVubmluZygpKTsKKyAg
ICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKKyAgICAgICAgICAgIGlmIChtX2FuaW1TdGF0
ZSA9PSBTVEFURV9QQVVTRURfUlVOKQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lICs9IGN1
cnJlbnRUaW1lKCkgLSBtX3BhdXNlVGltZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgICAgICBtX3BhdXNlVGltZSA9IC0xOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSB3ZXJlIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGlt
ZSByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRpb24sIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KKyAg
ICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAg
aWYgKG92ZXJyaWRkZW4oKSB8fCAhc3RhcnRBbmltYXRpb24obV9zdGFydFRpbWUpKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIGdldCBhIHN0YXJ0VGltZSBjYWxsYmFj
aywgc28gZmlyZSB0aGUgc3RhcnQgdGltZSBoZXJlCisgICAgICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3dhaXRlZEZv
clJlc3BvbnNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRF
X0RPTkU6CisgICAgICAgICAgICAvLyBXZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50
aWwgd2UgYXJlIGRlbGV0ZWQKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyB8dGhp
c3wgbWF5IGJlIGRlbGV0ZWQgaGVyZSBpZiB3ZSBjYW1lIG91dCBvZiBTVEFURV9FTkRJTkcgd2hl
biB3ZSd2ZSBiZWVuIGNhbGxlZCBmcm9tIHRpbWVyRmlyZWQoKQorfQorICAgIAordm9pZCBBbmlt
YXRpb25CYXNlOjphbmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBBU1NFUlQobV9vYmplY3Qt
PmRvY3VtZW50KCkgJiYgIW1fb2JqZWN0LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKKyAg
ICAKKyAgICAvLyBGSVhNRTogdXNlIGFuIGVudW0KKyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShTVEFURV9JTlBVVF9TVEFSVF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25F
dmVudCkKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0xPT1BfVElNRVJf
RklSRUQsIGVsYXBzZWRUaW1lKTsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1l
czo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgICAgICAvLyB8
dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQogICAgIH0KK30KKwordm9pZCBBbmltYXRpb25CYXNl
OjphbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJlZChIVE1MRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlc2V0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworICAgIG1fd2FpdGluZ0Zv
ckVuZEV2ZW50ID0gZmFsc2U7CisgICAgCisgICAgLy8gS2VlcCBhbiBhdG9taWMgc3RyaW5nIG9u
IHRoZSBzdGFjayB0byBrZWVwIGl0IGFsaXZlIHVudGlsIHdlIGV4aXQgdGhpcyBtZXRob2QKKyAg
ICAvLyAoc2luY2UgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IG1heSBjYXVzZSB8dGhpc3wgdG8gYmUg
ZGVsZXRlZCwgdGhlcmVmb3JlIHJlbW92aW5nCisgICAgLy8gdGhlIGxhc3QgcmVmIHRvIHRoZSBh
dG9taWMgc3RyaW5nKS4KKyAgICBBdG9taWNTdHJpbmcgYW5pbU5hbWUobmFtZSk7CisgICAgQXRv
bWljU3RyaW5nIGFuaW1FdmVudFR5cGUoZXZlbnRUeXBlKTsKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IGVsZW1lbnQgc3RpY2tzIGFyb3VuZCB0b28KKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1l
bnRSZXRhaW5lcihlbGVtZW50KTsKICAgICAKLSAgICAvLyBJZiB3ZSBkaWQgbm90IGZpbmQgYSBu
ZXcgdHJhbnNpdGlvbiwgdGhlbiBtYXJrIG91cnNlbHZlcyBhcyBiZWluZyBmaW5pc2hlZCBzbyB0
aGF0IHdlIGNhbiBiZSByZW1vdmVkLgotICAgIGlmIChzdGFsZSgpKQotICAgICAgICBzZXRGaW5p
c2hlZCh0cnVlKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQgfHwgKGVsZW1lbnQtPmRvY3VtZW50KCkg
JiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKKyAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKIH0KIAotZG91YmxlIEltcGxpY2l0QW5pbWF0aW9uOjpwcm9n
cmVzcygpIGNvbnN0Cit2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlTdGF0ZShib29sIHJ1
bikKIHsKLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9zdGFydFRp
bWU7CisgICAgaWYgKHJ1bm5pbmcoKSAhPSBydW4gfHwgaXNuZXcoKSkgeworICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUocnVuID8gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIDogU1RB
VEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQsIC0xKTsKKyAgICB9Cit9CisKK2RvdWJsZSBBbmlt
YXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0Cit7
CisgICAgaWYgKHByZWFjdGl2ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3Vi
bGUgZWxhcHNlZFRpbWUgPSBydW5uaW5nKCkgPyAoY3VycmVudFRpbWUoKSAtIG1fc3RhcnRUaW1l
KSA6IChtX3BhdXNlVGltZSAtIG1fc3RhcnRUaW1lKTsKKyAgICBpZiAocnVubmluZygpICYmIGVs
YXBzZWRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKG1fZmluaXNo
ZWQgfHwgIW1fZHVyYXRpb24gfHwgZWxhcHNlZFRpbWUgPj0gbV9kdXJhdGlvbikKKyAgICBkb3Vi
bGUgZHVyID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgCisgICAgaWYgKHBvc3RhY3Rp
dmUoKSB8fCAhbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgfHwgZWxhcHNlZFRpbWUgPj0gZHVyKQog
ICAgICAgICByZXR1cm4gMS4wOwotCi0gICAgaWYgKG1fZnVuY3Rpb24udHlwZSgpID09IExpbmVh
clRpbWluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1cm4gZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9u
OworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGZyYWN0aW9uYWwgdGltZSwgdGFraW5nIGludG8g
YWNjb3VudCBkaXJlY3Rpb24uCisgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91
dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZlIAorICAgIC8vIHNob3J0
IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUKKyAgICBkb3VibGUgdCA9IGVsYXBzZWRU
aW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgaW50IGkgPSAoaW50KSB0OworICAg
IHQgLT0gaTsKKyAgICAKKyAgICBpZiAoc2NhbGUgIT0gMSB8fCBvZmZzZXQgIT0gMCkKKyAgICAg
ICAgdCA9ICh0IC0gb2Zmc2V0KSAqIHNjYWxlOworICAgIAorICAgIGlmIChtX2FuaW1hdGlvbi0+
dGltaW5nRnVuY3Rpb24oKS50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAg
IHJldHVybiB0OwogICAgIAogICAgIC8vIEN1YmljIGJlemllci4KLSAgICByZXR1cm4gc29sdmVD
dWJpY0JlemllckZ1bmN0aW9uKG1fZnVuY3Rpb24ueDEoKSwgbV9mdW5jdGlvbi55MSgpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY3Rpb24ueDIoKSwgbV9mdW5j
dGlvbi55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRp
bWUgLyBtX2R1cmF0aW9uLCBtX2R1cmF0aW9uKTsKKyAgICBkb3VibGUgdHQgPSBzb2x2ZUN1Ymlj
QmV6aWVyRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueDEoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uLT50aW1pbmdG
dW5jdGlvbigpLnkxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54MigpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueTIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgbV9hbmltYXRp
b24tPmR1cmF0aW9uKCkpOworICAgIHJldHVybiB0dDsKIH0KIAordm9pZCBBbmltYXRpb25CYXNl
OjpwcmltZUV2ZW50VGltZXJzKCkKK3sKKyAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5kIG9yIGxv
b3AgZXZlbnQgbmVlZHMgdG8gZmlyZQorICAgIGRvdWJsZSBjdCA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgY29uc3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN0IC0gbV9zdGFydFRpbWU7CisgICAg
QVNTRVJUKGVsYXBzZWREdXJhdGlvbiA+PSAwKTsKKyAgICAKKyAgICBkb3VibGUgdG90YWxEdXJh
dGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQg
PSAwOworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IHRvdGFsRHVyYXRpb247CisgICAg
aWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJhdGlvbiA8IHRvdGFsRHVyYXRpb24p
IHsKKyAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9k
KGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBuZXh0
SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKKyAgICB9Cisg
ICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IGhhdmUgMCBkdXJhdGlvbkxlZnQsIGlm
IHdlJ3ZlIGdvdHRlbiB0aGUgZXZlbnQgbGF0ZSBhbmQgd2UgYXJlIGFscmVhZHkKKyAgICAvLyBw
YXN0IHRvdGFsRHVyYXRpb24uIEluIHRoaXMgY2FzZSB3ZSBzdGlsbCBmaXJlIGFuIGVuZCB0aW1l
ciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZW5kLiAKKyAgICAvLyBUaGlzIGRlZmVycyB0aGUgY2Fs
bCB0byBzZW5kQW5pbWF0aW9uRXZlbnRzIHRvIGF2b2lkIHJlLWVudHJhbnQgY2FsbHMgdGhhdCBk
ZXN0cm95CisgICAgLy8gdGhlIFJlbmRlck9iamVjdCwgYW5kIHRoZXJlZm9yZSB8dGhpc3wgYmVm
b3JlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKyAgICBpZiAodG90YWxEdXJhdGlvbiA8IDAgfHwgbmV4
dEl0ZXJhdGlvblRpbWUgPCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIC8vIFdlIGFyZSBub3Qg
YXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBsb29wIGV2ZW50CisgICAgICAgIEFTU0VSVChuZXh0SXRl
cmF0aW9uVGltZSA+IDApOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0xPT1BJTkc7Cisg
ICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0aW9uTGVmdCwg
RXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIG5leHRJdGVyYXRpb25U
aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kLCBz
ZW5kIGFuIGVuZCBldmVudAorICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0VORElORzsKKyAg
ICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBF
dmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOwor
ICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0KKwogc3RhdGljIGlubGluZSBpbnQgYmxlbmRGdW5j
KGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBpbnQo
ZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwpAQCAtMjIzLDcgKzgzNyw4IEBAIHN0YXRp
YyBpbmxpbmUgSW50U2l6ZSBibGVuZEZ1bmMoY29uc3QgSW50U2l6ZSYgZnJvbSwgY29uc3QgSW50
U2l6ZSYgdG8sIGRvdWJsZSBwCiBzdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJsZW5kRnVuYyhj
b25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dy
ZXNzKQogeyAgCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwotICAgIHJldHVybiBuZXcgU2hhZG93
RGF0YShibGVuZEZ1bmMoZnJvbS0+eCwgdG8tPngsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20t
PnksIHRvLT55LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1ciwgcHJv
Z3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVz
cyksIGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9ncmVzcyksIGJs
ZW5kRnVuYyhmcm9tLT5jb2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykpOwogfQogCiBzdGF0aWMg
aW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCkBAIC0yMzcsNyArODUyLDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBpIDwgZnJvbVNpemUgPyBmcm9tW2ldLmdldCgp
IDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0b09wID0gaSA8IHRvU2l6ZSA/IHRv
W2ldLmdldCgpIDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZGVkT3AgPSB0
b09wID8gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcykgOiBmcm9tT3AtPmJsZW5kKDAsIHBy
b2dyZXNzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOworICAgICAg
ICBpZiAoYmxlbmRlZE9wKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjU0LDMxMSArODcwLDgwNyBAQCBzdGF0
aWMgaW5saW5lIEVWaXNpYmlsaXR5IGJsZW5kRnVuYyhFVmlzaWJpbGl0eSBmcm9tLCBFVmlzaWJp
bGl0eSB0bywgZG91YmxlIHBybwogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJU0lCTEUgOiAo
dG8gIT0gVklTSUJMRSA/IHRvIDogZnJvbSk7CiB9CiAKLSNkZWZpbmUgQkxFTkQocHJvcCwgZ2V0
dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+
Z2V0dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSB7XAotICAgICAgICByZXNldChyZW5k
ZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkp
IFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09
IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIGlmIChtX2Zy
b21TdHlsZS0+Z2V0dGVyKCkgIT0gbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgICAg
IHNldEZpbmlzaGVkKGZhbHNlKTsgXAotICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBc
Ci0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFy
ZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgIGFuaW1hdGVk
U3R5bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBtX3RvU3R5bGUt
PmdldHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0g
cHJvcCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9XAotICAgIH1cCi0K
LSNkZWZpbmUgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihwcm9wLCBnZXR0ZXIsIHNldHRlcikg
XAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAhPSB0
YXJnZXRTdHlsZS0+Z2V0dGVyKCkpIHsgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAgICAg
ICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxs
IHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IG1f
ZnJvbVN0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBDb2xvciB0b0NvbG9yID0gbV90b1N0eWxl
LT5nZXR0ZXIoKTsgXAotICAgICAgICBpZiAoZnJvbUNvbG9yLmlzVmFsaWQoKSB8fCB0b0NvbG9y
LmlzVmFsaWQoKSkgeyBcCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpIFwK
LSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Y29sb3IoKTsgXAotICAg
ICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkgXAotICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBtX3RvU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmIChmcm9tQ29sb3IgIT0g
dG9Db2xvcikge1wKLSAgICAgICAgICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7IFwKLSAgICAg
ICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0
YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxl
bmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAgICAgICAg
ICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsg
XAotICAgICAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICB9XAotCi0jZGVmaW5lIEJMRU5EX1NI
QURPVyhwcm9wLCBnZXR0ZXIsIHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3Ag
JiYgKCFtX3RvU3R5bGUtPmdldHRlcigpIHx8ICF0YXJnZXRTdHlsZS0+Z2V0dGVyKCkgfHwgKm1f
dG9TdHlsZS0+Z2V0dGVyKCkgIT0gKnRhcmdldFN0eWxlLT5nZXR0ZXIoKSkpIHsgXAotICAgICAg
ICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAg
aWYgKHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmICht
X3Byb3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAg
ICAgIGlmIChtX2Zyb21TdHlsZS0+Z2V0dGVyKCkgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAmJiAq
bV9mcm9tU3R5bGUtPmdldHRlcigpICE9ICptX3RvU3R5bGUtPmdldHRlcigpKSB7XAotICAgICAg
ICAgICAgc2V0RmluaXNoZWQoZmFsc2UpOyBcCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5
bGUpIFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVu
ZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsgXAotICAgICAgICAgICAgYW5p
bWF0ZWRTdHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhtX2Zyb21TdHlsZS0+Z2V0dGVyKCksIG1fdG9T
dHlsZS0+Z2V0dGVyKCksIHByb2dyZXNzKCkpKTtcCi0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0
eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAgIH1cCi0gICAg
fQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmlt
YXRlZFN0eWxlKQotewotICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIG5vIHRyYW5zaXRpb24tcHJv
cGVydHksIHRoZW4gdGhlIG9ubHkgd2F5IHRvIHRlbGwgaWYgb3VyIGdvYWwgc3RhdGUgY2hhbmdl
ZCBpcyB0byBjaGVjawotICAgIC8vIGV2ZXJ5IHNpbmdsZSBhbmltYXRhYmxlIHByb3BlcnR5LiAg
Rm9yIG5vdyB3ZSdsbCBqdXN0IGRpZmYgdGhlIHN0eWxlcyB0byBhc2sgdGhhdCBxdWVzdGlvbiwK
LSAgICAvLyBidXQgd2Ugc2hvdWxkIHJlYWxseSBleGNsdWRlIG5vbi1hbmltYXRhYmxlIHByb3Bl
cnRpZXMuCi0gICAgaWYgKCFtX3RvU3R5bGUgfHwgKG1fcHJvcGVydHkgPT0gY0FuaW1hdGVBbGwg
JiYgdGFyZ2V0U3R5bGUtPmRpZmYobV90b1N0eWxlKSkpIHsKLSAgICAgICAgcmVzZXQocmVuZGVy
ZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgICAgICBpZiAoc3RhbGUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQmxvdyB1cCBzaG9ydGhh
bmRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZC4KLSAgICBzZXRGaW5pc2hlZCh0cnVlKTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIHNldExlZnQpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5UmlnaHQsIHJpZ2h0LCBzZXRSaWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlU
b3AsIHRvcCwgc2V0VG9wKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBz
ZXRCb3R0b20pOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBzZXRXaWR0aCk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlIZWlnaHQsIGhlaWdodCwgc2V0SGVpZ2h0KTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgYm9yZGVyTGVmdFdpZHRoLCBzZXRCb3Jk
ZXJMZWZ0V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9y
ZGVyUmlnaHRXaWR0aCwgc2V0Qm9yZGVyUmlnaHRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9wV2lkdGgsIHNldEJvcmRlclRvcFdpZHRoKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwg
c2V0Qm9yZGVyQm90dG9tV2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwg
bWFyZ2luTGVmdCwgc2V0TWFyZ2luTGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5S
aWdodCwgbWFyZ2luUmlnaHQsIHNldE1hcmdpblJpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eU1hcmdpblRvcCwgbWFyZ2luVG9wLCBzZXRNYXJnaW5Ub3ApOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tLCBtYXJnaW5Cb3R0b20sIHNldE1hcmdpbkJvdHRvbSk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgcGFkZGluZ0xlZnQsIHNldFBhZGRpbmdMZWZ0KTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0LCBzZXRQYWRk
aW5nUmlnaHQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcGFkZGluZ1RvcCwg
c2V0UGFkZGluZ1RvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRk
aW5nQm90dG9tLCBzZXRQYWRkaW5nQm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU9wYWNp
dHksIG9wYWNpdHksIHNldE9wYWNpdHkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Q29sb3IsIGNv
bG9yLCBzZXRDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJh
Y2tncm91bmRDb2xvciwgc2V0QmFja2dyb3VuZENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZB
TElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBjb2x1bW5SdWxlQ29s
b3IsIHNldENvbHVtblJ1bGVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsIGNvbHVtblJ1bGVXaWR0aCwgc2V0Q29sdW1uUnVsZVdpZHRoKTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgY29sdW1uR2FwLCBzZXRDb2x1bW5HYXAp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQsIGNvbHVtbkNvdW50LCBz
ZXRDb2x1bW5Db3VudCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwg
Y29sdW1uV2lkdGgsIHNldENvbHVtbldpZHRoKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NP
TE9SKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHNl
dFRleHRTdHJva2VDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIHRleHRGaWxsQ29sb3IsIHNldFRleHRGaWxsQ29sb3Ip
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGhv
cml6b250YWxCb3JkZXJTcGFjaW5nLCBzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZyk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZlcnRpY2FsQm9y
ZGVyU3BhY2luZywgc2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKTsKLSAgICBCTEVORF9NQVlCRV9J
TlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBib3JkZXJMZWZ0Q29sb3Is
IHNldEJvcmRlckxlZnRDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIHNldEJvcmRlclJpZ2h0
Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvciwgYm9yZGVyVG9wQ29sb3IsIHNldEJvcmRlclRvcENvbG9yKTsKLSAgICBCTEVORF9N
QVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJv
dHRvbUNvbG9yLCBzZXRCb3JkZXJCb3R0b21Db2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHla
SW5kZXgsIHpJbmRleCwgc2V0WkluZGV4KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxpbmVIZWln
aHQsIGxpbmVIZWlnaHQsIHNldExpbmVIZWlnaHQpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURf
Q09MT1IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIG91dGxpbmVDb2xvciwgc2V0T3V0bGluZUNv
bG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsIG91dGxpbmVPZmZzZXQs
IHNldE91dGxpbmVPZmZzZXQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBv
dXRsaW5lV2lkdGgsIHNldE91dGxpbmVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZXR0
ZXJTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nLCBzZXRMZXR0ZXJTcGFjaW5nKTsKLSAgICBCTEVORChD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCB3b3JkU3BhY2luZywgc2V0V29yZFNwYWNpbmcpOwotICAg
IEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgYm94U2hhZG93LCBzZXRC
b3hTaGFkb3cpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHRleHRT
aGFkb3csIHNldFRleHRTaGFkb3cpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtLCB0cmFuc2Zvcm0sIHNldFRyYW5zZm9ybSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1PcmlnaW5YLCB0cmFuc2Zvcm1PcmlnaW5YLCBzZXRUcmFuc2Zvcm1PcmlnaW5Y
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksIHRyYW5zZm9y
bU9yaWdpblksIHNldFRyYW5zZm9ybU9yaWdpblkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgYm9yZGVyVG9wTGVmdFJhZGl1cywgc2V0Qm9yZGVyVG9w
TGVmdFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJh
ZGl1cywgYm9yZGVyVG9wUmlnaHRSYWRpdXMsIHNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvcmRlckJv
dHRvbUxlZnRSYWRpdXMsIHNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5LCB2aXNpYmlsaXR5LCBzZXRWaXNpYmlsaXR5KTsKLSAgICBCTEVORChDU1NQ
cm9wZXJ0eVpvb20sIHpvb20sIHNldFpvb20pOwotfQotCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRl
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIGNv
bnN0IFRyYW5zaXRpb24qIGN1cnJlbnRUcmFuc2l0aW9ucyA9IGN1cnJlbnRTdHlsZS0+dHJhbnNp
dGlvbnMoKTsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiB0YXJnZXRUcmFuc2l0aW9ucyA9IHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpOwotICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFuZ2VkID0gbV9h
bmltYXRpb25zLmlzRW1wdHkoKSB8fCAoY3VycmVudFRyYW5zaXRpb25zICE9IHRhcmdldFRyYW5z
aXRpb25zICYmICEoY3VycmVudFRyYW5zaXRpb25zICYmIHRhcmdldFRyYW5zaXRpb25zICYmICpj
dXJyZW50VHJhbnNpdGlvbnMgPT0gKnRhcmdldFRyYW5zaXRpb25zKSk7Ci0KLSAgICBpZiAodHJh
bnNpdGlvbnNDaGFuZ2VkKSB7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlv
bio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgICAKLSAgICAg
ICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgLy8gTWFy
ayBhbnkgcnVubmluZyBhbmltYXRpb25zIGFzIHN0YWxlIGlmIHRoZSBzZXQgb2YgdHJhbnNpdGlv
bnMgY2hhbmdlZC4gIFN0YWxlIGFuaW1hdGlvbnMgY29udGludWUKLSAgICAgICAgICAgIC8vIHRv
IGJsZW5kIG9uIGEgdGltZXIsIGFuZCB0aGVuIHJlbW92ZSB0aGVtc2VsdmVzIHdoZW4gZmluaXNo
ZWQuCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdGFsZSgpOwotCi0gICAgICAgIC8vIElm
IG91ciB0cmFuc2l0aW9ucyBjaGFuZ2VkIHdlIG5lZWQgdG8gYWRkIG5ldyBhbmltYXRpb25zIGZv
ciBhbnkgdHJhbnNpdGlvbnMgdGhhdAotICAgICAgICAvLyBkb24ndCBleGlzdCB5ZXQuICBJZiBh
IG5ldyB0cmFuc2l0aW9uIGNvbmZsaWN0cyB3aXRoIGEgY3VycmVudGx5IHJ1bm5pbmcgc3RhbGUg
dHJhbnNpdGlvbiwgdGhlbiB3ZSB3aWxsIG5vdCBhZGQgaXQuCi0gICAgICAgIC8vIFRoZSBzdGFs
ZSB0cmFuc2l0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpdHNlbGYgdG8gdGhlIG5l
dyB0cmFuc2l0aW9uIGlmIGl0IGV2ZXIgZ2V0cyByZXNldCBvciBmaW5pc2hlcy4KLSAgICAgICAg
Zm9yIChjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gdGFyZ2V0VHJhbnNpdGlvbnM7IHRy
YW5zaXRpb247IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IGludCBwcm9wZXJ0eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQg
ZHVyYXRpb24gPSB0cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVh
dENvdW50ID0gdHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSAmJiBkdXJhdGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5z
KHByb3BlcnR5KSkgewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRp
b24gPSBuZXcgSW1wbGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAg
bV9hbmltYXRpb25zLnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0KKyNw
cmFnbWEgbWFyayAtCisKKy8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGRv
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKQoreworICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW0gPSB0YXJnZXRTdHlsZS0+dHJh
bnNpdGlvbnMoKTsKKyAgICAKKyAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlIGRvbid0IGhhdmUg
YW55IHRyYW5zaXRpb25zIG9yIGlmIHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgdHJhbnNpdGlvbnMg
YXJlIHRoZSBzYW1lCisgICAgaWYgKG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpICYmICFhbmltKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG51bUFuaW1zID0gMDsKKyAgICBib29sIHRy
YW5zaXRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIC8vIFNlZSBpZiB0aGUgbGlzdHMg
bWF0Y2gKKyAgICBmb3IgKCA7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsKKyAgICAgICAg
KytudW1BbmltczsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0gKGFuaW0t
PnByb3BlcnR5KCkgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSA/IDAgOgorICAgICAgICBtX3RyYW5z
aXRpb25zLmdldChhbmltLT5wcm9wZXJ0eSgpKTsKKyAgICAgICAgaWYgKCFpbXBsQW5pbSB8fCAh
aW1wbEFuaW0tPmFuaW1hdGlvbnNNYXRjaChhbmltKSkgeworICAgICAgICAgICAgdHJhbnNpdGlv
bnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGlmICghdHJhbnNpdGlvbnNDaGFuZ2VkICYmIG1fdHJhbnNpdGlvbnMuc2l6ZSgp
ICE9IG51bUFuaW1zKQorICAgICAgICB0cmFuc2l0aW9uc0NoYW5nZWQgPSB0cnVlOworICAgIAor
ICAgIGlmICghdHJhbnNpdGlvbnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gVHJhbnNpdGlvbnMgaGF2ZSBjaGFuZ2VkLCB1cGRhdGUgdGhlIGxpc3QKKyAgICByZXNldFRy
YW5zaXRpb25zKHJlbmRlcmVyKTsKKyAgICAKKyAgICBpZiAoIXRhcmdldFN0eWxlLT50cmFuc2l0
aW9ucygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWRkIGFsbCB0aGUgbmV3IGFu
aW1hdGlvbnMKKyAgICBmb3IgKGFuaW0gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKTsgYW5p
bTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAgICAgICAKKyAgICAgICAgaW50IHByb3BlcnR5
ICAgICAgICA9IGFuaW0tPnByb3BlcnR5KCk7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiAgICAg
PSBhbmltLT5kdXJhdGlvbigpOworICAgICAgICBkb3VibGUgZGVsYXkgICAgICAgID0gYW5pbS0+
ZGVsYXkoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eSAmJiAoZHVyYXRpb24gfHwg
ZGVsYXkpICYmICFtX3RyYW5zaXRpb25zLmNvbnRhaW5zKHByb3BlcnR5KSkgeworICAgICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG5ldyBJbXBsaWNpdEFuaW1hdGlvbihj
b25zdF9jYXN0PFRyYW5zaXRpb24qPihhbmltKSwgcmVuZGVyZXIsIHRoaXMpOworICAgICAgICAg
ICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcGVydHksIGFuaW1hdGlvbik7CiAgICAgICAgIH0KICAg
ICB9Cit9CiAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBvYmplY3RzIHJlYWR5
LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQot
ICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgotICAgIFJl
bmRlclN0eWxlKiByZXN1bHQgPSAwOwotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlv
bio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgVmVjdG9yPGludD4g
b2Jzb2xldGVUcmFuc2l0aW9uczsKK1JlbmRlclN0eWxlKiBDb21wb3NpdGVBbmltYXRpb246OmFu
aW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIFJlbmRlclN0eWxlKiByZXN1bHRTdHls
ZSA9IDA7CisgICAgCisgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRv
bid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApCisgICAgdXBkYXRlVHJhbnNpdGlv
bnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIAorICAgIGlmIChj
dXJyZW50U3R5bGUpIHsKKyAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0cmFuc2l0aW9uIG9i
amVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAgV2Ug
d2FudCB0aGVtCisgICAgICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYg
bmVlZGVkLgorICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgYW5pbSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoYW5pbSkgeworICAgICAgICAgICAgICAgIGFu
aW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJl
c3VsdFN0eWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICAv
LyBMb29rIGF0IHRoZSAiYWxsIiBhbmltYXRpb24gZmlyc3QuCi0gICAgSW1wbGljaXRBbmltYXRp
b24qIGFsbEFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy5nZXQoY0FuaW1hdGVBbGwpOwotICAgIGlm
IChhbGxBbmltYXRpb24pIHsKLSAgICAgICAgYWxsQW5pbWF0aW9uLT5hbmltYXRlKHRoaXMsIHJl
bmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHRTdHlsZSA/IHJlc3VsdFN0eWxlIDogdGFyZ2V0U3R5bGU7Cit9CisKKy8vICJhbmltYXRp
bmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyB0aGUgdGlt
ZXIgdG8ga2VlcCBmaXJpbmcKKy8vIChlLmcuIGEgdHJhbnNpdGlvbikKK3ZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZykKK3sKKyAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICB0cmFu
c2l0aW9uLT5zZXRBbmltYXRpbmcoaW5BbmltYXRpbmcpOworICAgIH0gICAgCit9CisKK2Jvb2wg
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRpbmcoKQoreworICAgIENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAg
Zm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJh
bnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5p
bWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICh0cmFuc2l0aW9u
ICYmIHRyYW5zaXRpb24tPmFuaW1hdGluZygpICYmIHRyYW5zaXRpb24tPnJ1bm5pbmcoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gICAgCisgICAgcmV0dXJuIGZhbHNlOworfQog
Ci0gICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBh
cyBzdGFsZSwgdGhlbiB3ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gaXRl
cmF0aW9uIG9mIHRoZSBoYXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAoYWxsQW5pbWF0
aW9uLT5maW5pc2hlZCgpICYmIGFsbEFuaW1hdGlvbi0+c3RhbGUoKSkKLSAgICAgICAgICAgIG9i
c29sZXRlVHJhbnNpdGlvbnMuYXBwZW5kKGNBbmltYXRlQWxsKTsKK3ZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpyZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICBkZWxldGUgdHJhbnNpdGlv
bjsKICAgICB9CisgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOworfQorCit2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoreworICAgIGlmIChzdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IC8vIE5vdyBsb29rIGF0IHRoZSBzcGVjaWFsaXplZCBhbmltYXRpb25zLgotICAgIGZvciAoSGFz
aE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBTa2lwIG92ZXIgdGhlICJh
bGwiIGFuaW1hdGlvbiwgc2luY2Ugd2UgYW5pbWF0ZWQgaXQgYWxyZWFkeS4KLSAgICAgICAgaWYg
KGl0LT5zZWNvbmQtPnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpCisgICAgLy8gUmVzZXQgdHJh
bnNpdGlvbnMKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAg
ICAgICAgaXQtPnNlY29uZC0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVudFN0eWxlLCB0
YXJnZXRTdHlsZSwgcmVzdWx0KTsKKyAgICAgICAgaWYgKGFuaW0tPnBvc3RhY3RpdmUoKSAmJiAh
YW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpIHsKKyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVN0
YXRlTWFjaGluZShhbmltLT5TVEFURV9JTlBVVF9NQUtFX05FVywgLTEpOworICAgICAgICAgICAg
YW5pbS0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAgIC8v
IElmIHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBhcyBzdGFsZSwgdGhl
biB3ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gaXRlcmF0aW9uIG9mIHRo
ZSBoYXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZmluaXNoZWQo
KSAmJiBpdC0+c2Vjb25kLT5zdGFsZSgpKQotICAgICAgICAgICAgb2Jzb2xldGVUcmFuc2l0aW9u
cy5hcHBlbmQoaXQtPnNlY29uZC0+cHJvcGVydHkoKSk7Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6c3VzcGVuZEFuaW1hdGlvbnMoKQoreworICAgIGlmIChtX3N1c3BlbmRlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKIAorICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7
CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKGZhbHNl
KTsKKyAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZUFuaW1hdGlvbnMoKQoreworICAgIGlmICghbV9zdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICAvLyBOb3cgY3VsbCBvdXQgYW55IHN0YWxlIGFuaW1hdGlvbnMgdGhhdCBhcmUg
ZmluaXNoZWQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9ic29sZXRlVHJhbnNpdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9
IG1fYW5pbWF0aW9ucy50YWtlKG9ic29sZXRlVHJhbnNpdGlvbnNbaV0pOwotICAgICAgICBhbmlt
YXRpb24tPnJlc2V0KHJlbmRlcmVyLCAwLCAwKTsKLSAgICAgICAgZGVsZXRlIGFuaW1hdGlvbjsK
KyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgp
KSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7CisgICAgICAgIH0K
ICAgICB9Cit9CiAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0Owordm9p
ZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9w
ZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmIChhbmltICYmIChhbmltLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFu
aW0tPnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+c2V0T3Zl
cnJpZGRlbih0cnVlKTsKKyAgICB9Cit9CiAKLSAgICByZXR1cm4gdGFyZ2V0U3R5bGU7Cit2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhp
bnQgcHJvcGVydHkpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiAoYW5pbS0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0
eSB8fCBhbmltLT5wcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0t
PnNldE92ZXJyaWRkZW4oZmFsc2UpOworICAgIH0KIH0KIAotYm9vbCBDb21wb3NpdGVJbXBsaWNp
dEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpz
dHlsZUF2YWlsYWJsZSgpCiB7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmICghaXQtPnNlY29uZC0+
ZmluaXNoZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMgPT0gMCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkpCisg
ICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVf
SU5QVVRfU1RZTEVfQVZBSUxBQkxFLCAtMSk7CisgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUlt
cGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorYm9vbCBDb21w
b3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAog
ewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRB
bmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5yZXNldChyZW5kZXJlciwgMCwgMCk7
CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNwcmFn
bWEgbWFyayAtCisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFBy
b3BlcnR5V3JhcHBlckJhc2UoaW50IHByb3ApCisgICAgOiBtX3Byb3AocHJvcCkKKyAgICB7IH0K
KyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgeyB9CisgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
PTA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0PTA7Cisg
ICAgCisgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9CisgICAgCitw
cml2YXRlOgorICAgIGludCBtX3Byb3A7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Ns
YXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJCYXNlIHsK
K3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoaW50IHByb3AsIFQgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQor
ICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlciko
KTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRl
cikoKSBjb25zdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJvcGVydHlX
cmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyKGludCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQorICAgIDogUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAg
ICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46
Om1fZ2V0dGVyKSgpLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
U2hhZG93IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRhKj4geworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhpbnQgcHJvcCwgU2hhZG93RGF0YSogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
U2hhZG93RGF0YSosIGJvb2wpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFNoYWRvd0Rh
dGEqPihwcm9wLCBnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAg
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dhID0g
KGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNoYWRvd2EgJiYgc2hhZG93YiB8fCBz
aGFkb3dhICYmICFzaGFkb3diKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoc2hhZG93YSAmJiBzaGFkb3diICYmICgqc2hhZG93YSAhPSAqc2hhZG93YikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAg
ICAgIFNoYWRvd0RhdGEqIHNoYWRvd2EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFk
b3dEYXRhKiBzaGFkb3diID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSBk
ZWZhdWx0U2hhZG93RGF0YSgwLCAwLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFzaGFkb3dhKQorICAgICAgICAgICAgc2hhZG93YSA9ICZkZWZhdWx0U2hh
ZG93RGF0YTsKKyAgICAgICAgaWYgKCFzaGFkb3diKQorICAgICAgICAgICAgc2hhZG93YiA9ICZk
ZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKHNoYWRvd2EsIHNoYWRvd2IsIHByb2cpLCBmYWxzZSk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9v
bCk7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplIDogcHVibGljIFByb3BlcnR5
V3JhcHBlckdldHRlcjxJbnRTaXplPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVySW50
U2l6ZShpbnQgcHJvcCwgSW50U2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBJbnRTaXplJikpCisgICAgOiBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAgICAgICAgSW50
U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6ZWIgPSAo
Yi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChzaXplYSA9PSBzaXpl
Yik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
KSBjb25zdAorICAgIHsKKyAgICAgICAgSW50U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIEludFNpemUgc2l6ZWIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhzaXplYSwgc2l6ZWIsIHBy
b2cpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKGNvbnN0IEludFNpemUmKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKGludCBwcm9wLCBjb25zdCBDb2xvciYg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoY29uc3QgQ29sb3ImKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAs
IG1fZ2V0dGVyKGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4q
bV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3Ig
PSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZnJvbUNv
bG9yID09IHRvQ29sb3I7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEt
PiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xv
ciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVu
ZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7CisgICAg
dm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKK307CisKIGNsYXNz
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZShGcmFtZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgp
OwotCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGdldChSZW5kZXJPYmplY3QqLCBS
ZW5kZXJTdHlsZSopOworICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYWNjZXNzQ29tcG9z
aXRlQW5pbWF0aW9uKFJlbmRlck9iamVjdCopOwogICAgIGJvb2wgY2xlYXIoUmVuZGVyT2JqZWN0
Kik7CiAgICAgCi0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiopOwotICAgIHZvaWQgdXBkYXRlVGltZXIoKTsKLQotICAgIGJvb2wgaGFzSW1wbGlj
aXRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0K
LQorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4qKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisgICAg
dm9pZCB1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU+Kik7CisgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIo
KTsKKyAgICAKKyAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV9jb21w
b3NpdGVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9j
dW1lbnQqIGRvY3VtZW50KTsKKyAgICAKKyAgICB2b2lkIGNsZWFudXBGaW5pc2hlZEFuaW1hdGlv
bnMoKTsKKyAgICAKKyAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7CisgICAgCisgICAgYm9vbCBp
c0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3Bl
cnR5KSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoaW50IHBy
b3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAgCisg
ICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24g
dGltZXJzCisgICAgc3RhdGljIGJvb2wgYmxlbmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9nKTsKKyAgICAKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShi
b29sIHdhaXRpbmcpIHsgaWYgKHdhaXRpbmcpIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7
IGVsc2UgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsgfQorICAgIAogcHJpdmF0ZToKLSAg
ICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj4gbV9h
bmltYXRpb25zOwotICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX3RpbWVy
OworICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByb3BlcnR5TWFwKCk7CisgICAgCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUFuaW1hdGlvbio+IFJlbmRlck9iamVj
dEFuaW1hdGlvbk1hcDsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXAgbV9jb21w
b3NpdGVBbmltYXRpb25zOworICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBt
X2FuaW1hdGlvblRpbWVyOworICAgIFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBt
X3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXI7CiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgdWlu
dDMyX3QgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnM7CisgICAgCisgICAgc3RhdGljIFZlY3Rv
cjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4qIGdfcHJvcGVydHlXcmFwcGVyczsKKyAgICBzdGF0aWMg
aW50IGdfcHJvcGVydHlXcmFwcGVyTWFwW251bUNTU1Byb3BlcnRpZXNdOwogfTsKIAorI3ByYWdt
YSBtYXJrIC0KKworVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmdfcHJvcGVydHlXcmFwcGVycyA9IDA7CitpbnQgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmdfcHJvcGVydHlXcmFwcGVyTWFwW107CisKIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSogZnJhbWUpCi0gICAg
OiBtX3RpbWVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGltZXJGaXJlZCkK
LSAgICAsIG1fZnJhbWUoZnJhbWUpCis6IG1fYW5pbWF0aW9uVGltZXIodGhpcywgJkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKQorLCBtX3VwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQpCissIG1fZnJhbWUoZnJhbWUpCissIG1fbnVtU3R5bGVB
dmFpbGFibGVXYWl0ZXJzKDApCiB7CisgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsKIH0KIAogQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgpCiB7
Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7CisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fY29tcG9zaXRlQW5pbWF0aW9ucyk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlUHJvcGVydHlNYXAoKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBzaG91bGQgcmVmIGNvdW50IGl0
IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQW5pbWF0aW9uQ29udHJvbGxlciBpcyBkZXN0cm95
ZWQ/CisgICAgaWYgKGdfcHJvcGVydHlXcmFwcGVycyA9PSAwKSB7CisgICAgICAgIGdfcHJvcGVy
dHlXcmFwcGVycyA9IG5ldyBWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KCk7CisgICAgICAg
IAorICAgICAgICAvLyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0
aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVy
U3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TGVmdCkpOworICAgICAgICBnX3Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlS
aWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0
aD4oQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRv
cCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPExlbmd0aD4oQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVu
ZGVyU3R5bGU6OnNldEJvdHRvbSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlXaWR0aCwgJlJlbmRlclN0
eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlI
ZWlnaHQsICZSZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCkpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVu
c2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpi
b3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWdu
ZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0aCkpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRv
bVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQ
cm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVmdCwgJlJlbmRlclN0eWxl
OjpzZXRNYXJnaW5MZWZ0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVy
U3R5bGU6Om1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3AsICZSZW5kZXJT
dHlsZTo6c2V0TWFyZ2luVG9wKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJl
bmRlclN0eWxlOjptYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSk7
CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdMZWZ0
LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRp
bmdSaWdodCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFk
ZGluZ1JpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6
cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSk7CisgICAgICAgIGdfcHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9w
ZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0
eWxlOjpzZXRQYWRkaW5nQm90dG9tKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0eSwgJlJlbmRl
clN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNpdHkpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xvciY+
KENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Q29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3Ip
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsICZSZW5k
ZXJTdHlsZTo6Y29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVXaWR0
aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uQ291bnQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5X
aWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5X
aWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAm
UmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhv
cml6b250YWxCb3JkZXJTcGFjaW5nKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVy
dGljYWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJlbmRl
clN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4
LCAmUmVuZGVyU3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpsaW5lSGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNldExpbmVIZWlnaHQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5T3V0bGluZU9mZnNldCwgJlJl
bmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVPZmZzZXQp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVXaWR0aCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJT
dHlsZTo6c2V0TGV0dGVyU3BhY2luZykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZykpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgJlJl
bmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNm
b3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6dHJhbnNmb3Jt
T3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BM
ZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcExlZnRSYWRpdXMpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUo
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1cykp
OworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
SW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJT
dHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0
b21MZWZ0UmFkaXVzKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRS
YWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxFVmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlW
aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aWJpbGl0eSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20sICZSZW5kZXJTdHlsZTo6em9vbSwgJlJl
bmRlclN0eWxlOjpzZXRab29tKSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhlc2Ug
bWlnaHQgYmUgaW52YWxpZCBjb2xvcnMsIG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxl
Ojp0ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IpKTsKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJS
aWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IpKTsKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IpKTsKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tQ29sb3IpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3IpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZXNlIGFyZSBmb3Igc2hhZG93cworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpKTsKKyAgICAg
ICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhD
U1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0
eWxlOjpzZXRUZXh0U2hhZG93KSk7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdW51
c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh1bnNpZ25lZCBpbnQpIG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVyTWFwW2ldID0gQ1NTUHJvcGVydHlJbnZhbGlkOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCgo
KmdfcHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCkgLSBmaXJzdENTU1Byb3BlcnR5IDwg
bnVtQ1NTUHJvcGVydGllcyk7CisgICAgICAgICAgICBnX3Byb3BlcnR5V3JhcHBlck1hcFsoKmdf
cHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCkgLSBmaXJzdENTU1Byb3BlcnR5XSA9IGk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIHN0YXRpYworYm9vbCBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwp
IHsKKyAgICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5lcXVhbHMoYSwgYikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBp
bnQgcHJvcEluZGV4ID0gcHJvcCAtIGZpcnN0Q1NTUHJvcGVydHk7CisgICAgICAgIAorICAgICAg
ICBpZiAocHJvcEluZGV4ID49IDAgJiYgcHJvcEluZGV4IDwgbnVtQ1NTUHJvcGVydGllcykgewor
ICAgICAgICAgICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtwcm9wSW5kZXhdOworICAg
ICAgICAgICAgcmV0dXJuIChpID49IDApID8gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5lcXVh
bHMoYSwgYikgOiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CisvLyBzdGF0aWMgLSByZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFu
aW1hdGlvbiB0aW1lcnMKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJv
cGVydGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykKK3sKKyAgICBpZiAocHJvcCA9PSBj
QW5pbWF0ZUFsbCkgeworICAgICAgICBib29sIG5lZWRzVGltZXIgPSBmYWxzZTsKKyAgICAKKyAg
ICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIFByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSAoKmdfcHJvcGVydHlXcmFwcGVycylbaV07CisgICAgICAg
ICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkgeworICAgICAgICAgICAgICAgIHdyYXBw
ZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICAgICAgbmVlZHNUaW1lciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5lZWRzVGlt
ZXI7CisgICAgfQorICAgIAorICAgIGludCBwcm9wSW5kZXggPSBwcm9wIC0gZmlyc3RDU1NQcm9w
ZXJ0eTsKKyAgICBpZiAocHJvcEluZGV4ID49IDAgJiYgcHJvcEluZGV4IDwgbnVtQ1NTUHJvcGVy
dGllcykgeworICAgICAgICBpbnQgaSA9IGdfcHJvcGVydHlXcmFwcGVyTWFwW3Byb3BJbmRleF07
CisgICAgICAgIGlmIChpID49IDApIHsKKyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckJhc2Uq
IHdyYXBwZXIgPSAoKmdfcHJvcGVydHlXcmFwcGVycylbaV07CisgICAgICAgICAgICB3cmFwcGVy
LT5ibGVuZChkc3QsIGEsIGIsIHByb2cpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Db21wb3NpdGVJbXBs
aWNpdEFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdldChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCitDb21wb3NpdGVBbmltYXRp
b24qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphY2Nlc3NDb21wb3NpdGVBbmltYXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlv
biogYW5pbWF0aW9uID0gbV9hbmltYXRpb25zLmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmlt
YXRpb24gJiYgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgYW5pbWF0aW9u
ID0gbmV3IENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9u
cy5zZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmlt
YXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKKyAgICBpZiAoIWFu
aW1hdGlvbikgeworICAgICAgICBhbmltYXRpb24gPSBuZXcgQ29tcG9zaXRlQW5pbWF0aW9uKCFy
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCksIHRoaXMpOworICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBhbmltYXRpb24pOwogICAgIH0KICAgICBy
ZXR1cm4gYW5pbWF0aW9uOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpj
bGVhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMudGFrZShyZW5kZXJlcik7CisgICAgLy8g
UmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUgc3VzcGVuZGVk
IChzbyB3ZSBkb24ndCB0cnkgdG8KKyAgICAvLyBkbyBhIHNldENoYW5nZWQoKSB3aGVuIHN1c3Bl
bmRlZAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmlt
YXRpb25zLnRha2UocmVuZGVyZXIpOwogICAgIGlmICghYW5pbWF0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5yZXNldChyZW5kZXJlcik7CisgICAgYW5pbWF0aW9u
LT5yZXNldFRyYW5zaXRpb25zKHJlbmRlcmVyKTsKKyAgICBib29sIHdhc1N1c3BlbmRlZCA9IGFu
aW1hdGlvbi0+c3VzcGVuZGVkKCk7CiAgICAgZGVsZXRlIGFuaW1hdGlvbjsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gIXdhc1N1c3BlbmRlZDsKK30KKwordm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpCit7CisgICAgUmVuZGVy
T2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAg
ICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
QW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbXBBbmltLT5jbGVhbnVwRmluaXNoZWRBbmlt
YXRpb25zKHJlbmRlcmVyKTsKKyAgICB9CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0ZVRpbWVyKCkKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
eWxlQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMgPT0g
MCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQo
KTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7CisgICAgICAgIGl0LT5zZWNvbmQtPnN0eWxlQXZhaWxhYmxlKCk7Cisg
ICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRp
b25UaW1lcigpCiB7CiAgICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAgICBIYXNoTWFwPFJl
bmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVuZCA9
IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29t
cG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5hbmltYXRp
bmcoKSkgeworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0
b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0
KSB7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOwor
ICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+YW5pbWF0aW5n
KCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAoYW5pbWF0aW5nKSB7Ci0gICAgICAgIGlm
ICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV90aW1lci5zdGFydFJlcGVhdGlu
ZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Ci0gICAgfSBlbHNlIGlmIChtX3RpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgICAgICBpZiAoIW1fYW5pbWF0aW9uVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRp
bmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAgIH0gZWxzZSBpZiAobV9hbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKIH0KIAotdm9p
ZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4qIHRpbWVyKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlPiopCiB7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkg
eworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICB9
Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VXBkYXRlUmVuZGVy
aW5nRGlzcGF0Y2hlcigpCit7CisgICAgaWYgKCFtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIu
aXNBY3RpdmUoKSkgeworICAgICAgICBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIuc3RhcnRP
bmVTaG90KDApOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qIHRp
bWVyKQoreworICAgIC8vY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpOworICAgIAogICAgIC8v
IFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFuZ2VkIG9uIGFs
bCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8gYW4gaW1tZWRp
YXRlCiAgICAgLy8gdXBkYXRlUmVuZGVyaW5nLiAgSXQgd2lsbCB0aGVuIGNhbGwgYmFjayB0byB1
cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KICAgICBib29sIGFuaW1hdGluZyA9IGZhbHNlOwotICAg
IEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRl
cmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5kZXJP
YmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBpdCA9IG1fYW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNv
bmQtPmFuaW1hdGluZygpKSB7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9p
dGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAg
ICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRpbmcoKSkgewog
ICAgICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGl0LT5maXJzdC0+ZWxl
bWVudCgpLT5zZXRDaGFuZ2VkKCk7CisgICAgICAgICAgICBjb21wQW5pbS0+c2V0QW5pbWF0aW5n
KGZhbHNlKTsKKyAgICAgICAgICAgIHNldENoYW5nZWQocmVuZGVyZXItPmVsZW1lbnQoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVu
ZGVyaW5nKCk7CiAgICAgCi0gICAgdXBkYXRlVGltZXIoKTsKKyAgICB1cGRhdGVBbmltYXRpb25U
aW1lcigpOwogfQogCi1BbmltYXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250cm9sbGVyKEZy
YW1lKiBmcmFtZSkKLTptX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1l
KSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzQW5pbWF0aW5nUHJvcGVydHlP
blJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0Cit7CisgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0
KG9iaik7CisgICAgaWYgKCFhbmltYXRpb24pIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1
cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KTsKK30KKwordm9pZCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRv
Y3VtZW50KQoreworICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7
CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAocmVu
ZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBjb21wQW5pbS0+c3Vz
cGVuZEFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQW5pbWF0aW9uVGltZXIo
KTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9u
cyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgp
OworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlv
bnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJz
dDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKKyAgICAgICAgICAg
IGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUFu
aW1hdGlvblRpbWVyKCk7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKK3ZvaWQgSW1wbGljaXRBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJl
bmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKQoreworICAgIGlmICghcnVubmluZygpIHx8ICFt
X29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBJZiB3ZSdyZSBub3QgcnVubmluZyBhbnkgYW5pbWF0aW9ucyBhbmQgdGhlcmUg
aXMgbm8gY2hhbmdlIGluIG91ciBwcm9wLCBqdXN0IHJldHVybiAKKyAgICBpZiAoaXNuZXcoKSAm
JiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKG1fcHJvcGVydHks
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5z
IHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgorICAgIC8vIElm
IHNvLCB3ZSBuZWVkIHRvIHJlc2V0IGFuZCBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlCisgICAg
aWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5Q
VVRfTUFLRV9ORVcsIC0xKTsKKyAgICAgICAgcmVzZXQocmVuZGVyZXIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICBpb0FuaW1hdGVkU3R5bGUg
PSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odGFyZ2V0U3R5bGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSBydW5uaW5nIGFuZCB0aGUgdGFyZ2V0U3R5
bGUgdmFsdWUgaGFzIGNoYW5nZWQgZnJvbSBvdXIgY3VycmVudCB0b1N0eWxlIHZhbHVlLCB3ZSBu
ZWVkIHRvIHJlc2V0LgorICAgIC8vIFdlIGFsc28gbmVlZCB0byByZXNldCBpZiB3ZSBhcmUgbmV3
LgorICAgIGlmIChpc25ldygpIHx8ICFtX3RvU3R5bGUgfHwgIUFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwobV9wcm9wZXJ0eSwgbV90b1N0eWxlLCB0YXJnZXRTdHls
ZSkpIHsKKyAgICAgICAgLy8gT3BhY2l0eSBpcyBzcGVjaWFsLiBUaGlzIGlzIGNoYW5naW5nIGEg
Y29uc3QgUmVuZGVyU3R5bGUsIGJ1dCB3ZSBrbm93IHdoYXQgd2UgYXJlIGRvaW5nLCByZWFsbHkg
Oi0pCisgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gZG8gdGhpcz8KKyAgICAgICAgaWYgKCFpc25l
dygpICYmIG1fZnJvbVN0eWxlICYmIChtX3Byb3BlcnR5ID09IENTU1Byb3BlcnR5T3BhY2l0eSB8
fCBtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsKSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSBi
bGVuZGVkIHZhbHVlIG9mIG9wYWNpdHkgaW50byB0aGUgY3VycmVudFN0eWxlICh3aGljaCB3aWxs
IGJlIHRoZSBuZXcgZnJvbVN0eWxlKQorICAgICAgICAgICAgZG91YmxlIHByb2cgPSBwcm9ncmVz
cygxLCAwKTsKKyAgICAgICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpibGVuZFBy
b3BlcnRpZXMoQ1NTUHJvcGVydHlPcGFjaXR5LCBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oY3Vy
cmVudFN0eWxlKSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIH0K
KyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCisgICAgLy8gV2Uga25vdyB3
ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQKKyAg
ICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgaW9BbmltYXRlZFN0eWxlID0gbmV3IChy
ZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKKyAgICAK
KyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDApOworICAgIGJvb2wgbmVlZHNBbmltID0g
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcyhtX3Byb3BlcnR5LCBp
b0FuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOworICAgIGlmIChu
ZWVkc0FuaW0pCisgICAgICAgIHNldEFuaW1hdGluZygpOworCisgICAgLy9BU1NFUlQobmVlZHNB
bmltICE9IG1fd2FpdGVkRm9yUmVzcG9uc2UgfHwgcHJlYWN0aXZlKCkpOworfQorCitib29sIElt
cGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9u
KGJvb2wgcmVzZXQpCit7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5pbWF0aW9u
RW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIC8vIHdlJ3JlIGNvbnZlcnRpbmcgdGhl
IGFuaW1hdGlvbiBpbnRvIGEgdHJhbnNpdGlvbiBoZXJlCisgICAgaWYgKCFzZW5kVHJhbnNpdGlv
bkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgaW5FbGFwc2VkVGlt
ZSkpIHsKKyAgICAgICAgLy8gd2UgZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3b3Vs
ZCBjYWxsIGVuZEFuaW1hdGlvbigpLCBzbyB3ZSdsbCBqdXN0IGVuZAorICAgICAgICAvLyBpdCBo
ZXJlLgorICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgfQorfQorCitib29sIEltcGxp
Y2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgaW5F
dmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHJldHVybiBmYWxzZTsgLy8g
ZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJl
c2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tIC8qID0g
MCAqLywgY29uc3QgUmVuZGVyU3R5bGUqIHRvIC8qID0gMCAqLykKK3sKKyAgICBBU1NFUlQoKCFt
X3RvU3R5bGUgJiYgIXRvKSB8fCBtX3RvU3R5bGUgIT0gdG8pOworICAgIEFTU0VSVCgoIW1fZnJv
bVN0eWxlICYmICFmcm9tKSB8fCBtX2Zyb21TdHlsZSAhPSBmcm9tKTsKKyAgICBpZiAobV9mcm9t
U3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEo
KSk7CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5kZXJlZihyZW5kZXJl
ci0+cmVuZGVyQXJlbmEoKSk7CisgICAgCisgICAgbV9mcm9tU3R5bGUgPSBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMgcmVhZC1vbmx5LCBvdGhlciB0aGFuIHRoZSBy
ZWYKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5yZWYoKTsKKyAg
ICAKKyAgICBtX3RvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odG8pOyAgICAgICAv
LyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmIChtX3RvU3R5bGUp
CisgICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7CisgICAgCisgICAgLy8gcmVzdGFydCB0aGUgdHJh
bnNpdGlvbgorICAgIGlmIChmcm9tICYmIHRvKQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
U1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sIC0xKTsKK30KKwordm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6c2V0T3ZlcnJpZGRlbihib29sIGIpCiB7CisgICAgaWYgKGIgIT0gbV9vdmVycmlk
ZGVuKSB7CisgICAgICAgIG1fb3ZlcnJpZGRlbiA9IGI7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShtX292ZXJyaWRkZW4gPyBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSA6IFNUQVRFX0lO
UFVUX1JFU1VNRV9PVkVSUklERSwgLTEpOworICAgIH0KK30KKworYm9vbCBJbXBsaWNpdEFuaW1h
dGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSB8fAorICAgIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxs
ICYmICFBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5
LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSk7Cit9CiAKKyNwcmFnbWEgbWFyayAtCisKK0FuaW1h
dGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorOiBtX2Rh
dGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkKK3sKKyAgICAKIH0KIAog
QW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNvbnRyb2xsZXIoKQpAQCAtNTY2LDQyICsx
Njc4LDg2IEBAIEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRpb25Db250cm9sbGVyKCkKICAg
ICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbElt
cGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBBbmltYXRpb25D
b250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0g
ICAgaWYgKCFtX2RhdGEtPmhhc0ltcGxpY2l0QW5pbWF0aW9ucygpKQorICAgIGlmICghbV9kYXRh
LT5oYXNBbmltYXRpb25zKCkpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGlmIChtX2Rh
dGEtPmNsZWFyKHJlbmRlcmVyKSkKLSAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+c2V0Q2hh
bmdlZCgpOworICAgICAgICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkpOwogfQogCi1S
ZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW1wbGljaXRBbmltYXRpb25z
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKK1JlbmRl
clN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sgICAgCisgICAgLy8gZG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCisgICAgaWYgKCFyZW5kZXJlci0+ZG9j
dW1lbnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAgICAg
cmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpOworICAgIAorICAgIGlmICgoIW9sZFN0eWxlIHx8ICFvbGRTdHlsZS0+dHJh
bnNpdGlvbnMoKSkgJiYgIW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKQorICAgICAgICByZXR1cm4g
bmV3U3R5bGU7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9IG5ld1N0eWxl
OworICAgIAogICAgIC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNpdCBhbmltYXRp
b25zIGZyb20gYSBoYXNodGFibGUuICBXZSB0aGVuIGNvbXBhcmUgdGhlbQogICAgIC8vIGFnYWlu
c3QgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3lu
Yy4gIElmIGRlc3RpbmF0aW9uIHZhbHVlcwogICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVzZXQg
dGhlIGFuaW1hdGlvbi4gIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVlcyBhbmQg
d2UgcmV0dXJuCiAgICAgLy8gYSBuZXcgc3R5bGUuCiAgICAgQVNTRVJUKHJlbmRlcmVyLT5lbGVt
ZW50KCkpOyAvLyBGSVhNRTogV2UgZG8gbm90IGFuaW1hdGUgZ2VuZXJhdGVkIGNvbnRlbnQgeWV0
LgorICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0gbV9k
YXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ocmVuZGVyZXIpOworICAgIGJsZW5kZWRTdHls
ZSA9IHJlbmRlcmVyQW5pbWF0aW9ucy0+YW5pbWF0ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5ld1N0
eWxlKTsKKyAgICAKKyAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisg
ICAgaWYgKGJsZW5kZWRTdHlsZSAhPSBuZXdTdHlsZSkgeworICAgICAgICAvLyBJZiB0aGUgYW5p
bWF0aW9ucy90cmFuc2l0aW9ucyBjaGFuZ2Ugb3BhY2l0eSwgdHJhbnNmb3JtIG9yIHBlcnNwZWN0
aXZlLCB3ZSBuZWVlZCB0byB1cGRhdGUKKyAgICAgICAgLy8gdGhlIHN0eWxlIHRvIGltcG9zZSB0
aGUgc3RhY2tpbmcgcnVsZXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSBpbiBDU1NTdHls
ZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZSgpLgorICAgICAgICBpZiAoYmxlbmRlZFN0eWxl
LT5oYXNBdXRvWkluZGV4KCkgJiYgKChibGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYpKSkg
Ly8gRklYTUUgfHwgYmxlbmRlZFN0eWxlLT5oYXNUcmFuc2Zvcm1PclBlcnNwZWN0aXZlKCkpKSkK
KyAgICAgICAgICAgIGJsZW5kZWRTdHlsZS0+c2V0WkluZGV4KDApOworICAgIH0KKyAgICByZXR1
cm4gYmxlbmRlZFN0eWxlOworfQogCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGFu
aW1hdGlvbiA9IG1fZGF0YS0+Z2V0KHJlbmRlcmVyLCBuZXdTdHlsZSk7Ci0gICAgaWYgKCFhbmlt
YXRpb24gJiYgIW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gbmV3U3R5
bGU7Citib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRl
cmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGF0YS0+aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIob2JqLCBwcm9wZXJ0eSk7Cit9
CiAKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gYW5pbWF0aW9uLT5hbmltYXRlKHJlbmRlcmVy
LCByZW5kZXJlci0+c3R5bGUoKSwgbmV3U3R5bGUpOwotICAgIG1fZGF0YS0+dXBkYXRlVGltZXIo
KTsKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5k
QW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisjaWZkZWYgREVCVUdfU1RBVEVfTUFD
SElORQorICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uQ29udHJvbGxlciAlcCBzdXNwZW5k
QW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNlbmRpZgor
ICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOworfQorCit2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQorewor
I2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlv
bkNvbnRyb2xsZXIgJXAgcmVzdW1lQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMs
IGRvY3VtZW50KTsKKyNlbmRpZgorICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9ucyhkb2N1bWVu
dCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKQor
dm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIo
KQogewotICAgIC8vIEZJWE1FOiBXYWxrIHRoZSB3aG9sZSBoYXNodGFibGUgYW5kIGNhbGwgcGF1
c2Ugb24gZWFjaCBhbmltYXRpb24uCi0gICAgLy8gS2lsbCBvdXIgdGltZXIuCisgICAgbV9kYXRh
LT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKIH0KIAotdm9pZCBBbmltYXRpb25D
b250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKCkKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6
c3R5bGVBdmFpbGFibGUoKQogewotICAgIC8vIEZJWE1FOiBXYWxrIHRoZSB3aG9sZSBoYXNodGFi
bGUgYW5kIGNhbGwgcmVzdW1lIG9uIGVhY2ggYW5pbWF0aW9uLgotICAgIC8vIFN0YXJ0IG91ciB0
aW1lci4KKyAgICBtX2RhdGEtPnN0eWxlQXZhaWxhYmxlKCk7CiB9CiAKK3ZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjpzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3YWl0aW5nKQorewor
ICAgIGlmICh3YWl0aW5nKQorICAgICAgICBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycysrOwor
ICAgIGVsc2UKKyAgICAgICAgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsKKyAgICBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXItPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSh3YWl0aW5nKTsK
K30KKyAgICAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVy
LmggYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGZkYTExNDMuLjkw
YzQ5ZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmgKKysr
IGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMjksOSArMjksMTIgQEAK
ICNpZm5kZWYgQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAjZGVmaW5lIEFuaW1hdGlvbkNvbnRyb2xs
ZXJfaAogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOworY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwpA
QCAtNDIsMTQgKzQ1LDIyIEBAIHB1YmxpYzoKICAgICBBbmltYXRpb25Db250cm9sbGVyKEZyYW1l
Kik7CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKICAgICAKLSAgICB2b2lkIGNhbmNlbElt
cGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKLSAgICBSZW5kZXJTdHlsZSogdXBkYXRl
SW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIFJlbmRlclN0
eWxlKiB1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJP
YmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHN1c3BlbmRB
bmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25z
KERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigpOwog
ICAgIAotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKKyAgICB2b2lkIHN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAg
IAorICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUqIG1fZGF0YTsKKyAgICAKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDMz
MGM5NzIuLjhhYWUzYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTQ4MCw3ICsxNDgwLDcgQEAgdm9pZCBGcmFtZTo6
Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQpCiAgICAgICAg
IGlmICh2aWV3LT5mcmFtZSgpKSB7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1l
bnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmxheWVyKCktPnN1c3BlbmRNYXJxdWVl
cygpOwotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS0+YW5pbWF0aW9uKCktPnN1c3BlbmRBbmlt
YXRpb25zKCk7CisgICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb24oKS0+c3VzcGVu
ZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggOTkyZjM5ZC4uMWIwNzhkZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCkBAIC0yMTUxLDcgKzIxNTEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFu
ZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogdm9pZCBSZW5kZXJPYmplY3Q6OnNldEFu
aW1hdGFibGVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKCFpc1RleHQoKSAm
JiBtX3N0eWxlICYmIHN0eWxlKQotICAgICAgICBzdHlsZSA9IGFuaW1hdGlvbigpLT51cGRhdGVJ
bXBsaWNpdEFuaW1hdGlvbnModGhpcywgc3R5bGUpOworICAgICAgICBzdHlsZSA9IGFuaW1hdGlv
bigpLT51cGRhdGVBbmltYXRpb25zKHRoaXMsIHN0eWxlKTsKIAogICAgIHNldFN0eWxlKHN0eWxl
KTsKIH0KQEAgLTI1MzAsNyArMjUzMCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAKLSAgICBhbmltYXRp
b24oKS0+Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1hdGlvbigpLT5j
YW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgLy8gQnkgZGVmYXVsdCBubyByZWYtY291bnRp
bmcuIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoaXMgZnVu
Y3Rpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBkbyByZWYtY291bnRpbmcuIElmIGFueXRoaW5nCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA4N2Q4NDQ1Li5hMzc3YWQxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBSZW5kZXJXaWRn
ZXQ6OmRlc3Ryb3koKQogICAgIC8vIFNvIHRoZSBjb2RlIGJlbG93IGluY2x1ZGVzIGNvcGllZCBh
bmQgcGFzdGVkIGNvbnRlbnRzIG9mCiAgICAgLy8gYm90aCBSZW5kZXJCb3g6OmRlc3Ryb3koKSBh
bmQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkuCiAgICAgLy8gRml4IG9yaWdpbmFsbHkgbWFkZSBm
b3IgPHJkYXI6Ly9wcm9ibGVtLzQyMjg4MTg+LgotICAgIGFuaW1hdGlvbigpLT5jYW5jZWxJbXBs
aWNpdEFuaW1hdGlvbnModGhpcyk7CisgICAgYW5pbWF0aW9uKCktPmNhbmNlbEFuaW1hdGlvbnMo
dGhpcyk7CiAKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkKICAgICAgICAgdi0+cmVt
b3ZlV2lkZ2V0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmlu
ZGV4IGNiYTYwYjAuLjU2NDc1OTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHAKQEAgLTY2NSwxMTAgKzY2NSw4NyBAQCBUcmFuc2Zvcm1PcGVyYXRpb24qIE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcgogfQog
CiBUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKCkKLSAgICA6IG1fZHVyYXRpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSkKLSAgICAsIG1fcmVwZWF0Q291bnQoUmVuZGVy
U3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSkKLSAgICAsIG1fdGltaW5nRnVu
Y3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSkKLSAg
ICAsIG1fcHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUHJvcGVydHkoKSkK
KyAgICA6IG1fZHVyYXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxEdXJhdGlvbigpKQorICAgICwg
bV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkpCisg
ICAgLCBtX2RlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSkKKyAgICAsIG1fcHJvcGVy
dHkoUmVuZGVyU3R5bGU6OmluaXRpYWxQcm9wZXJ0eSgpKQogICAgICwgbV9kdXJhdGlvblNldChm
YWxzZSkKLSAgICAsIG1fcmVwZWF0Q291bnRTZXQoZmFsc2UpCiAgICAgLCBtX3RpbWluZ0Z1bmN0
aW9uU2V0KGZhbHNlKQorICAgICwgbV9kZWxheVNldChmYWxzZSkKICAgICAsIG1fcHJvcGVydHlT
ZXQoZmFsc2UpCiAgICAgLCBtX25leHQoMCkKIHsKIH0KIAogVHJhbnNpdGlvbjo6VHJhbnNpdGlv
bihjb25zdCBUcmFuc2l0aW9uJiBvKQotICAgIDogbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCi0g
ICAgLCBtX3JlcGVhdENvdW50KG8ubV9yZXBlYXRDb3VudCkKKyAgICA6IFJlZkNvdW50ZWQ8VHJh
bnNpdGlvbj4oKQorICAgICwgbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCiAgICAgLCBtX3RpbWlu
Z0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikKKyAgICAsIG1fZGVsYXkoby5tX2RlbGF5KQog
ICAgICwgbV9wcm9wZXJ0eShvLm1fcHJvcGVydHkpCiAgICAgLCBtX2R1cmF0aW9uU2V0KG8ubV9k
dXJhdGlvblNldCkKLSAgICAsIG1fcmVwZWF0Q291bnRTZXQoby5tX3JlcGVhdENvdW50U2V0KQog
ICAgICwgbV90aW1pbmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVuY3Rpb25TZXQpCisgICAgLCBt
X2RlbGF5U2V0KG8ubV9kZWxheVNldCkKICAgICAsIG1fcHJvcGVydHlTZXQoby5tX3Byb3BlcnR5
U2V0KQotICAgICwgbV9uZXh0KG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6
IDApCisgICAgLCBtX25leHQoby5tX25leHQgPyBuZXcgVHJhbnNpdGlvbigqKG8ubV9uZXh0Lmdl
dCgpKSkgOiAwKQogewogfQogCi1UcmFuc2l0aW9uOjp+VHJhbnNpdGlvbigpCi17Ci0gICAgZGVs
ZXRlIG1fbmV4dDsKLX0KLQogVHJhbnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0
IFRyYW5zaXRpb24mIG8pCiB7CiAgICAgaWYgKG1fbmV4dCAhPSBvLm1fbmV4dCkgewotICAgICAg
ICBkZWxldGUgbV9uZXh0OwotICAgICAgICBtX25leHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFuc2l0
aW9uKCpvLm1fbmV4dCkgOiAwOworICAgICAgICBtX25leHQgPSBvLm1fbmV4dCA/IG5ldyBUcmFu
c2l0aW9uKCooby5tX25leHQuZ2V0KCkpKSA6IDA7CiAgICAgfQogCisgICAgbV9kZWxheSA9IG8u
bV9kZWxheTsKICAgICBtX2R1cmF0aW9uID0gby5tX2R1cmF0aW9uOwotICAgIG1fcmVwZWF0Q291
bnQgPSBvLm1fcmVwZWF0Q291bnQ7CiAgICAgbV90aW1pbmdGdW5jdGlvbiA9IG8ubV90aW1pbmdG
dW5jdGlvbjsKICAgICBtX3Byb3BlcnR5ID0gby5tX3Byb3BlcnR5OwogCisgICAgbV9kZWxheVNl
dCA9IG8ubV9kZWxheVNldDsKICAgICBtX2R1cmF0aW9uU2V0ID0gby5tX2R1cmF0aW9uU2V0Owot
ICAgIG1fcmVwZWF0Q291bnRTZXQgPSBvLm1fcmVwZWF0Q291bnRTZXQ7CiAgICAgbV90aW1pbmdG
dW5jdGlvblNldCA9IG8ubV90aW1pbmdGdW5jdGlvblNldDsKICAgICBtX3Byb3BlcnR5U2V0ID0g
by5tX3Byb3BlcnR5U2V0OwogCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFRyYW5zaXRp
b246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QKK2Jvb2wgVHJhbnNpdGlv
bjo6dHJhbnNpdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiBvKSBjb25zdAogewotICAgIHJl
dHVybiBtX2R1cmF0aW9uID09IG8ubV9kdXJhdGlvbiAmJiBtX3JlcGVhdENvdW50ID09IG8ubV9y
ZXBlYXRDb3VudCAmJiBtX3RpbWluZ0Z1bmN0aW9uID09IG8ubV90aW1pbmdGdW5jdGlvbiAmJgot
ICAgICAgICAgICBtX3Byb3BlcnR5ID09IG8ubV9wcm9wZXJ0eSAmJiBtX2R1cmF0aW9uU2V0ID09
IG8ubV9kdXJhdGlvblNldCAmJiBtX3JlcGVhdENvdW50U2V0ID09IG8ubV9yZXBlYXRDb3VudFNl
dCAmJgotICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8ubV90aW1pbmdGdW5jdGlv
blNldCAmJiBtX3Byb3BlcnR5U2V0ID09IG8ubV9wcm9wZXJ0eVNldCAmJgotICAgICAgICAgICAo
KG1fbmV4dCAmJiBvLm1fbmV4dCkgPyAqbV9uZXh0ID09ICpvLm1fbmV4dCA6IG1fbmV4dCA9PSBv
Lm1fbmV4dCk7CisgICAgaWYgKCFvKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Ym9vbCByZXN1bHQgPSBtX2R1cmF0aW9uID09IG8tPm1fZHVyYXRpb24gJiYKKyAgICAgICAgICAg
ICAgICAgIG1fdGltaW5nRnVuY3Rpb24gPT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgorICAgICAg
ICAgICAgICAgICAgbV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgICAgICAgICAgICAgICBt
X3Byb3BlcnR5ID09IG8tPm1fcHJvcGVydHkgJiYgCisgICAgICAgICAgICAgICAgICBtX2R1cmF0
aW9uU2V0ID09IG8tPm1fZHVyYXRpb25TZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3RpbWlu
Z0Z1bmN0aW9uU2V0ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgCisgICAgICAgICAgICAg
ICAgICBtX2RlbGF5U2V0ID09IG8tPm1fZGVsYXlTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1f
cHJvcGVydHlTZXQgPT0gby0+bV9wcm9wZXJ0eVNldDsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisjZGVmaW5lIEZJTExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcCkgXAorZm9yIChj
dXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT50ZXN0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsg
fSBcCitpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsgXAorLyogV2UgbmVlZCB0byBmaWxsIGlu
IHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLiAqLyBcCitm
b3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgp
KSB7IFwKK2N1cnItPnByb3AgPSBwYXR0ZXJuLT5wcm9wOyBcCitwYXR0ZXJuID0gcGF0dGVybi0+
bmV4dCgpOyBcCitpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKSBcCitwYXR0ZXJuID0g
dGhpczsgXAorfSBcCiB9CiAKIHZvaWQgVHJhbnNpdGlvbjo6ZmlsbFVuc2V0UHJvcGVydGllcygp
CiB7CiAgICAgVHJhbnNpdGlvbiogY3VycjsKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYm
IGN1cnItPmlzRHVyYXRpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYg
KGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0
aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAg
Zm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQo
KSkgewotICAgICAgICAgICAgY3Vyci0+bV9kdXJhdGlvbiA9IHBhdHRlcm4tPm1fZHVyYXRpb247
Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYg
KHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0g
dGhpczsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJy
ICYmIGN1cnItPmlzUmVwZWF0Q291bnRTZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0g
ICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmls
bCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAg
ICAgICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHQoKSkgewotICAgICAgICAgICAgY3Vyci0+bV9yZXBlYXRDb3VudCA9IHBhdHRlcm4tPm1f
cmVwZWF0Q291bnQ7Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAg
ICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAg
ICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBmb3IgKGN1cnIg
PSB0aGlzOyBjdXJyICYmIGN1cnItPmlzVGltaW5nRnVuY3Rpb25TZXQoKTsgY3VyciA9IGN1cnIt
Pm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8v
IFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJu
IHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAgICAgICAgY3Vyci0+bV90aW1pbmdGdW5j
dGlvbiA9IHBhdHRlcm4tPm1fdGltaW5nRnVuY3Rpb247Ci0gICAgICAgICAgICBwYXR0ZXJuID0g
cGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0
dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNQcm9wZXJ0eVNldCgpOyBj
dXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsK
LSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGgg
dGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4g
PSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5t
X3Byb3BlcnR5ID0gcGF0dGVybi0+bV9wcm9wZXJ0eTsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBw
YXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0
ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQor
ICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgbV9kdXJhdGlvbik7CisgICAg
RklMTF9VTlNFVF9QUk9QRVJUWShpc1RpbWluZ0Z1bmN0aW9uU2V0LCBtX3RpbWluZ0Z1bmN0aW9u
KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzRGVsYXlTZXQsIG1fZGVsYXkpOworICAgIEZJ
TExfVU5TRVRfUFJPUEVSVFkoaXNQcm9wZXJ0eVNldCwgbV9wcm9wZXJ0eSk7CiB9CiAKIFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoKQpAQCAtODI1
LDcgKzgwMiw2IEBAIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6On5TdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhKCkKICAgICBkZWxldGUgbV9jb250ZW50OwogICAgIGRlbGV0ZSBtX2NvdW50ZXJE
aXJlY3RpdmVzOwogICAgIGRlbGV0ZSBtX2JveFNoYWRvdzsKLSAgICBkZWxldGUgbV90cmFuc2l0
aW9uOwogI2lmIEVOQUJMRShYQkwpCiAgICAgZGVsZXRlIGJpbmRpbmdVUkk7CiAjZW5kaWYKQEAg
LTE4NzEsMzIgKzE4NDcsNTggQEAgY29uc3QgVmVjdG9yPFN0eWxlRGFzaGJvYXJkUmVnaW9uPiYg
UmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkKIHZvaWQgUmVuZGVyU3R5bGU6OmFk
anVzdFRyYW5zaXRpb25zKCkKIHsKICAgICBpZiAodHJhbnNpdGlvbnMoKSkgewotICAgICAgICBp
ZiAodHJhbnNpdGlvbnMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICh0cmFuc2l0aW9ucygp
LT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewogICAgICAgICAgICAgY2xlYXJUcmFuc2l0aW9u
cygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVHJhbnNpdGlv
biogbmV4dDsKICAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwID0gYWNjZXNzVHJhbnNpdGlvbnMo
KTsgcDsgcCA9IG5leHQpIHsKLSAgICAgICAgICAgIG5leHQgPSBwLT5tX25leHQ7CisgICAgICAg
ICAgICBuZXh0ID0gcC0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5leHQ7Ci0gICAgICAgICAgICAgICAg
cC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBwLT5zZXROZXh0KDApOyAvLyByZW1vdmVz
IHRoZSByZWYsIHNvIG5leHQgZ2V0cyBkZWxldGVkCisgICAgICAgICAgICAgICAgbmV4dCA9IDA7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAK
KworICAgICAgICBpZiAoIXRyYW5zaXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAg
ICAgICAgLy8gUmVwZWF0IHBhdHRlcm5zIGludG8gbGF5ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBzb21l
IHByb3BlcnRpZXMgc2V0LgogICAgICAgICBhY2Nlc3NUcmFuc2l0aW9ucygpLT5maWxsVW5zZXRQ
cm9wZXJ0aWVzKCk7CisgICAgICAgIAorICAgICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5v
IGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBUaGlzIGlzIGFuIE8obl4yKSBhbGdvcml0aG0KKyAgICAg
ICAgLy8gYnV0IHRoZSBsaXN0cyB0ZW5kIHRvIGJlIHZlcnkgc2hvcnQsIHNvIGl0IGlzIHByb2Jh
Ymx5IG9rCisgICAgICAgIFRyYW5zaXRpb24qIHByZXZpID0gMDsKKyAgICAgICAgZm9yIChUcmFu
c2l0aW9uKiBwaSA9IGFjY2Vzc1RyYW5zaXRpb25zKCk7IHBpOyApIHsKKyAgICAgICAgICAgIFRy
YW5zaXRpb24qIG5leHRpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAgIGZvciAoVHJhbnNpdGlv
biogcGogPSBuZXh0aTsgcGo7ICkgeworICAgICAgICAgICAgICAgIGlmIChwaS0+cHJvcGVydHko
KSA9PSBwai0+cHJvcGVydHkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyB0b3NzIHBpCisg
ICAgICAgICAgICAgICAgICAgIHBpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmktPnNldE5leHQocGkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gcGk7CisgICAgICAgICAgICAg
ICAgICAgIG5leHRpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgcGogPSBuZXh0
aTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBwaiA9IHBqLT5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2
aSA9IHBpOworICAgICAgICAgICAgcGkgPSBuZXh0aTsKKyAgICAgICAgfQogICAgIH0KIH0KIAog
VHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zKCkKIHsKLSAgICBUcmFu
c2l0aW9uKiBsYXllciA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRp
b247CisgICAgVHJhbnNpdGlvbiogbGF5ZXIgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+bV90cmFuc2l0aW9uLmdldCgpOwogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSBuZXcgVHJhbnNpdGlvbigpOwot
ICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uOworICAgIHJldHVy
biByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uLmdldCgpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBlYmFiOGI2Li5iZTI5ZmJjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTEyNTcsNTggKzEyNTcsNjkgQEAg
cHJpdmF0ZToKICAgICBkb3VibGUgbV95MjsKIH07CiAKLXN0cnVjdCBUcmFuc2l0aW9uIHsKK2Ns
YXNzIFRyYW5zaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2l0aW9uPiB7CiBwdWJsaWM6
CiAgICAgVHJhbnNpdGlvbigpOwotICAgIH5UcmFuc2l0aW9uKCk7CiAKLSAgICBUcmFuc2l0aW9u
KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAgVHJhbnNpdGlvbiogbmV4dCgp
IHsgcmV0dXJuIG1fbmV4dDsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24qIG5leHQoKSBjb25zdCB7
IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBUcmFuc2l0aW9uKiBuZXh0KCkgeyByZXR1cm4g
bV9uZXh0LmdldCgpOyB9CiAKKyAgICBib29sIGlzRGVsYXlTZXQoKSBjb25zdCB7IHJldHVybiBt
X2RlbGF5U2V0OyB9CiAgICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9k
dXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNSZXBlYXRDb3VudFNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVwZWF0Q291bnRTZXQ7IH0KICAgICBib29sIGlzVGltaW5nRnVuY3Rpb25TZXQoKSBjb25z
dCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9CiAgICAgYm9vbCBpc1Byb3BlcnR5U2V0
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQotICAgIAotICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFtX2R1cmF0aW9uU2V0ICYmICFtX3JlcGVhdENvdW50U2V0ICYm
ICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0OyB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICghbV9kdXJhdGlvblNldCAmJiAh
bV9kZWxheVNldCAmJiAhbV90aW1pbmdGdW5jdGlvblNldCAmJiAhbV9wcm9wZXJ0eVNldCk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0VtcHR5T3JaZXJvRHVyYXRpb24oKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9kdXJhdGlvbiA9PSAwICYmIG1fZGVsYXkgPD0g
MCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhckRlbGF5KCkgeyBtX2RlbGF5U2V0ID0gZmFsc2U7
IH0KICAgICB2b2lkIGNsZWFyRHVyYXRpb24oKSB7IG1fZHVyYXRpb25TZXQgPSBmYWxzZTsgfQot
ICAgIHZvaWQgY2xlYXJSZXBlYXRDb3VudCgpIHsgbV9yZXBlYXRDb3VudFNldCA9IGZhbHNlOyB9
CiAgICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0aW9uKCkgeyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0g
ZmFsc2U7IH0KKwogICAgIHZvaWQgY2xlYXJQcm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZh
bHNlOyB9CiAKLSAgICBpbnQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9
Ci0gICAgaW50IHJlcGVhdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRDb3VudDsgfQor
ICAgIGRvdWJsZSBkZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXk7IH0KKyAgICBkb3VibGUg
ZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgY29uc3QgVGltaW5n
RnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlv
bjsgfQogICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KLSAg
ICAKLSAgICB2b2lkIHNldER1cmF0aW9uKGludCBkKSB7IG1fZHVyYXRpb24gPSBkOyBtX2R1cmF0
aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IGMpIHsgbV9yZXBl
YXRDb3VudCA9IGM7IG1fcmVwZWF0Q291bnRTZXQgPSB0cnVlOyB9CisKKyAgICB2b2lkIHNldERl
bGF5KGRvdWJsZSBjKSB7IG1fZGVsYXkgPSBjOyBtX2RlbGF5U2V0ID0gdHJ1ZTsgfQorICAgIHZv
aWQgc2V0RHVyYXRpb24oZG91YmxlIGQpIHsgQVNTRVJUKGQgPj0gMCk7IG1fZHVyYXRpb24gPSBk
OyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb24oY29u
c3QgVGltaW5nRnVuY3Rpb24mIGYpIHsgbV90aW1pbmdGdW5jdGlvbiA9IGY7IG1fdGltaW5nRnVu
Y3Rpb25TZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQgdCkgeyBtX3Byb3Bl
cnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldE5leHQoVHJhbnNp
dGlvbiogbikgeyBpZiAobV9uZXh0LmdldCgpICE9IG4pIHsgbV9uZXh0ID0gbjsgfSB9CiAKLSAg
ICB2b2lkIHNldE5leHQoVHJhbnNpdGlvbiogbikgeyBpZiAobV9uZXh0ICE9IG4pIHsgZGVsZXRl
IG1fbmV4dDsgbV9uZXh0ID0gbjsgfSB9Ci0KLSAgICBUcmFuc2l0aW9uJiBvcGVyYXRvcj0oY29u
c3QgVHJhbnNpdGlvbiYgbyk7ICAgIAorICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBU
cmFuc2l0aW9uJiBvKTsKICAgICBUcmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pOwogCi0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0OwotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAh
KCp0aGlzID09IG8pOwotICAgIH0KKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBv
ZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQorICAgIGJvb2wgdHJhbnNpdGlv
bnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiB0KSBjb25zdDsKKworICAgIC8vIHJldHVybiB0cnVl
IGV2ZXJ5IHRyYW5zaXRpb24gaW4gdGhlIGNoYWluIChkZWZpbmVkIGJ5IG1fbmV4dCkgbWF0Y2gg
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0IHsgcmV0dXJu
IHRyYW5zaXRpb25zTWF0Y2goJm8pICYmICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICgqbV9uZXh0
ID09ICpvLm1fbmV4dCkgOiAobV9uZXh0ID09IG8ubV9uZXh0KSk7IH0KKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsg
fQogCiAgICAgdm9pZCBmaWxsVW5zZXRQcm9wZXJ0aWVzKCk7CiAKLSAgICBpbnQgbV9kdXJhdGlv
bjsKLSAgICBpbnQgbV9yZXBlYXRDb3VudDsKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZHVyYXRp
b247CiAgICAgVGltaW5nRnVuY3Rpb24gbV90aW1pbmdGdW5jdGlvbjsKKyAgICBkb3VibGUgbV9k
ZWxheTsKICAgICBpbnQgbV9wcm9wZXJ0eTsKIAotICAgIGJvb2wgbV9kdXJhdGlvblNldDsKLSAg
ICBib29sIG1fcmVwZWF0Q291bnRTZXQ7Ci0gICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0Owot
ICAgIGJvb2wgbV9wcm9wZXJ0eVNldDsKLQotICAgIFRyYW5zaXRpb24qIG1fbmV4dDsKKyAgICBi
b29sIG1fZHVyYXRpb25TZXQgICAgICAgOiAxOworICAgIGJvb2wgbV90aW1pbmdGdW5jdGlvblNl
dCA6IDE7CisgICAgYm9vbCBtX2RlbGF5U2V0ICAgICAgICAgIDogMTsKKyAgICBib29sIG1fcHJv
cGVydHlTZXQgICAgICAgOiAxOworICAgIAorICAgIFJlZlB0cjxUcmFuc2l0aW9uPiBtX25leHQ7
CiB9OwogCiBjbGFzcyBTdHlsZVJlZmxlY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVJl
ZmxlY3Rpb24+IHsKQEAgLTEzODksNyArMTQwMCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZQ
dHI8U3R5bGVSZWZsZWN0aW9uPiBtX2JveFJlZmxlY3Q7CiAKLSAgICBUcmFuc2l0aW9uKiBtX3Ry
YW5zaXRpb247CisgICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbjsKIAogICAgIEZp
bGxMYXllciBtX21hc2s7CiAgICAgTmluZVBpZWNlSW1hZ2UgbV9tYXNrQm94SW1hZ2U7CkBAIC0y
MDMwLDkgKzIwNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLT5tX291
dGxpbmUuX29mZnNldDsKICAgICB9CiAgICAgU2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2hhZG93OyB9Ci0gICAgQ29sb3IgdGV4
dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJv
a2VDb2xvcjsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJl
dHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9yOyB9CiAgICAgZmxvYXQgdGV4
dFN0cm9rZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJv
a2VXaWR0aDsgfQotICAgIENvbG9yIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJl
SW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0Rmls
bENvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7
IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERh
dGEtPm9wYWNpdHk7IH0KICAgICBFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RUFwcGVhcmFuY2U+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FwcGVh
cmFuY2UpOyB9CiAgICAgRUJveEFsaWdubWVudCBib3hBbGlnbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEVCb3hBbGlnbm1lbnQ+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5mbGV4aWJsZUJv
eC0+YWxpZ24pOyB9CkBAIC0yMDg4LDcgKzIwOTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBBcHBs
ZS1zcGVjaWZpYyBwcm9wZXJ0eSBnZXR0ZXIgbWV0aG9kcwogICAgIFRyYW5zaXRpb24qIGFjY2Vz
c1RyYW5zaXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uOyB9CisgICAgY29u
c3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV90cmFuc2l0aW9uLmdldCgpOyB9CiAgICAgaW50IGxpbmVDbGFtcCgpIGNvbnN0
IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5saW5lQ2xhbXA7IH0KICAgICBib29sIHRl
eHRTaXplQWRqdXN0KCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTaXpl
QWRqdXN0OyB9CiAgICAgRVRleHRTZWN1cml0eSB0ZXh0U2VjdXJpdHkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxFVGV4dFNlY3VyaXR5PihyYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNlY3Vy
aXR5KTsgfQpAQCAtMjM1Miw3ICsyMzYzLDcgQEAgcHVibGljOgogICAgIC8vIEVuZCBDU1MzIFNl
dHRlcnMKICAgIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IHNldHRlcnMKLSAgICB2
b2lkIGNsZWFyVHJhbnNpdGlvbnMoKSB7IGRlbGV0ZSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS0+bV90cmFuc2l0aW9uOyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFu
c2l0aW9uID0gMDsgfQorICAgIHZvaWQgY2xlYXJUcmFuc2l0aW9ucygpIHsgcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IDA7IH0KICAgICB2b2lkIGluaGVyaXRU
cmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9uKiBwYXJlbnQpIHsgY2xlYXJUcmFuc2l0aW9ucygp
OyBpZiAocGFyZW50KSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9u
ID0gbmV3IFRyYW5zaXRpb24oKnBhcmVudCk7IH0KICAgICB2b2lkIGFkanVzdFRyYW5zaXRpb25z
KCk7CiAgICAgdm9pZCBzZXRMaW5lQ2xhbXAoaW50IGMpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJp
dGVkRGF0YSwgbGluZUNsYW1wLCBjKTsgfQpAQCAtMjUxMSwxMCArMjUyMiwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsVHJhbnNmb3JtT3JpZ2luWSgpIHsgcmV0dXJuIExl
bmd0aCg1MC4wLCBQZXJjZW50KTsgfQogICAgIAogICAgIC8vIEtlZXAgdGhlc2UgYXQgdGhlIGVu
ZC4KLSAgICBzdGF0aWMgaW50IGluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSB7IHJldHVybiAw
OyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlvblJlcGVhdENvdW50KCkgeyByZXR1
cm4gMTsgfQotICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uKCkgeyByZXR1cm4gVGltaW5nRnVuY3Rpb24oKTsgfQotICAgIHN0YXRpYyBpbnQg
aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpIHsgcmV0dXJuIGNBbmltYXRlQWxsOyB9CisgICAg
c3RhdGljIGZsb2F0IGluaXRpYWxEZWxheSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgZG91
YmxlIGluaXRpYWxEdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgVGltaW5nRnVu
Y3Rpb24gaW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkgeyByZXR1cm4gVGltaW5nRnVuY3Rpb24oKTsg
fQorICAgIHN0YXRpYyBpbnQgaW5pdGlhbFByb3BlcnR5KCkgeyByZXR1cm4gY0FuaW1hdGVBbGw7
IH0KICAgICBzdGF0aWMgaW50IGluaXRpYWxMaW5lQ2xhbXAoKSB7IHJldHVybiAtMTsgfQogICAg
IHN0YXRpYyBib29sIGluaXRpYWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0dXJuIHRydWU7IH0KICAg
ICBzdGF0aWMgRVRleHRTZWN1cml0eSBpbml0aWFsVGV4dFNlY3VyaXR5KCkgeyByZXR1cm4gVFNO
T05FOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22442</attachid>
            <date>2008-07-22 18:37:59 -0700</date>
            <delta_ts>2008-07-25 13:05:13 -0700</delta_ts>
            <desc>Patch update 2</desc>
            <filename>patch4-new-animation-controller-update2.patch</filename>
            <type>text/plain</type>
            <size>134385</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDg1OTJm
MjEuLmI1ZTNjOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTE4Nyw2ICsxODgsMTAgQEAgc3RhdGljIGNvbnN0IGludCBjb21wdXRlZFBy
b3BlcnRpZXNbXSA9IHsKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5LAorICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRp
bWluZ0Z1bmN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwK
QEAgLTEwNTUsNiArMTA2MCw2MyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9ucygp
OworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0
LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHQtPmRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EdXJhdGlvbjogeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRy
YW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7
CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh0LT5kdXJhdGlv
bigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246
IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0
ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAg
ICAgICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSB0LT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHRm
LngxKCksIHRmLnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCk7
CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNy
ZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogeworICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNp
dGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0
OyB0ID0gdC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+cHJv
cGVydHkoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVOb25lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9
PSBjQW5pbWF0ZUFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiYWxsIjsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGdl
dFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wKSk7CisgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5hbWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCJhbGwiLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgpAQCAt
MTExMiwxMSArMTE3NCw2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFk
ZGluZ1N0YXJ0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGFib3Zl
IGFyZSB1bmltcGxlbWVudGVkLgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFNWRykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCmluZGV4IDRjNWRmNGIuLjY0OTdmNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTI5NCw4
ICsxMjk0LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25SZXBlYXRDb3VudDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blRpbWluZ0Z1bmN0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJv
cGVydHk6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CkBAIC0xNzA5LDggKzE3MDks
OSBAQCB2b2lkIENTU1BhcnNlcjo6YWRkVHJhbnNpdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4m
IGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5z
aXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQgfTsKKyAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbiB9OwogICAgIGNvbnN0IGludCBudW1Qcm9wZXJ0aWVzID0gc2l6ZW9mKHBy
b3BlcnRpZXMpIC8gc2l6ZW9mKHByb3BlcnRpZXNbMF0pOwogICAgIAogICAgIFNob3J0aGFuZFNj
b3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbik7CkBAIC0yMjA2LDIw
ICsyMjA3LDIwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElk
LCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKQor
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZURlbGF5KCkKIHsKICAgICBDU1NQ
YXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVOb3cpCisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOwogICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZU
aW1lLCBtX3N0cmljdCkpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0
KTsKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlRHVyYXRpb24oKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUluZmluaXRl
KQotICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFs
dWUtPmlkKTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlcnxGTm9uTmVnLCBtX3N0
cmljdCkpCisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWV8Rk5vbk5lZywgbV9zdHJpY3Qp
KQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVl
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC0yMjQyLDcgKzIyNDMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUaW1pbmdG
dW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdQogICAg
IHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VUaW1pbmdGdW5jdGlvbigpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRWFz
ZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaW5lYXIgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
RWFzZUluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQgfHwgdmFsdWUtPmlkID09IENT
U1ZhbHVlRWFzZUluT3V0KQpAQCAtMjMwNiwxOCArMjMwNywxOCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVz
dWx0KQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1
cmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25E
dXJhdGlvbigpOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uRGVsYXk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRGVsYXkoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblJlcGVhdENv
dW50KCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25E
dXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlvbigp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUaW1p
bmdGdW5jdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zOTA3LDcgKzM5MDgsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSgpCiAKICAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEg
bGlzdCBvZiBmdW5jdGlvbmFsIHByaW1pdGl2ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVy
YXRpb25zLgogICAgIC8vIFdlIGNvbGxlY3QgYSBsaXN0IG9mIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVjaWZpZXMgYSBzaW5nbGUgb3BlcmF0aW9uLgotICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlv
biB8fCAhdmFsdWUtPmZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4
IDNmYjM5NzguLmMxMmE3MTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisr
KyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC04NCwxMSArODQsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBs
dmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKTsKIAogICAgICAgICB2b2lkIGFkZFRyYW5z
aXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBy
dmFsKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uRHVyYXRp
b24oKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUmVwZWF0
Q291bnQoKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb24oKTsKLSAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUoQ1NT
UGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpOworCisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRGVsYXkoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VEdXJhdGlvbigpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRp
bWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNp
dGlvblByb3BlcnR5KCk7CisKKyAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUo
Q1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpOwogICAgICAgICBib29s
IHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
ICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwog
ICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4gYi9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmluZGV4IDQ4OTJhZTEuLjUwMzk0ZTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KKysrIGIvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHlOYW1lcy5pbgpAQCAtMTQyLDExICsxNDIsNiBAQCB3b3JkLXNwYWNpbmcK
IHdvcmQtd3JhcAogei1pbmRleAogem9vbQotLXdlYmtpdC10cmFuc2l0aW9uCi0td2Via2l0LXRy
YW5zaXRpb24tZHVyYXRpb24KLS13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQotLXdlYmtpdC10
cmFuc2l0aW9uLXJlcGVhdC1jb3VudAotLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlv
bgogLXdlYmtpdC1hcHBlYXJhbmNlCiAtd2Via2l0LWJhY2tncm91bmQtY2xpcAogLXdlYmtpdC1i
YWNrZ3JvdW5kLWNvbXBvc2l0ZQpAQCAtMjI1LDYgKzIyMCwxMSBAQCB6b29tCiAtd2Via2l0LXRy
YW5zZm9ybS1vcmlnaW4KIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14CiAtd2Via2l0LXRyYW5z
Zm9ybS1vcmlnaW4teQorLXdlYmtpdC10cmFuc2l0aW9uCistd2Via2l0LXRyYW5zaXRpb24tZGVs
YXkKKy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLXByb3Bl
cnR5Cistd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LXVzZXItZHJh
ZwogLXdlYmtpdC11c2VyLW1vZGlmeQogLXdlYmtpdC11c2VyLXNlbGVjdApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAppbmRleCBjNzZkZTA1Li44MmUzNWM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcApAQCAtMTg5LDcgKzE4OSw3IEBAIGlmIChpc0luaGVyaXQpIHsgXAogICAgIGNvbnN0IFRy
YW5zaXRpb24qIGN1cnJQYXJlbnQgPSBtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpOyBcCiAg
ICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3VyclBhcmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwK
ICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsgXAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtl
IGEgbmV3IGxheWVyLiovIFwKKyAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyB0cmFu
c2l0aW9uLiovIFwKICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwK
ICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0g
XApAQCAtMjAwLDQyICsyMDAsNDMgQEAgaWYgKGlzSW5oZXJpdCkgeyBcCiAgICAgfSBcCiAgICAg
XAogICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsgXAotICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWlu
aW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisgICAgICAgIC8q
IFJlc2V0IGFueSByZW1haW5pbmcgdHJhbnNpdGlvbnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5
IHNldC4gKi8gXAogICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKICAgICB9IFwKLX0gZWxzZSBpZiAoaXNJ
bml0aWFsKSB7IFwKKyAgICByZXR1cm47IFwKK30gXAoraWYgKGlzSW5pdGlhbCkgeyBcCiAgICAg
VHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAot
ICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvbiMj
UHJvcCgpKTsgXAorICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFs
IyNQcm9wKCkpOyBcCiAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgY3Vy
ckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAogICAgICAgICBjdXJyQ2hp
bGQtPmNsZWFyIyNQcm9wKCk7IFwKKyAgICByZXR1cm47IFwKIH0KIAogI2RlZmluZSBIQU5ETEVf
VFJBTlNJVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgeyBcCiBIQU5ETEVfVFJBTlNJVElP
Tl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLWlmIChpc0luaGVyaXQgfHwgaXNJ
bml0aWFsKSBcCi0gICAgcmV0dXJuOyBcCiBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxl
LT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCiBUcmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBcCiBp
ZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAotICAgIC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQg
cHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQuICovIFwK
KyAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgdHJhbnNpdGlvbiwgY3Jl
YXRpbmcgbmV3IHRyYW5zaXRpb25zIGFzIG5lZWRlZC4gKi8gXAogICAgIENTU1ZhbHVlTGlzdCog
dmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOyBcCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAog
ICAgICAgICBpZiAoIWN1cnJDaGlsZCkgeyBcCi0gICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2Ug
YSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwKLSAgICAgICAgICAgIGN1cnJDaGls
ZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKLSAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChj
dXJyQ2hpbGQpOyBcCisgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyB0cmFuc2l0aW9uIHRv
IGhvbGQgdGhpcyB2YWx1ZSAqLyBcCisgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9u
KCk7IFwKKyAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKICAgICAgICAg
fSBcCi0gICAgICAgIG1hcFRyYW5zaXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOyBcCisgICAgICAgIG1hcCMjUHJvcChjdXJyQ2hpbGQs
IHZhbHVlTGlzdC0+aXRlbShpKSk7IFwKICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOyBc
CiAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiAgICAgfSBcCiB9IGVs
c2UgeyBcCi0gICAgbWFwVHJhbnNpdGlvbiMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAorICAg
IG1hcCMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAogICAgIGN1cnJDaGlsZCA9IGN1cnJDaGls
ZC0+bmV4dCgpOyBcCiB9IFwKIHdoaWxlIChjdXJyQ2hpbGQpIHsgXAotICAgIC8qIFJlc2V0IGFs
bCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKKyAg
ICAvKiBSZXNldCBhbGwgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9w
ZXJ0eSBzZXQuICovIFwKICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogfSB9CkBAIC00NzM1LDE4ICs0NzM2LDE4IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2
YWx1ZSkKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQogICAgICAgICAgICAgbV9zdHlsZS0+
aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAg
ICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUoZGVsYXksIERlbGF5LCB2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246
CiAgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKGR1cmF0aW9uLCBEdXJhdGlvbiwgdmFs
dWUpCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blJlcGVhdENvdW50OgotICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShyZXBlYXRDb3Vu
dCwgUmVwZWF0Q291bnQsIHZhbHVlKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHk6CisgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQ
cm9wZXJ0eSwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9W
QUxVRSh0aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAg
ICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcGVydHksIFByb3BlcnR5LCB2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgpAQCAtNDk4NywxMCArNDk4OCwx
MCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGxheWVyLT5zZXRZUG9zaXRpb24obCk7CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1cmF0aW9uKFRyYW5zaXRpb24q
IHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
RHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNp
dGlvbkR1cmF0aW9uKCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihSZW5kZXJT
dHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00
OTk5LDM1ICs1MDAwLDM2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1
cmF0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2CiAKICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9u
KGludCgxMDAwKnByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CiAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX01TKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihpbnQocHJp
bWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRE
dXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOwogfQogCi12
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25SZXBlYXRDb3VudChUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cERlbGF5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRSZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5z
aXRpb25SZXBlYXRDb3VudCgpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGVsYXkoUmVuZGVy
U3R5bGU6OmluaXRpYWxEZWxheSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlSW5maW5pdGUpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KC0xKTsK
LSAgICBlbHNlCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KGludChwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm93KQorICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheSgwKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0
RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZh
bHVlKCkvMTAwMC4wZik7CisgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSog
dmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRp
b24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1Zh
bHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9u
LT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbigpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQorICAgIAogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7CkBAIC01MDQ5LDE3ICs1MDUxLDE3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhCiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIGlmICh2YWx1ZS0+
aXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CiAgICAgICAgIENTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUqIHRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVGltaW5nRnVuY3Rp
b25WYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24o
VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgdGltaW5nRnVuY3Rpb24t
PngxKCksIHRpbWluZ0Z1bmN0aW9uLT55MSgpLCB0aW1pbmdGdW5jdGlvbi0+eDIoKSwgdGltaW5n
RnVuY3Rpb24tPnkyKCkpKTsKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
VHJhbnNpdGlvblByb3BlcnR5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1
ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwUHJvcGVydHkoVHJhbnNpdGlvbiogdHJhbnNp
dGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkg
PT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFByb3Bl
cnR5KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MDY3LDcgKzUwNjksNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9u
LCBDU1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
LSAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSk7
CisgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFn
ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAwMGI5ZTY4Li5jMzhiNjI5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCkBAIC0yMDQsMTAgKzIwNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQg
bWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1h
cEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1h
cFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9p
ZCBtYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7Ci0gICAg
ICAgIHZvaWQgbWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1
ZSopOwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NT
VmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBEZWxheShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsK
KyAgICAgICAgdm9pZCBtYXBEdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAg
ICAgdm9pZCBtYXBUaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAg
ICAgdm9pZCBtYXBQcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2
b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbiBiL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlS2V5d29yZHMuaW4KaW5kZXggM2NiZmI4NS4uYjM5ZTE1MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgorKysgYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtl
eXdvcmRzLmluCkBAIC01NjMsNiArNTYzLDExIEBAIHZpc3VhbAogbGluZXMKIAogIworIyBDU1Nf
UFJPUF9fV0VCS0lUX1RSQU5TSVRJT05fREVMQVkKKyMKK25vdworCisjCiAjIENTU19QUk9QX19X
RUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT04KICMKIGVhc2UKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBiL1dlYkNvcmUvY3NzL1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmNwcAppbmRleCA1NzY0OTZhLi5hNmU3MWNkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQotICAgIDogQ1NTVmFsdWVMaXN0KGZh
bHNlKQorICAgIDogQ1NTVmFsdWVMaXN0KHRydWUpCiAgICAgLCBtX3R5cGUob3ApCiB7CiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKaW5kZXggNTVmNTY0My4uMDVhN2RiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKKyNpbmNsdWRl
ICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgpAQCAtMjk3LDYg
KzI5OCw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXNYSFRNTCkK
ICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgICwgbV9pbkxvd0JhbmR3aWR0aERp
c3BsYXkoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fbG9hZENvbXBsZXRlKGZhbHNlKQogewogICAg
IG1fZG9jdW1lbnQucmVzZXRTa2lwcGluZ1JlZih0aGlzKTsKIApAQCAtMTE2Niw2ICsxMTY4LDEw
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVJlbmRlcmluZygpCiB7CiAgICAgaWYgKGhhc0NoYW5n
ZWRDaGlsZCgpKQogICAgICAgICByZWNhbGNTdHlsZShOb0NoYW5nZSk7CisgICAgCisgICAgLy8g
dGVsbCB0aGUgYW5pbWF0aW9uIGNvbnRyb2xsZXIgdGhhdCB0aGUgc3R5bGUgaXMgYXZhaWxhYmxl
IGFuZCBpdCBjYW4gc3RhcnQgYW5pbWF0aW9ucworICAgIGlmIChtX2ZyYW1lKQorICAgICAgICBt
X2ZyYW1lLT5hbmltYXRpb24oKS0+c3R5bGVBdmFpbGFibGUoKTsKIH0KIAogdm9pZCBEb2N1bWVu
dDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCkKQEAgLTE1NDcsNiArMTU1Myw4IEBAIHZvaWQg
RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgIGlmIChmKQogICAgICAgICBmLT5sb2FkZXIo
KS0+c3RhcnRJY29uTG9hZGVyKCk7CiAKKyAgICBtX2xvYWRDb21wbGV0ZSA9IHRydWU7CisKICAg
ICBkaXNwYXRjaEltYWdlTG9hZEV2ZW50c05vdygpOwogICAgIHRoaXMtPmRpc3BhdGNoV2luZG93
RXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChmKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDM0
YzExYS4uOWIyOTY2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03NTEsNiArNzUxLDkgQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpOwogICAgIHZvaWQgY2FuY2VsRm9jdXNBcHBl
YXJhbmNlVXBkYXRlKCk7CiAgICAgCisgICAgLy8gZm9yIGFuaW1hdGlvbnMgdG8ga25vdyB3aGV0
aGVyIHRoZXkgY2FuIHJ1biB5ZXQgb3Igbm90CisgICAgYm9vbCBsb2FkQ29tcGxldGUoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZTsgfQorICAgIAogICAgIC8vIEZGIG1ldGhvZCBmb3Ig
YWNjZXNzaW5nIHRoZSBzZWxlY3Rpb24gYWRkZWQgZm9yIGNvbXBhdGFiaWxpdHkuCiAgICAgRE9N
U2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICAKQEAgLTEwNDYsNiArMTA0OSw4
IEBAIHByaXZhdGU6CiAjaWYgVVNFKExPV19CQU5EV0lEVEhfRElTUExBWSkKICAgICBib29sIG1f
aW5Mb3dCYW5kd2lkdGhEaXNwbGF5OwogI2VuZGlmCisKKyAgICBib29sIG1fbG9hZENvbXBsZXRl
OyAgICAvLyBmb3IgYW5pbWF0aW9ucyB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZXkgY2FuIHJ1
biB5ZXQKIH07CiAKIGlubGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21p
Y1N0cmluZ0ltcGwqIGlkKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAzYmFkZWNmLi5mZDIwNDcxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcApAQCAtNzg0LDkgKzc4NCw5IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQogICAgICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2gg
IT0gTm9DaGFuZ2UpCisgICAgICAgIGlmIChjaCAhPSBOb0NoYW5nZSkgewogICAgICAgICAgICAg
c2V0UmVuZGVyU3R5bGUobmV3U3R5bGUpOwotICAgICAgICBlbHNlIGlmIChjaGFuZ2VkKCkgJiYg
KGRvY3VtZW50KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2Vu
ZGFudFJ1bGVzKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZCgpICYmIChzdHlsZUNo
YW5nZVR5cGUoKSAhPSBBbmltYXRpb25TdHlsZUNoYW5nZSkgJiYgKGRvY3VtZW50KCktPnVzZXNT
aWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkpKSB7CiAg
ICAgICAgICAgICAvLyBBbHRob3VnaCBubyBjaGFuZ2Ugb2NjdXJyZWQsIHdlIHVzZSB0aGUgbmV3
IHN0eWxlIHNvIHRoYXQgdGhlIGNvdXNpbiBzdHlsZSBzaGFyaW5nIGNvZGUgd29uJ3QgZ2V0CiAg
ICAgICAgICAgICAvLyBmb29sZWQgaW50byBiZWxpZXZpbmcgdGhpcyBzdHlsZSBpcyB0aGUgc2Ft
ZS4gIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIGRvY3VtZW50IGFjdHVhbGx5IHVzZXMK
ICAgICAgICAgICAgIC8vIHNpYmxpbmcvZGVzY2VuZGFudCBydWxlcywgc2luY2Ugb3RoZXJ3aXNl
IGl0IGlzbid0IHBvc3NpYmxlIGZvciBhbmNlc3RvciBzdHlsZXMgdG8gYWZmZWN0IHNoYXJpbmcg
b2YKQEAgLTc5NSwxMiArNzk1LDEzIEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlSW50ZXJu
YWwobmV3U3R5bGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldFJlbmRl
clN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN0eWxlQ2hh
bmdlVHlwZSgpID09IEFuaW1hdGlvblN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgIHNldFJlbmRl
clN0eWxlKG5ld1N0eWxlKTsKIAogICAgICAgICBuZXdTdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+
cmVuZGVyQXJlbmEoKSk7CiAKICAgICAgICAgaWYgKGNoYW5nZSAhPSBGb3JjZSkgewotICAgICAg
ICAgICAgaWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9zaXRp
b25hbFJ1bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA9PSBGdWxsU3R5bGVDaGFuZ2UpCisgICAg
ICAgICAgICBpZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBoYXNQb3Np
dGlvbmFsUnVsZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkKICAg
ICAgICAgICAgICAgICBjaGFuZ2UgPSBGb3JjZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBjaGFuZ2UgPSBjaDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMu
aCBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAppbmRleCA4NzJjNmNmLi5kMjg5ODI5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKKysrIGIvV2ViQ29yZS9kb20vRXZlbnRO
YW1lcy5oCkBAIC0xMTksNiArMTE5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgbmFtZXNwYWNl
IEV2ZW50TmFtZXMgewogICAgIG1hY3JvKHByb2dyZXNzKSBcCiAgICAgbWFjcm8oc3RhbGxlZCkg
XAogICAgIFwKKyAgICBtYWNybyh3ZWJraXRBbmltYXRpb25FbmQpIFwKKyAgICBtYWNybyh3ZWJr
aXRBbmltYXRpb25TdGFydCkgXAorICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbikg
XAorICAgIFwKKyAgICBtYWNybyh3ZWJraXRUcmFuc2l0aW9uRW5kKSBcCisgICAgXAogLy8gZW5k
IG9mIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSAogCiAjaWZuZGVmIERPTV9FVkVOVF9OQU1FU19I
SURFX0dMT0JBTFMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvV2ViQ29yZS9k
b20vTm9kZS5jcHAKaW5kZXggYmJlYmE5NC4uZDAwMWZkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTM3Miw3ICszNzIsNyBA
QCB2b2lkIE5vZGU6OnNldENoYW5nZWQoU3R5bGVDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCiAgICAg
aWYgKChjaGFuZ2VUeXBlICE9IE5vU3R5bGVDaGFuZ2UpICYmICFhdHRhY2hlZCgpKSAvLyBjaGFu
Z2VkIGNvbXBhcmVkIHRvIHdoYXQ/CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghKGNoYW5n
ZVR5cGUgPT0gSW5saW5lU3R5bGVDaGFuZ2UgJiYgbV9zdHlsZUNoYW5nZSA9PSBGdWxsU3R5bGVD
aGFuZ2UpKQorICAgIGlmICghKGNoYW5nZVR5cGUgPT0gSW5saW5lU3R5bGVDaGFuZ2UgJiYgKG1f
c3R5bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlIHx8IG1fc3R5bGVDaGFuZ2UgPT0gQW5pbWF0
aW9uU3R5bGVDaGFuZ2UpKSkKICAgICAgICAgbV9zdHlsZUNoYW5nZSA9IGNoYW5nZVR5cGU7CiAK
ICAgICBpZiAobV9zdHlsZUNoYW5nZSAhPSBOb1N0eWxlQ2hhbmdlKSB7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Ob2RlLmggYi9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggODMwYWJmNS4uZWRm
YzZjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1dlYkNvcmUvZG9tL05v
ZGUuaApAQCAtNjEsNyArNjEsNyBAQCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGE7CiAKIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNo
YW5nZSwgSW5saW5lU3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSB9OworZW51bSBTdHlsZUNo
YW5nZVR5cGUgeyBOb1N0eWxlQ2hhbmdlLCBJbmxpbmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hh
bmdlLCBBbmltYXRpb25TdHlsZUNoYW5nZSB9OwogCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBET0NV
TUVOVF9QT1NJVElPTl9FUVVJVkFMRU5UID0gMHgwMDsKIGNvbnN0IHVuc2lnbmVkIHNob3J0IERP
Q1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9IDB4MDE7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgYi9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAK
aW5kZXggZTViZDNjMS4uOThmMzkyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZFBhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcApAQCAtMTI3LDcg
KzEyNyw3IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlKiBwYWdlKQogICAgICAgICBt
X2RvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnVucGF1c2VBbmltYXRpb25zKCk7CiAj
ZW5kaWYKIAotICAgIG1haW5GcmFtZS0+YW5pbWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnMoKTsK
KyAgICBtYWluRnJhbWUtPmFuaW1hdGlvbigpLT5yZXN1bWVBbmltYXRpb25zKG1fZG9jdW1lbnQu
Z2V0KCkpOwogCiAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91c2VQcmVzc05v
ZGUobW91c2VQcmVzc05vZGUoKSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IDE2NzdmYjIuLjgyOGMzMGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9B
bmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVy
LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCkBAIC00Myw2ICs0NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIAorc3RhdGlj
IHZvaWQgc2V0Q2hhbmdlZChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCAobm9k
ZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAg
IG5vZGUtPnNldENoYW5nZWQoQW5pbWF0aW9uU3R5bGVDaGFuZ2UpOworfQorCiAvLyBUaGUgZXBz
aWxvbiB2YWx1ZSB3ZSBwYXNzIHRvIFVuaXRCZXppZXI6OnNvbHZlIGdpdmVuIHRoYXQgdGhlIGFu
aW1hdGlvbiBpcyBnb2luZyB0byBydW4gb3ZlciB8ZHVyfCBzZWNvbmRzLiBUaGUgbG9uZ2VyIHRo
ZQogLy8gYW5pbWF0aW9uLCB0aGUgbW9yZSBwcmVjaXNpb24gd2UgbmVlZCBpbiB0aGUgdGltaW5n
IGZ1bmN0aW9uIHJlc3VsdCB0byBhdm9pZCB1Z2x5IGRpc2NvbnRpbnVpdGllcy4KIHN0YXRpYyBp
bmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pIHsgcmV0dXJuIDEuIC8g
KDIwMC4gKiBkdXJhdGlvbik7IH0KQEAgLTU1LDEzNyArNjMsNzQ5IEBAIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5LCBk
b3VibGUgcDJ4CiAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRp
b24pKTsKIH0KIAotY2xhc3MgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb247CisjcHJhZ21hIG1h
cmsgLQogCi1jbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1w
dWJsaWM6Ci0gICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiopOwotICAgIH5J
bXBsaWNpdEFuaW1hdGlvbigpOworY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOworY2xhc3MgQW5p
bWF0aW9uQmFzZTsKIAotICAgIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlv
biosIFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKK2NsYXNzIEFuaW1h
dGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uVGltZXJCYXNlKEFuaW1hdGlv
bkJhc2UqIGFuaW0pCisgICAgOiBtX3RpbWVyKHRoaXMsICZBbmltYXRpb25UaW1lckJhc2U6OnRp
bWVyRmlyZWQpCisgICAgLCBtX2FuaW0oYW5pbSkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3Rh
cnRPbmVTaG90KDApOworICAgIH0KKyAgICB2aXJ0dWFsIH5BbmltYXRpb25UaW1lckJhc2UoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0PTAp
CisgICAgeworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjYW5jZWxUaW1lcigpCisgICAgeworICAgICAgICBtX3RpbWVyLnN0b3Ao
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uVGltZXJCYXNlPiopID0gMDsKKyAgICAKK3ByaXZhdGU6CisgICAgVGltZXI8QW5pbWF0aW9u
VGltZXJCYXNlPiBtX3RpbWVyOworICAgIAorcHJvdGVjdGVkOgorICAgIEFuaW1hdGlvbkJhc2Uq
IG1fYW5pbTsKK307CiAKLSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KiBmcm9tLCBSZW5kZXJTdHlsZSogdG8pOworY2xhc3MgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVy
IDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uRXZl
bnREaXNwYXRjaGVyKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAorICAgIDogQW5pbWF0aW9uVGltZXJC
YXNlKGFuaW0pCisgICAgLCBtX3Byb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCkKKyAgICAsIG1f
cmVzZXQoZmFsc2UpCisgICAgLCBtX2VsYXBzZWRUaW1lKC0xKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB+QW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3RhcnRUaW1lcihIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1l
KQorICAgIHsKKyAgICAgICAgbV9lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgbV9uYW1lID0g
bmFtZTsKKyAgICAgICAgbV9wcm9wZXJ0eSA9IHByb3BlcnR5OworICAgICAgICBtX3Jlc2V0ID0g
cmVzZXQ7CisgICAgICAgIG1fZXZlbnRUeXBlID0gZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBz
ZWRUaW1lID0gZWxhcHNlZFRpbWU7CisgICAgICAgIEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRU
aW1lcigpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxB
bmltYXRpb25UaW1lckJhc2U+Kik7CiAgICAgCi0gICAgZG91YmxlIHByb2dyZXNzKCkgY29uc3Q7
Citwcml2YXRlOgorICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9lbGVtZW50OworICAgIEF0b21p
Y1N0cmluZyBtX25hbWU7CisgICAgaW50IG1fcHJvcGVydHk7CisgICAgYm9vbCBtX3Jlc2V0Owor
ICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKKyAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsK
K307CiAKLSAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9Citj
bGFzcyBBbmltYXRpb25UaW1lckNhbGxiYWNrIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7
CitwdWJsaWM6CisgICAgQW5pbWF0aW9uVGltZXJDYWxsYmFjayhBbmltYXRpb25CYXNlKiBhbmlt
KSAKKyAgICA6IEFuaW1hdGlvblRpbWVyQmFzZShhbmltKQorICAgICwgbV9lbGFwc2VkVGltZSgw
KQorICAgIHsgfQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQ2FsbGJhY2soKSB7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+
Kik7CisgICAgCisgICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0LCBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICAgICAg
bV9ldmVudFR5cGUgPSBldmVudFR5cGU7CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2Vk
VGltZTsKKyAgICAgICAgQW5pbWF0aW9uVGltZXJCYXNlOjpzdGFydFRpbWVyKHRpbWVvdXQpOwor
ICAgIH0KICAgICAKLSAgICBib29sIGZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9maW5pc2hl
ZDsgfQotICAgIHZvaWQgc2V0RmluaXNoZWQoYm9vbCBmKSB7IG1fZmluaXNoZWQgPSBmOyB9Citw
cml2YXRlOgorICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKKyAgICBkb3VibGUgbV9lbGFw
c2VkVGltZTsKK307CisKKyNwcmFnbWEgbWFyayAtCiAgICAgCi0gICAgYm9vbCBzdGFsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhbGU7IH0KLSAgICB2b2lkIHNldFN0YWxlKCkgeyBtX3N0YWxlID0g
dHJ1ZTsgfQorY2xhc3MgSW1wbGljaXRBbmltYXRpb247CitjbGFzcyBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTsKKworLy8gQSBDb21wb3NpdGVBbmltYXRpb24gcmVwcmVzZW50cyBhIGNvbGxl
Y3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0CisvLyBhcmUgcnVubmluZywgc3VjaCBhcyBhIG51bWJl
ciBvZiBwcm9wZXJ0aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KIAorY2xhc3MgQ29tcG9zaXRl
QW5pbWF0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVB
bmltYXRpb24oYm9vbCBzdXNwZW5kZWQsIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBhbmlt
YXRpb25Db250cm9sbGVyKQorICAgIDogbV9zdXNwZW5kZWQoc3VzcGVuZGVkKQorICAgICwgbV9h
bmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgLCBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycygwKQorICAgIHsgfQorICAgIAorICAgIH5Db21wb3NpdGVBbmltYXRp
b24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdHJhbnNpdGlvbnMpOworICAg
IH0KKyAgICAKKyAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIAorICAg
IHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcpOworICAgIGJvb2wgYW5pbWF0aW5n
KCk7CisgICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9wKTsgfQorICAgIAorICAgIHZv
aWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKKyAgICAK
KyAgICB2b2lkIHJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCByZXNl
dEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgCisgICAgdm9pZCBjbGVhbnVwRmluaXNo
ZWRBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBib29sIHN1c3BlbmRl
ZCgpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KKyAgICAKKyAgICB2b2lkIG92
ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7CisgICAgdm9pZCByZXN1bWVP
dmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7CisgICAgCisgICAgdm9p
ZCBzdHlsZUF2YWlsYWJsZSgpOworICAgIAorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShp
bnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlQXZh
aWxhYmxlKGJvb2wgd2FpdGluZyk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0
aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgdHdv
IHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBSZW5kZXJTdHlsZSogbV9mcm9tU3R5
bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fdG9TdHlsZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBJbXBsaWNpdEFuaW1hdGlvbio+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7CisgICAgCisg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCAgIG1fdHJhbnNpdGlvbnM7CisgICAgYm9vbCAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3VzcGVuZGVkOworICAgIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlKiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CisgICAgdWludDMyX3QgICAgICAgICAg
ICAgICAgICAgIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzOworfTsKIAotICAgIGludCBtX3By
b3BlcnR5OwotICAgIFRpbWluZ0Z1bmN0aW9uIG1fZnVuY3Rpb247Ci0gICAgZG91YmxlIG1fZHVy
YXRpb247CisjcHJhZ21hIG1hcmsgLQogCi0gICAgaW50IG1fcmVwZWF0Q291bnQ7CitjbGFzcyBB
bmltYXRpb25CYXNlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRp
b25CYXNlKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pOyAgICAKKyAgICB2aXJ0dWFsIH5Bbmlt
YXRpb25CYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFS
VF9XQUlUX1NUWUxFX0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRp
bmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgfQorICAgIAorICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIGRvdWJsZSBzdGFy
dFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAgIGRvdWJsZSBkdXJhdGlv
bigpIGNvbnN0ICB7IHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsgfQorICAgIAorICAg
IHZvaWQgY2FuY2VsVGltZXJzKCkKKyAgICB7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxs
YmFjay5jYW5jZWxUaW1lcigpOworICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlci5j
YW5jZWxUaW1lcigpOworICAgIH0KKyAgICAKKyAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0
aW9ucyBnbyB0aHJvdWdoIHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJU
RUQgc3RhdGUKKyAgICAvLyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1h
eSBub3QgcmVxdWlyZSBkZWZlcnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KKyAgICAv
LyBJZiBzbywgd2Ugc3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVj
ZWl2ZWQgKGFuZCBpdCByZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4KKyAgICAvLyBPdGhlcndpc2Us
IHdlIHVzZSB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlh
dGVseSB0byB0aGUgTE9PUElORyBvcgorICAgIC8vIEVORElORyBzdGF0ZS4KKyAgICBlbnVtIEFu
aW1TdGF0ZSB7IAorICAgICAgICBTVEFURV9ORVcsICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
aW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVubmluZyB5ZXQKKyAgICAgICAg
U1RBVEVfU1RBUlRfV0FJVF9USU1FUiwgICAgICAgICAvLyBzdGFydCB0aW1lciBydW5uaW5nLCB3
YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxF
LCAgIC8vIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwIHNvIHdlIGNhbiBzdGFydCBhbmltYXRpb25z
CisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UsICAgICAgLy8gYW5pbWF0aW9uIHN0
YXJ0ZWQsIHdhaXRpbmcgZm9yIHJlc3BvbnNlCisgICAgICAgIFNUQVRFX0xPT1BJTkcsICAgICAg
ICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBsb29w
IHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAgU1RBVEVfRU5ESU5HLCAg
ICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcs
IGVuZCB0aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX1BBVVNF
RF9XQUlUX1RJTUVSLCAgICAgICAgLy8gYW5pbWF0aW9uIGluIHBhdXNlIG1vZGUgd2hlbiBhbmlt
YXRpb24gc3RhcnRlZAorICAgICAgICBTVEFURV9QQVVTRURfV0FJVF9SRVNQT05TRSwgICAgIC8v
IGFuaW1hdGlvbiBwYXVzZWQgd2hlbiBpbiBTVEFSVElORyBzdGF0ZQorICAgICAgICBTVEFURV9Q
QVVTRURfUlVOLCAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQgd2hlbiBpbiBMT09Q
SU5HIG9yIEVORElORyBzdGF0ZQorICAgICAgICBTVEFURV9ET05FICAgICAgICAgICAgICAgICAg
ICAgIC8vIGVuZCB0aW1lciBmaXJlZCwgYW5pbWF0aW9uIGZpbmlzaGVkIGFuZCByZW1vdmVkCisg
ICAgfTsKKyAgICAKKyAgICBlbnVtIEFuaW1TdGF0ZUlucHV0IHsKKyAgICAgICAgU1RBVEVfSU5Q
VVRfTUFLRV9ORVcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0
ZQorICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sICAgIC8vIGFuaW1hdGlvbiBy
ZXF1ZXN0cyBhIHN0YXJ0CisgICAgICAgIFNUQVRFX0lOUFVUX1JFU1RBUlRfQU5JTUFUSU9OLCAg
Ly8gZm9yY2UgYSByZXN0YXJ0IGZyb20gYW55IHN0YXRlCisgICAgICAgIFNUQVRFX0lOUFVUX1NU
QVJUX1RJTUVSX0ZJUkVELCAgLy8gc3RhcnQgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5Q
VVRfU1RZTEVfQVZBSUxBQkxFLCAgICAgICAgLy8gc3R5bGUgaXMgc2V0dXAsIHJlYWR5IHRvIHN0
YXJ0IGFuaW1hdGluZworICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgICAgIC8v
IG1fc3RhcnRUaW1lIHdhcyBzZXQKKyAgICAgICAgU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJF
RCwgICAvLyBsb29wIHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX0VORF9USU1FUl9G
SVJFRCwgICAgLy8gZW5kIHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX1BBVVNFX09W
RVJSSURFLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQorICAgICAg
ICBTVEFURV9JTlBVVF9SRVNVTUVfT1ZFUlJJREUsICAgIC8vIHJlc3VtZSBhbiBvdmVycmlkZGVu
IGFuaW1hdGlvbgorICAgICAgICBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcsIC8vIHBs
YXkgc3RhdGUgcGF1c2VkIC0+IHJ1bm5pbmcKKyAgICAgICAgU1RBVEVfSU5QVVRfUExBWV9TVEFU
RV9QQVVTRUQsICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1c2VkCisgICAgICAgIFNUQVRF
X0lOUFVUX0VORF9BTklNQVRJT04gICAgICAgLy8gZm9yY2UgYW4gZW5kIGZyb20gYW55IHN0YXRl
CisgICAgfTsKKyAgICAKKyAgICAvLyBDYWxsZWQgd2hlbiBhbmltYXRpb24gaXMgaW4gTkVXIHN0
YXRlIHRvIHN0YXJ0IGFuaW1hdGlvbgorICAgIHZvaWQgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1T
dGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pOworICAgIAorICAgIC8vIEFuaW1hdGlvbiBo
YXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKKyAgICAvLyBUaGlzIGlzIGEgY2Fs
bGJhY2sgYW5kIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiBSZW5kZXJPYmplY3Q6OnN0YXJ0QW5pbWF0
aW9uKCkgb3IgUmVuZGVyT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oKSAKKyAgICAvLyByZXR1cm5z
IHRydWUuIElmIFJlbmRlck9iamVjdDo6CisgICAgdm9pZCBvbkFuaW1hdGlvblN0YXJ0UmVzcG9u
c2UoZG91YmxlIHN0YXJ0VGltZSk7CisgICAgCisgICAgLy8gQ2FsbGVkIHRvIGNoYW5nZSB0byBv
ciBmcm9tIHBhdXNlZCBzdGF0ZQorICAgIHZvaWQgdXBkYXRlUGxheVN0YXRlKGJvb2wgcnVubmlu
Zyk7CisgICAgYm9vbCBwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b247IH0KKyAgICAKKyAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9h
bmltU3RhdGUgPT0gU1RBVEVfTkVXIHx8IG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRf
VElNRVI7IH0KKyAgICBib29sIHByZWFjdGl2ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gbV9hbmlt
U3RhdGUgPT0gU1RBVEVfTkVXIHx8CisgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0gU1RBVEVf
U1RBUlRfV0FJVF9USU1FUiB8fAorICAgICAgICAgICAgIG1fYW5pbVN0YXRlID09IFNUQVRFX1NU
QVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFIHx8CisgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0g
U1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICB9CisgICAgYm9vbCBwb3N0YWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfRE9ORTsgfQorICAgIGJvb2wgYWN0
aXZlKCkgY29uc3QgeyByZXR1cm4gIXBvc3RhY3RpdmUoKSAmJiAhcHJlYWN0aXZlKCk7IH0KKyAg
ICBib29sIHJ1bm5pbmcoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZSA8IDA7IH0KKyAgICBi
b29sIGlzbmV3KCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXOyB9Cisg
ICAgYm9vbCB3YWl0aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUg
PT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsgfQorICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxl
QXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJ
VF9TVFlMRV9BVkFJTEFCTEU7IH0KKyAgICBib29sIHdhaXRpbmdGb3JFbmRFdmVudCgpIGNvbnN0
ICB7IHJldHVybiBtX3dhaXRpbmdGb3JFbmRFdmVudDsgfQorICAgIAorICAgIC8vICJhbmltYXRp
bmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyBhIHRpbWVy
IHRvIGtlZXAgZmlyaW5nCisgICAgLy8gKGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCisgICAg
dm9pZCBzZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZyA9IHRydWUpIHsgbV9hbmltYXRpbmcg
PSBpbkFuaW1hdGluZzsgfQorICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpbmc7IH0KKyAgICAKKyAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3Vi
bGUgb2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20g
PSAwLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAg
dm9pZCBhbmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgdm9pZCBhbmltYXRpb25FdmVudERpc3Bh
dGNoZXJGaXJlZChIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2Vk
VGltZSk7CisgICAgCisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgVHJhbnNpdGlvbiog
YW5pbSkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb24tPnRyYW5zaXRpb25zTWF0Y2goYW5pbSk7
IH0KKyAgICAKKyAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiBhbmltKSB7
IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxUcmFuc2l0aW9uKj4oYW5pbSk7IH0KKyAgICAKKyAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdp
bGwgb25seSBiZSB0aGUgY2FzZSBmb3IKKyAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlz
IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBmb3JjZQorICAgIC8v
IHNldCB0aGUgc3RhcnQgdGltZS4gSWYgYW4gYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4sIGl0IHdp
bGwgcHJvYmFibHkgbm90IGdldAorICAgIC8vIGJhY2sgdGhlIFNUQVJUX1RJTUUgZXZlbnQuCisg
ICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IAorICAgIC8vIERvZXMgdGhpcyBhbmltYXRpb24vdHJhbnNpdGlvbiBpbnZvbHZlIHRoZSBnaXZl
biBwcm9wZXJ0eT8KKyAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0
eSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHko
aW50IHByb3BlcnR5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICghd2FpdGluZ1RvU3Rh
cnQoKSAmJiAhcG9zdGFjdGl2ZSgpKSAmJiBhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpOworICAg
IH0KKyAgICAgICAgCitwcm90ZWN0ZWQ6CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnRGb3JFdmVu
dERpc3BhdGNoKCkKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdC0+bm9kZSgpICYmIG1fb2Jq
ZWN0LT5ub2RlKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG1fb2JqZWN0LT5ub2RlKCkpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIHsgfQorICAgIAor
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKCkgeyByZXR1cm4gbV9j
b21wQW5pbTsgfQorICAgIAorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgd2hlbiB0aGUgY29ycmVz
cG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBkbyBhbnkgZXh0cmEgd29yawor
ICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkgeyB9
CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBlbGFwc2VkVGlt
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGlt
ZSkgeyB9CisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29sIHJl
c2V0KSB7IH0KKyAgICAKKyAgICB2b2lkIHByaW1lRXZlbnRUaW1lcnMoKTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBBbmltU3RhdGUgbV9hbmltU3RhdGU7CiAgICAgaW50IG1faXRlcmF0aW9uOwog
ICAgIAotICAgIGJvb2wgbV9maW5pc2hlZDsgICAgCisgICAgYm9vbCBtX2FuaW1hdGluZzsgICAg
ICAgLy8gdHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMgY29udGludWFsIHRpbWVyIGZpcmlu
ZworICAgIGJvb2wgbV93YWl0ZWRGb3JSZXNwb25zZTsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7
Ci0gICAgYm9vbCBtX3BhdXNlZDsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAgUmVuZGVy
T2JqZWN0KiAgIG1fb2JqZWN0OwogICAgIAotICAgIGJvb2wgbV9zdGFsZTsKKyAgICBBbmltYXRp
b25UaW1lckNhbGxiYWNrIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjazsKKyAgICBBbmltYXRpb25F
dmVudERpc3BhdGNoZXIgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXI7CisgICAgUmVmUHRyPFRy
YW5zaXRpb24+IG1fYW5pbWF0aW9uOworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wQW5p
bTsKKyAgICBib29sIG1fd2FpdGluZ0ZvckVuZEV2ZW50OwogfTsKIAotY2xhc3MgQ29tcG9zaXRl
SW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIH5D
b21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbigpIHsgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9u
cyk7IH0KLQotICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7Ci0KLSAgICBib29s
IGFuaW1hdGluZygpIGNvbnN0OworI3ByYWdtYSBtYXJrIC0KIAotICAgIHZvaWQgcmVzZXQoUmVu
ZGVyT2JqZWN0Kik7CitjbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25C
YXNlIHsKK3B1YmxpYzoKKyAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiB0
cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNv
bXBBbmltKQorICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJlciwgY29tcEFu
aW0pCisgICAgLCBtX3Byb3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCisgICAgLCBtX292
ZXJyaWRkZW4oZmFsc2UpCisgICAgLCBtX2Zyb21TdHlsZSgwKQorICAgICwgbV90b1N0eWxlKDAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgICAg
ICAKKyAgICAgICAgLy8gSWYgd2Ugd2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5l
ZWQgdG8gZmluaXNoIHRoZSBhbmltYXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAorICAgICAgICAv
LyBhbmltYXRpb25zIHN0aWNrIGFyb3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisgICAgICAgIGlm
ICh3YWl0aW5nRm9yRW5kRXZlbnQoKSAmJiBtX29iamVjdCkKKyAgICAgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBp
biB0aGUgYmFzZSBjbGFzcyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCisg
ICAgICAgIGlmICghcG9zdGFjdGl2ZSgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KFNUQVRFX0lOUFVUX0VORF9BTklNQVRJT04sIC0xKTsgICAgIAorICAgIH0KKyAgICAKKyAgICBp
bnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgCisgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGVuZEFuaW1hdGlvbihib29sIHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20gPSAwLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKTsKKyAgICAKKyAgICB2b2lk
IHNldE92ZXJyaWRkZW4oYm9vbCBiKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwg
Ym9vbCBhZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBib29s
IGhhc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Cisg
ICAgCisgICAgYm9vbCBpc1RhcmdldFByb3BlcnR5RXF1YWwoaW50IHByb3AsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSk7CiAKKyAgICB2b2lkIGJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50
IHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpOworICAgIAorcHJvdGVjdGVkOgorICAg
IGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBp
bkxpc3RlbmVyVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnQo
KS0+aGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgaW5FdmVudFR5cGUsIGRv
dWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICAKIHByaXZhdGU6Ci0gICAgSGFzaE1hcDxpbnQsIElt
cGxpY2l0QW5pbWF0aW9uKj4gbV9hbmltYXRpb25zOworICAgIGludCBtX3Byb3BlcnR5OworICAg
IGJvb2wgbV9vdmVycmlkZGVuOworICAgIAorICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2Ug
YXJlIGJsZW5kaW5nLgorICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKKyAgICBSZW5kZXJT
dHlsZSogbV90b1N0eWxlOwogfTsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0
aW9uKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24pCi06IG1fZnJvbVN0eWxlKDApCi0sIG1f
dG9TdHlsZSgwKQotLCBtX3Byb3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCi0sIG1fZnVu
Y3Rpb24odHJhbnNpdGlvbi0+dGltaW5nRnVuY3Rpb24oKSkKLSwgbV9kdXJhdGlvbih0cmFuc2l0
aW9uLT5kdXJhdGlvbigpIC8gMTAwMC4wKQotLCBtX3JlcGVhdENvdW50KHRyYW5zaXRpb24tPnJl
cGVhdENvdW50KCkpCi0sIG1faXRlcmF0aW9uKDApCi0sIG1fZmluaXNoZWQoZmFsc2UpCi0sIG1f
c3RhcnRUaW1lKGN1cnJlbnRUaW1lKCkpCi0sIG1fcGF1c2VkKGZhbHNlKQotLCBtX3BhdXNlVGlt
ZShtX3N0YXJ0VGltZSkKLSwgbV9zdGFsZShmYWxzZSkKKyNwcmFnbWEgbWFyayAtCisKK3ZvaWQg
QW5pbWF0aW9uVGltZXJDYWxsYmFjazo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJh
c2U+KikKIHsKKyAgICBtX2FuaW0tPmFuaW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJlZChtX2V2ZW50
VHlwZSwgbV9lbGFwc2VkVGltZSk7CiB9CiAKLUltcGxpY2l0QW5pbWF0aW9uOjp+SW1wbGljaXRB
bmltYXRpb24oKQordm9pZCBBbmltYXRpb25FdmVudERpc3BhdGNoZXI6OnRpbWVyRmlyZWQoVGlt
ZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCiB7Ci0gICAgQVNTRVJUKCFtX2Zyb21TdHlsZSAmJiAh
bV90b1N0eWxlKTsKKyAgICBtX2FuaW0tPmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVkKG1f
ZWxlbWVudC5nZXQoKSwgbV9uYW1lLCBtX3Byb3BlcnR5LCBtX3Jlc2V0LCBtX2V2ZW50VHlwZSwg
bV9lbGFwc2VkVGltZSk7CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBmcm9tLCBSZW5kZXJTdHlsZSogdG8pCisj
cHJhZ21hIG1hcmsgLQorCisjcHJhZ21hIG1hcmsgLQorICAgIAorQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uQmFzZShjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQorOiBtX2FuaW1TdGF0ZShTVEFU
RV9ORVcpCissIG1faXRlcmF0aW9uKDApCissIG1fYW5pbWF0aW5nKGZhbHNlKQorLCBtX3dhaXRl
ZEZvclJlc3BvbnNlKGZhbHNlKQorLCBtX3N0YXJ0VGltZSgwKQorLCBtX3BhdXNlVGltZSgtMSkK
KywgbV9vYmplY3QocmVuZGVyZXIpCissIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjayhjb25zdF9j
YXN0PEFuaW1hdGlvbkJhc2UqPih0aGlzKSkKKywgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXIo
Y29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0aW9uKGNvbnN0X2Nh
c3Q8VHJhbnNpdGlvbio+KHRyYW5zaXRpb24pKQorLCBtX2NvbXBBbmltKGNvbXBBbmltKQorLCBt
X3dhaXRpbmdGb3JFbmRFdmVudChmYWxzZSkKIHsKLSAgICBzZXRGaW5pc2hlZChmYWxzZSk7Cit9
CiAKLSAgICBpZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5k
ZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgbV90b1N0
eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9mcm9tU3R5bGUgPSBm
cm9tOwotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigpOwot
ICAgIG1fdG9TdHlsZSA9IHRvOwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIG1fdG9TdHls
ZS0+cmVmKCk7Ci0gICAgaWYgKGZyb20gfHwgdG8pCi0gICAgICAgIG1fc3RhcnRUaW1lID0gY3Vy
cmVudFRpbWUoKTsKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1T
dGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCit7CisgICAgLy8gaWYgd2UgZ2V0IGEgUkVT
VEFSVCB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZQor
ICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9NQUtFX05FVykgeworICAgICAgICBpZiAobV9h
bmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUpCisgICAgICAgICAg
ICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAg
ICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAg
ICAgICBtX3BhdXNlVGltZSA9IC0xOworICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFs
c2U7CisgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZWxzZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04pIHsK
KyAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFU
RV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNl
dFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0g
U1RBVEVfTkVXOworICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgIG1fcGF1c2VUaW1l
ID0gLTE7CisgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CiAgICAgICAgIAotICAgIC8vIElm
IHdlIGFyZSBzdGFsZSwgYXR0ZW1wdCB0byB1cGRhdGUgdG8gYSBuZXcgdHJhbnNpdGlvbiB1c2lu
ZyB0aGUgbmV3IHx0b3wgc3R5bGUuICBJZiB3ZSBhcmUgYWJsZSB0byBmaW5kIGEgbmV3IHRyYW5z
aXRpb24sCi0gICAgLy8gdGhlbiB3ZSB3aWxsIHVubWFyayBvdXJzZWx2ZXMgZm9yIGRlYXRoLgot
ICAgIGlmIChzdGFsZSgpICYmIGZyb20gJiYgdG8pIHsKLSAgICAgICAgIGZvciAoY29uc3QgVHJh
bnNpdGlvbiogdHJhbnNpdGlvbiA9IHRvLT50cmFuc2l0aW9ucygpOyB0cmFuc2l0aW9uOyB0cmFu
c2l0aW9uID0gdHJhbnNpdGlvbi0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0
eSAhPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaW50IGR1cmF0aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRpb24oKTsKLSAgICAg
ICAgICAgIGludCByZXBlYXRDb3VudCA9IHRyYW5zaXRpb24tPnJlcGVhdENvdW50KCk7Ci0gICAg
ICAgICAgICBpZiAoZHVyYXRpb24gJiYgcmVwZWF0Q291bnQpIHsKLSAgICAgICAgICAgICAgICBt
X2R1cmF0aW9uID0gZHVyYXRpb24gLyAxMDAwLjA7Ci0gICAgICAgICAgICAgICAgbV9yZXBlYXRD
b3VudCA9IHJlcGVhdENvdW50OwotICAgICAgICAgICAgICAgIG1fc3RhbGUgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHJ1bm5pbmco
KSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9BTklN
QVRJT04sIC0xKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9
PSBTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OKSB7CisgICAgICAgIGNhbmNlbFRpbWVycygpOwor
ICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFC
TEUpCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUo
ZmFsc2UpOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgIGVuZEFu
aW1hdGlvbih0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1
dCA9PSBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSkgeworICAgICAgICBpZiAobV9hbmltU3Rh
dGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSkgeworICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFIHN0YXRlLCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNh
bmNlbGVkIGJlZm9yZSAKKyAgICAgICAgICAgIC8vIHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3Zl
IHRvIHRoZSBuZXh0IHN0YXRlCisgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAg
ICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBj
dXJyZW50VGltZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVs
c2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSkgeworICAgICAgICBp
ZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfTE9PUElORyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9F
TkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAg
IHN0YXJ0QW5pbWF0aW9uKG1fc3RhcnRUaW1lKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIC8vIGV4ZWN1dGUgc3RhdGUgbWFjaGluZQorICAgIHN3aXRjaCht
X2FuaW1TdGF0ZSkgeworICAgICAgICBjYXNlIFNUQVRFX05FVzoKKyAgICAgICAgICAgIEFTU0VS
VChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04gfHwgaW5wdXQgPT0gU1RBVEVf
SU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RB
VEVfUEFVU0VEKTsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9B
TklNQVRJT04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKSB7Cisg
ICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxh
eSAoMCBpZiBubyBkZWxheSkKKyAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1RJ
TUVSOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVy
KG1fYW5pbWF0aW9uLT5kZWxheSgpLCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOgorICAgICAgICAgICAg
QVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09
IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRp
bWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBp
dCB0byByZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRl
ID0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgbV9j
b21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKHRydWUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0
IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVt
ZW50KCkpOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb24oKS0+c3RhcnRVcGRh
dGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocnVubmluZygpKTsKKyAgICAgICAgICAgICAgICAv
LyBXZSdyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEg
cGF1c2UuIENhbmNlbCB0aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0CisgICAgICAgICAgICAgICAg
bV9wYXVzZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVy
cygpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1dBSVRfVElN
RVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFU
RV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRToKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9
PSBTVEFURV9JTlBVVF9TVFlMRV9BVkFJTEFCTEUgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExB
WV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NvbXBBbmltLT5z
ZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfQVZBSUxBQkxFKSB7CisgICAgICAg
ICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8g
c3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCisgICAgICAg
ICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0aW9ucygpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNlbmQgc3RhcnQgZXZlbnQsIGlmIG5lZWRl
ZAorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQoMC4wZik7IC8vIHRoZSBlbGFwc2Vk
VGltZSBpcyBhbHdheXMgMCBoZXJlCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gU3RhcnQgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkg
fHwgIXN0YXJ0QW5pbWF0aW9uKDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ssIHNvIGZpcmUgdGhlIHN0YXJ0IHRp
bWUgaGVyZQorICAgICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dB
SVRfUkVTUE9OU0U7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFU
RV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgY3VycmVudFRpbWUoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JS
ZXNwb25zZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocnVubmluZygpKTsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSB3
YWl0aW5nIGZvciB0aGUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgc3R5bGUgaGFzIGJlZW4gc2V0
dXAuIElmIHdlJ3JlIGFza2VkIHRvIHdhaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBv
aW50LCB0aGUgc3R5bGUgbXVzdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBzbyB3ZSBjYW4gZGVhbCB3
aXRoIHRoaXMgbGlrZSB3ZSB3b3VsZAorICAgICAgICAgICAgICAgIC8vIGZvciBXQUlUX1JFU1BP
TlNFLCBleGNlcHQgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFuIGVuZEFuaW1hdGlvbigpLgor
ICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX2FuaW1T
dGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOgorICAg
ICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUIHx8IGlu
cHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFdlIGhh
dmUgYSBzdGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkg
c2V0CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRUaW1lIDw9IDApCisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUK
KyAgICAgICAgICAgICAgICBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFu
aW1hdGlvbgorICAgICAgICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQoKSk7
CisgICAgICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1hdGlvbigpLT5zdGFydFVwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQg
cmVzcG9uc2UuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0LiBXaGVuIAorICAgICAgICAg
ICAgICAgIC8vIHdlIHVucGF1c2UsIHdlIHdpbGwgYWN0IGFzIHRob3VnaCB0aGUgc3RhcnQgdGlt
ZXIganVzdCBmaXJlZAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAg
ICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRl
ID0gU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9MT09QSU5HOgorICAgICAgICAgICAgQVNTRVJU
KGlucHV0ID09IFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQgfHwgaW5wdXQgPT0gU1RBVEVf
SU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aW5wdXQgPT0gU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVk
LCBsb29wIGFnYWluIG9yIGVuZC4KKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlv
bihwYXJhbSk7CisgICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVycygpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNp
bmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKKyAgICAgICAg
ICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgICAgICAgICAgY2Fu
Y2VsVGltZXJzKCk7CisgICAgICAgICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9SVU47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9FTkRJTkc6CisgICAgICAg
ICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEIHx8IGlucHV0
ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAgICAgICAvLyBFbmQgdGlt
ZXIgZmlyZWQsIGZpbmlzaCB1cAorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uRW5kKHBhcmFt
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5p
bWF0aW9ucygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcmUgb2Zm
IGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZpbmFsIHZhbHVlCisgICAg
ICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAg
ICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgICAgICAgICAgbV9vYmplY3Qt
PmFuaW1hdGlvbigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAg
ICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZSB3aGVuIHdlJ3ZlIGJlZW4gY2Fs
bGVkIGZyb20gdGltZXJGaXJlZCgpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwg
dGhlIGFuaW1hdGlvbiBhbmQgd2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAg
ICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0g
U1RBVEVfUEFVU0VEX1JVTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHx0aGlzfCBt
YXkgYmUgZGVsZXRlZCBoZXJlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFU
RV9QQVVTRURfV0FJVF9USU1FUjoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9J
TlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkp
OworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgbV9zdGFydFRp
bWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgICAgICAgICAgbV9wYXVzZVRp
bWUgPSAtMTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gd2Ugd2VyZSB3YWl0aW5nIGZv
ciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFOgorICAgICAgICBjYXNl
IFNUQVRFX1BBVVNFRF9SVU46CisgICAgICAgICAgICAvLyBXZSB0cmVhdCB0aGVzZSB0d28gY2Fz
ZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwgd2hlbiB3ZSBhcmUgaW4g
dGhlIFdBSVRfUkVTUE9OU0UKKyAgICAgICAgICAgIC8vIHN0YXRlLCB3ZSBkb24ndCB5ZXQgaGF2
ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRvIHN0YXJ0QW5pbWF0aW9uLiBXaGVu
IHRoZSBTVEFSVF9USU1FCisgICAgICAgICAgICAvLyBldmVudCBjb21lcyBpbiBxbmQgd2Ugd2Vy
ZSBpbiB0aGUgUlVOIHN0YXRlLCB3ZSB3aWxsIG5vdGljZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBz
ZXQgdGhlIAorICAgICAgICAgICAgLy8gc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KKyAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcp
OworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSB0aW1lcworICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1BBVVNFRF9S
VU4pCisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1
c2VUaW1lOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0g
MDsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJlc3BvbnNlIGZyb20gdGhl
IGFuaW1hdGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAgbV9hbmltU3Rh
dGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpIHx8
ICFzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdy
ZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFy
dCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5Q
VVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRE9ORToKKyAgICAgICAgICAg
IC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBhcmUgZGVsZXRlZAor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBo
ZXJlIGlmIHdlIGNhbWUgb3V0IG9mIFNUQVRFX0VORElORyB3aGVuIHdlJ3ZlIGJlZW4gY2FsbGVk
IGZyb20gdGltZXJGaXJlZCgpCit9CisgICAgCit2b2lkIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlv
blRpbWVyQ2FsbGJhY2tGaXJlZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKQoreworICAgIEFTU0VSVChtX29iamVjdC0+ZG9jdW1lbnQoKSAmJiAhbV9v
YmplY3QtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwogICAgIAotICAgIC8vIElmIHdlIGRp
ZCBub3QgZmluZCBhIG5ldyB0cmFuc2l0aW9uLCB0aGVuIG1hcmsgb3Vyc2VsdmVzIGFzIGJlaW5n
IGZpbmlzaGVkIHNvIHRoYXQgd2UgY2FuIGJlIHJlbW92ZWQuCi0gICAgaWYgKHN0YWxlKCkpCi0g
ICAgICAgIHNldEZpbmlzaGVkKHRydWUpOworICAgIC8vIEZJWE1FOiB1c2UgYW4gZW51bQorICAg
IGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCkK
KyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVE
LCBlbGFwc2VkVGltZSk7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6Ondl
YmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
U1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCkgeworICAg
ICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVELCBlbGFw
c2VkVGltZSk7CisgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlCisgICAgfQog
fQogCi1kb3VibGUgSW1wbGljaXRBbmltYXRpb246OnByb2dyZXNzKCkgY29uc3QKK3ZvaWQgQW5p
bWF0aW9uQmFzZTo6YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNldCwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKLSAgICBk
b3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWU7CisgICAgbV93
YWl0aW5nRm9yRW5kRXZlbnQgPSBmYWxzZTsKICAgICAKLSAgICBpZiAobV9maW5pc2hlZCB8fCAh
bV9kdXJhdGlvbiB8fCBlbGFwc2VkVGltZSA+PSBtX2R1cmF0aW9uKQotICAgICAgICByZXR1cm4g
MS4wOworICAgIC8vIEtlZXAgYW4gYXRvbWljIHN0cmluZyBvbiB0aGUgc3RhY2sgdG8ga2VlcCBp
dCBhbGl2ZSB1bnRpbCB3ZSBleGl0IHRoaXMgbWV0aG9kCisgICAgLy8gKHNpbmNlIGRpc3BhdGNo
aW5nIHRoZSBldmVudCBtYXkgY2F1c2UgfHRoaXN8IHRvIGJlIGRlbGV0ZWQsIHRoZXJlZm9yZSBy
ZW1vdmluZworICAgIC8vIHRoZSBsYXN0IHJlZiB0byB0aGUgYXRvbWljIHN0cmluZykuCisgICAg
QXRvbWljU3RyaW5nIGFuaW1OYW1lKG5hbWUpOworICAgIEF0b21pY1N0cmluZyBhbmltRXZlbnRU
eXBlKGV2ZW50VHlwZSk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IHN0aWNrcyBhcm91
bmQgdG9vCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50UmV0YWluZXIoZWxlbWVudCk7
CisgICAgCisgICAgQVNTRVJUKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpICYmICFl
bGVtZW50LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgaWYgKCFlbGVtZW50KQor
ICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxheVN0YXRl
KGJvb2wgcnVuKQoreworICAgIGlmIChydW5uaW5nKCkgIT0gcnVuIHx8IGlzbmV3KCkpIHsKKyAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKHJ1biA/IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVO
TklORyA6IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VELCAtMSk7CisgICAgfQorfQogCi0g
ICAgaWYgKG1fZnVuY3Rpb24udHlwZSgpID09IExpbmVhclRpbWluZ0Z1bmN0aW9uKQotICAgICAg
ICByZXR1cm4gZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uOworZG91YmxlIEFuaW1hdGlvbkJhc2U6
OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAo
cHJlYWN0aXZlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGRvdWJsZSBlbGFwc2Vk
VGltZSA9IHJ1bm5pbmcoKSA/IChjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWUpIDogKG1fcGF1
c2VUaW1lIC0gbV9zdGFydFRpbWUpOworICAgIGlmIChydW5uaW5nKCkgJiYgZWxhcHNlZFRpbWUg
PCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZHVyID0gbV9hbmltYXRp
b24tPmR1cmF0aW9uKCk7CisgICAgCisgICAgaWYgKHBvc3RhY3RpdmUoKSB8fCAhbV9hbmltYXRp
b24tPmR1cmF0aW9uKCkgfHwgZWxhcHNlZFRpbWUgPj0gZHVyKQorICAgICAgICByZXR1cm4gMS4w
OworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGZyYWN0aW9uYWwgdGltZSwgdGFraW5nIGludG8g
YWNjb3VudCBkaXJlY3Rpb24uCisgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91
dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZlIAorICAgIC8vIHNob3J0
IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUKKyAgICBkb3VibGUgdCA9IGVsYXBzZWRU
aW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgaW50IGkgPSAoaW50KSB0OworICAg
IHQgLT0gaTsKKyAgICAKKyAgICBpZiAoc2NhbGUgIT0gMSB8fCBvZmZzZXQgIT0gMCkKKyAgICAg
ICAgdCA9ICh0IC0gb2Zmc2V0KSAqIHNjYWxlOworICAgIAorICAgIGlmIChtX2FuaW1hdGlvbi0+
dGltaW5nRnVuY3Rpb24oKS50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAg
IHJldHVybiB0OwogICAgIAogICAgIC8vIEN1YmljIGJlemllci4KLSAgICByZXR1cm4gc29sdmVD
dWJpY0JlemllckZ1bmN0aW9uKG1fZnVuY3Rpb24ueDEoKSwgbV9mdW5jdGlvbi55MSgpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY3Rpb24ueDIoKSwgbV9mdW5j
dGlvbi55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRp
bWUgLyBtX2R1cmF0aW9uLCBtX2R1cmF0aW9uKTsKKyAgICBkb3VibGUgdHQgPSBzb2x2ZUN1Ymlj
QmV6aWVyRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueDEoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uLT50aW1pbmdG
dW5jdGlvbigpLnkxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54MigpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueTIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgbV9hbmltYXRp
b24tPmR1cmF0aW9uKCkpOworICAgIHJldHVybiB0dDsKIH0KIAordm9pZCBBbmltYXRpb25CYXNl
OjpwcmltZUV2ZW50VGltZXJzKCkKK3sKKyAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5kIG9yIGxv
b3AgZXZlbnQgbmVlZHMgdG8gZmlyZQorICAgIGRvdWJsZSBjdCA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgY29uc3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN0IC0gbV9zdGFydFRpbWU7CisgICAg
QVNTRVJUKGVsYXBzZWREdXJhdGlvbiA+PSAwKTsKKyAgICAKKyAgICBkb3VibGUgdG90YWxEdXJh
dGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQg
PSAwOworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IHRvdGFsRHVyYXRpb247CisgICAg
aWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJhdGlvbiA8IHRvdGFsRHVyYXRpb24p
IHsKKyAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9k
KGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBuZXh0
SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKKyAgICB9Cisg
ICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IGhhdmUgMCBkdXJhdGlvbkxlZnQsIGlm
IHdlJ3ZlIGdvdHRlbiB0aGUgZXZlbnQgbGF0ZSBhbmQgd2UgYXJlIGFscmVhZHkKKyAgICAvLyBw
YXN0IHRvdGFsRHVyYXRpb24uIEluIHRoaXMgY2FzZSB3ZSBzdGlsbCBmaXJlIGFuIGVuZCB0aW1l
ciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZW5kLiAKKyAgICAvLyBUaGlzIGRlZmVycyB0aGUgY2Fs
bCB0byBzZW5kQW5pbWF0aW9uRXZlbnRzIHRvIGF2b2lkIHJlLWVudHJhbnQgY2FsbHMgdGhhdCBk
ZXN0cm95CisgICAgLy8gdGhlIFJlbmRlck9iamVjdCwgYW5kIHRoZXJlZm9yZSB8dGhpc3wgYmVm
b3JlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKyAgICBpZiAodG90YWxEdXJhdGlvbiA8IDAgfHwgbmV4
dEl0ZXJhdGlvblRpbWUgPCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIC8vIFdlIGFyZSBub3Qg
YXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBsb29wIGV2ZW50CisgICAgICAgIEFTU0VSVChuZXh0SXRl
cmF0aW9uVGltZSA+IDApOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0xPT1BJTkc7Cisg
ICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0aW9uTGVmdCwg
RXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIG5leHRJdGVyYXRpb25U
aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kLCBz
ZW5kIGFuIGVuZCBldmVudAorICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0VORElORzsKKyAg
ICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBF
dmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOwor
ICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0KKwogc3RhdGljIGlubGluZSBpbnQgYmxlbmRGdW5j
KGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBpbnQo
ZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwpAQCAtMjIzLDcgKzg0Myw4IEBAIHN0YXRp
YyBpbmxpbmUgSW50U2l6ZSBibGVuZEZ1bmMoY29uc3QgSW50U2l6ZSYgZnJvbSwgY29uc3QgSW50
U2l6ZSYgdG8sIGRvdWJsZSBwCiBzdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJsZW5kRnVuYyhj
b25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dy
ZXNzKQogeyAgCiAgICAgQVNTRVJUKGZyb20gJiYgdG8pOwotICAgIHJldHVybiBuZXcgU2hhZG93
RGF0YShibGVuZEZ1bmMoZnJvbS0+eCwgdG8tPngsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20t
PnksIHRvLT55LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1ciwgcHJv
Z3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVz
cyksIGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9ncmVzcyksIGJs
ZW5kRnVuYyhmcm9tLT5jb2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykpOwogfQogCiBzdGF0aWMg
aW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCkBAIC0yMzcsNyArODU4LDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBpIDwgZnJvbVNpemUgPyBmcm9tW2ldLmdldCgp
IDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiB0b09wID0gaSA8IHRvU2l6ZSA/IHRv
W2ldLmdldCgpIDogMDsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZGVkT3AgPSB0
b09wID8gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcykgOiBmcm9tT3AtPmJsZW5kKDAsIHBy
b2dyZXNzLCB0cnVlKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOworICAgICAg
ICBpZiAoYmxlbmRlZE9wKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjU0LDMxMSArODc2LDgzOCBAQCBzdGF0
aWMgaW5saW5lIEVWaXNpYmlsaXR5IGJsZW5kRnVuYyhFVmlzaWJpbGl0eSBmcm9tLCBFVmlzaWJp
bGl0eSB0bywgZG91YmxlIHBybwogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJU0lCTEUgOiAo
dG8gIT0gVklTSUJMRSA/IHRvIDogZnJvbSk7CiB9CiAKLSNkZWZpbmUgQkxFTkQocHJvcCwgZ2V0
dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+
Z2V0dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSB7XAotICAgICAgICByZXNldChyZW5k
ZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkp
IFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09
IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIGlmIChtX2Zy
b21TdHlsZS0+Z2V0dGVyKCkgIT0gbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgICAg
IHNldEZpbmlzaGVkKGZhbHNlKTsgXAotICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBc
Ci0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFy
ZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgIGFuaW1hdGVk
U3R5bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBtX3RvU3R5bGUt
PmdldHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0g
cHJvcCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9XAotICAgIH1cCi0K
LSNkZWZpbmUgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihwcm9wLCBnZXR0ZXIsIHNldHRlcikg
XAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAhPSB0
YXJnZXRTdHlsZS0+Z2V0dGVyKCkpIHsgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAgICAg
ICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxs
IHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IG1f
ZnJvbVN0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBDb2xvciB0b0NvbG9yID0gbV90b1N0eWxl
LT5nZXR0ZXIoKTsgXAotICAgICAgICBpZiAoZnJvbUNvbG9yLmlzVmFsaWQoKSB8fCB0b0NvbG9y
LmlzVmFsaWQoKSkgeyBcCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpIFwK
LSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Y29sb3IoKTsgXAotICAg
ICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkgXAotICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBtX3RvU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmIChmcm9tQ29sb3IgIT0g
dG9Db2xvcikge1wKLSAgICAgICAgICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7IFwKLSAgICAg
ICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0
YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxl
bmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAgICAgICAg
ICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsg
XAotICAgICAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICB9XAotCi0jZGVmaW5lIEJMRU5EX1NI
QURPVyhwcm9wLCBnZXR0ZXIsIHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3Ag
JiYgKCFtX3RvU3R5bGUtPmdldHRlcigpIHx8ICF0YXJnZXRTdHlsZS0+Z2V0dGVyKCkgfHwgKm1f
dG9TdHlsZS0+Z2V0dGVyKCkgIT0gKnRhcmdldFN0eWxlLT5nZXR0ZXIoKSkpIHsgXAotICAgICAg
ICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAg
aWYgKHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmICht
X3Byb3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAg
ICAgIGlmIChtX2Zyb21TdHlsZS0+Z2V0dGVyKCkgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAmJiAq
bV9mcm9tU3R5bGUtPmdldHRlcigpICE9ICptX3RvU3R5bGUtPmdldHRlcigpKSB7XAotICAgICAg
ICAgICAgc2V0RmluaXNoZWQoZmFsc2UpOyBcCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5
bGUpIFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVu
ZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsgXAotICAgICAgICAgICAgYW5p
bWF0ZWRTdHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhtX2Zyb21TdHlsZS0+Z2V0dGVyKCksIG1fdG9T
dHlsZS0+Z2V0dGVyKCksIHByb2dyZXNzKCkpKTtcCi0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0
eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAgIH1cCi0gICAg
fQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmlt
YXRlZFN0eWxlKQotewotICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIG5vIHRyYW5zaXRpb24tcHJv
cGVydHksIHRoZW4gdGhlIG9ubHkgd2F5IHRvIHRlbGwgaWYgb3VyIGdvYWwgc3RhdGUgY2hhbmdl
ZCBpcyB0byBjaGVjawotICAgIC8vIGV2ZXJ5IHNpbmdsZSBhbmltYXRhYmxlIHByb3BlcnR5LiAg
Rm9yIG5vdyB3ZSdsbCBqdXN0IGRpZmYgdGhlIHN0eWxlcyB0byBhc2sgdGhhdCBxdWVzdGlvbiwK
LSAgICAvLyBidXQgd2Ugc2hvdWxkIHJlYWxseSBleGNsdWRlIG5vbi1hbmltYXRhYmxlIHByb3Bl
cnRpZXMuCi0gICAgaWYgKCFtX3RvU3R5bGUgfHwgKG1fcHJvcGVydHkgPT0gY0FuaW1hdGVBbGwg
JiYgdGFyZ2V0U3R5bGUtPmRpZmYobV90b1N0eWxlKSkpIHsKLSAgICAgICAgcmVzZXQocmVuZGVy
ZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgICAgICBpZiAoc3RhbGUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQmxvdyB1cCBzaG9ydGhh
bmRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9ub3JlZC4KLSAgICBzZXRGaW5pc2hlZCh0cnVlKTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eUxlZnQsIGxlZnQsIHNldExlZnQpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5UmlnaHQsIHJpZ2h0LCBzZXRSaWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlU
b3AsIHRvcCwgc2V0VG9wKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBz
ZXRCb3R0b20pOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBzZXRXaWR0aCk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlIZWlnaHQsIGhlaWdodCwgc2V0SGVpZ2h0KTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgYm9yZGVyTGVmdFdpZHRoLCBzZXRCb3Jk
ZXJMZWZ0V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9y
ZGVyUmlnaHRXaWR0aCwgc2V0Qm9yZGVyUmlnaHRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9wV2lkdGgsIHNldEJvcmRlclRvcFdpZHRoKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwg
c2V0Qm9yZGVyQm90dG9tV2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwg
bWFyZ2luTGVmdCwgc2V0TWFyZ2luTGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5S
aWdodCwgbWFyZ2luUmlnaHQsIHNldE1hcmdpblJpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eU1hcmdpblRvcCwgbWFyZ2luVG9wLCBzZXRNYXJnaW5Ub3ApOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tLCBtYXJnaW5Cb3R0b20sIHNldE1hcmdpbkJvdHRvbSk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgcGFkZGluZ0xlZnQsIHNldFBhZGRpbmdMZWZ0KTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0LCBzZXRQYWRk
aW5nUmlnaHQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcGFkZGluZ1RvcCwg
c2V0UGFkZGluZ1RvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRk
aW5nQm90dG9tLCBzZXRQYWRkaW5nQm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU9wYWNp
dHksIG9wYWNpdHksIHNldE9wYWNpdHkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Q29sb3IsIGNv
bG9yLCBzZXRDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJh
Y2tncm91bmRDb2xvciwgc2V0QmFja2dyb3VuZENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZB
TElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBjb2x1bW5SdWxlQ29s
b3IsIHNldENvbHVtblJ1bGVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsIGNvbHVtblJ1bGVXaWR0aCwgc2V0Q29sdW1uUnVsZVdpZHRoKTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgY29sdW1uR2FwLCBzZXRDb2x1bW5HYXAp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQsIGNvbHVtbkNvdW50LCBz
ZXRDb2x1bW5Db3VudCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwg
Y29sdW1uV2lkdGgsIHNldENvbHVtbldpZHRoKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NP
TE9SKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHNl
dFRleHRTdHJva2VDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIHRleHRGaWxsQ29sb3IsIHNldFRleHRGaWxsQ29sb3Ip
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGhv
cml6b250YWxCb3JkZXJTcGFjaW5nLCBzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZyk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZlcnRpY2FsQm9y
ZGVyU3BhY2luZywgc2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKTsKLSAgICBCTEVORF9NQVlCRV9J
TlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBib3JkZXJMZWZ0Q29sb3Is
IHNldEJvcmRlckxlZnRDb2xvcik7Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIHNldEJvcmRlclJpZ2h0
Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvciwgYm9yZGVyVG9wQ29sb3IsIHNldEJvcmRlclRvcENvbG9yKTsKLSAgICBCTEVORF9N
QVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJv
dHRvbUNvbG9yLCBzZXRCb3JkZXJCb3R0b21Db2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHla
SW5kZXgsIHpJbmRleCwgc2V0WkluZGV4KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxpbmVIZWln
aHQsIGxpbmVIZWlnaHQsIHNldExpbmVIZWlnaHQpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURf
Q09MT1IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIG91dGxpbmVDb2xvciwgc2V0T3V0bGluZUNv
bG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsIG91dGxpbmVPZmZzZXQs
IHNldE91dGxpbmVPZmZzZXQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBv
dXRsaW5lV2lkdGgsIHNldE91dGxpbmVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZXR0
ZXJTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nLCBzZXRMZXR0ZXJTcGFjaW5nKTsKLSAgICBCTEVORChD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCB3b3JkU3BhY2luZywgc2V0V29yZFNwYWNpbmcpOwotICAg
IEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgYm94U2hhZG93LCBzZXRC
b3hTaGFkb3cpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHRleHRT
aGFkb3csIHNldFRleHRTaGFkb3cpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtLCB0cmFuc2Zvcm0sIHNldFRyYW5zZm9ybSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1PcmlnaW5YLCB0cmFuc2Zvcm1PcmlnaW5YLCBzZXRUcmFuc2Zvcm1PcmlnaW5Y
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksIHRyYW5zZm9y
bU9yaWdpblksIHNldFRyYW5zZm9ybU9yaWdpblkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgYm9yZGVyVG9wTGVmdFJhZGl1cywgc2V0Qm9yZGVyVG9w
TGVmdFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJh
ZGl1cywgYm9yZGVyVG9wUmlnaHRSYWRpdXMsIHNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvcmRlckJv
dHRvbUxlZnRSYWRpdXMsIHNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5LCB2aXNpYmlsaXR5LCBzZXRWaXNpYmlsaXR5KTsKLSAgICBCTEVORChDU1NQ
cm9wZXJ0eVpvb20sIHpvb20sIHNldFpvb20pOwotfQotCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRl
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIGNv
bnN0IFRyYW5zaXRpb24qIGN1cnJlbnRUcmFuc2l0aW9ucyA9IGN1cnJlbnRTdHlsZS0+dHJhbnNp
dGlvbnMoKTsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiB0YXJnZXRUcmFuc2l0aW9ucyA9IHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpOwotICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFuZ2VkID0gbV9h
bmltYXRpb25zLmlzRW1wdHkoKSB8fCAoY3VycmVudFRyYW5zaXRpb25zICE9IHRhcmdldFRyYW5z
aXRpb25zICYmICEoY3VycmVudFRyYW5zaXRpb25zICYmIHRhcmdldFRyYW5zaXRpb25zICYmICpj
dXJyZW50VHJhbnNpdGlvbnMgPT0gKnRhcmdldFRyYW5zaXRpb25zKSk7Ci0KLSAgICBpZiAodHJh
bnNpdGlvbnNDaGFuZ2VkKSB7Ci0gICAgICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlv
bio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgICAKLSAgICAg
ICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgLy8gTWFy
ayBhbnkgcnVubmluZyBhbmltYXRpb25zIGFzIHN0YWxlIGlmIHRoZSBzZXQgb2YgdHJhbnNpdGlv
bnMgY2hhbmdlZC4gIFN0YWxlIGFuaW1hdGlvbnMgY29udGludWUKLSAgICAgICAgICAgIC8vIHRv
IGJsZW5kIG9uIGEgdGltZXIsIGFuZCB0aGVuIHJlbW92ZSB0aGVtc2VsdmVzIHdoZW4gZmluaXNo
ZWQuCi0gICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRTdGFsZSgpOwotCi0gICAgICAgIC8vIElm
IG91ciB0cmFuc2l0aW9ucyBjaGFuZ2VkIHdlIG5lZWQgdG8gYWRkIG5ldyBhbmltYXRpb25zIGZv
ciBhbnkgdHJhbnNpdGlvbnMgdGhhdAotICAgICAgICAvLyBkb24ndCBleGlzdCB5ZXQuICBJZiBh
IG5ldyB0cmFuc2l0aW9uIGNvbmZsaWN0cyB3aXRoIGEgY3VycmVudGx5IHJ1bm5pbmcgc3RhbGUg
dHJhbnNpdGlvbiwgdGhlbiB3ZSB3aWxsIG5vdCBhZGQgaXQuCi0gICAgICAgIC8vIFRoZSBzdGFs
ZSB0cmFuc2l0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBpdHNlbGYgdG8gdGhlIG5l
dyB0cmFuc2l0aW9uIGlmIGl0IGV2ZXIgZ2V0cyByZXNldCBvciBmaW5pc2hlcy4KLSAgICAgICAg
Zm9yIChjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gdGFyZ2V0VHJhbnNpdGlvbnM7IHRy
YW5zaXRpb247IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IGludCBwcm9wZXJ0eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQg
ZHVyYXRpb24gPSB0cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVh
dENvdW50ID0gdHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSAmJiBkdXJhdGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5z
KHByb3BlcnR5KSkgewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRp
b24gPSBuZXcgSW1wbGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAg
bV9hbmltYXRpb25zLnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KKyNwcmFnbWEgbWFyayAtCiAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZl
IGFuaW1hdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29h
bCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQotICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSom
IG9ubHkgaWYgbmVlZGVkLgotICAgIFJlbmRlclN0eWxlKiByZXN1bHQgPSAwOwotICAgIEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMu
ZW5kKCk7Ci0gICAgVmVjdG9yPGludD4gb2Jzb2xldGVUcmFuc2l0aW9uczsKK2NsYXNzIFByb3Bl
cnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckJhc2UoaW50IHBy
b3ApCisgICAgOiBtX3Byb3AocHJvcCkKKyAgICB7IH0KKyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdy
YXBwZXJCYXNlKCkgeyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0PTA7CisgICAgdmlydHVhbCB2b2lkIGJs
ZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0PTA7CiAgICAgCi0gICAgLy8gTG9vayBhdCB0aGUg
ImFsbCIgYW5pbWF0aW9uIGZpcnN0LgotICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbGxBbmltYXRp
b24gPSBtX2FuaW1hdGlvbnMuZ2V0KGNBbmltYXRlQWxsKTsKLSAgICBpZiAoYWxsQW5pbWF0aW9u
KSB7Ci0gICAgICAgIGFsbEFuaW1hdGlvbi0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0KTsKKyAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7
IHJldHVybiBtX3Byb3A7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50IG1fcHJvcDsKK307CiAK
LSAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBkb25lIGFuZCB3ZSBhcmUgbWFya2VkIGFz
IHN0YWxlLCB0aGVuIHdlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHRoZQotICAgICAgICAvLyBpdGVy
YXRpb24gb2YgdGhlIGhhc2htYXAgaXMgZmluaXNoZWQuCi0gICAgICAgIGlmIChhbGxBbmltYXRp
b24tPmZpbmlzaGVkKCkgJiYgYWxsQW5pbWF0aW9uLT5zdGFsZSgpKQotICAgICAgICAgICAgb2Jz
b2xldGVUcmFuc2l0aW9ucy5hcHBlbmQoY0FuaW1hdGVBbGwpOwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
QmFzZSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyR2V0dGVyKGludCBwcm9wLCBUIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKKyAgICA6IFByb3BlcnR5V3JhcHBlckJhc2Uo
cHJvcCkKKyAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpID09IChiLT4qbV9n
ZXR0ZXIpKCk7CiAgICAgfQogICAgIAotICAgIC8vIE5vdyBsb29rIGF0IHRoZSBzcGVjaWFsaXpl
ZCBhbmltYXRpb25zLgotICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46
Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAvLyBTa2lwIG92ZXIgdGhlICJhbGwiIGFuaW1hdGlvbiwgc2luY2Ugd2UgYW5pbWF0
ZWQgaXQgYWxyZWFkeS4KLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPnByb3BlcnR5KCkgPT0gY0Fu
aW1hdGVBbGwpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGl0LT5z
ZWNvbmQtPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUs
IHJlc3VsdCk7Citwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBj
b25zdDsKK307CiAKLSAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBkb25lIGFuZCB3ZSBh
cmUgbWFya2VkIGFzIHN0YWxlLCB0aGVuIHdlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHRoZQotICAg
ICAgICAvLyBpdGVyYXRpb24gb2YgdGhlIGhhc2htYXAgaXMgZmluaXNoZWQuCi0gICAgICAgIGlm
IChpdC0+c2Vjb25kLT5maW5pc2hlZCgpICYmIGl0LT5zZWNvbmQtPnN0YWxlKCkpCi0gICAgICAg
ICAgICBvYnNvbGV0ZVRyYW5zaXRpb25zLmFwcGVuZChpdC0+c2Vjb25kLT5wcm9wZXJ0eSgpKTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFBy
b3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyKGlu
dCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKFQpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdl
dHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIChkc3Qt
PiptX3NldHRlcikoYmxlbmRGdW5jKChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dl
dHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCBwcm9n
KSk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKFQpOworfTsKIAorY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhZG93IDogcHVibGljIFBy
b3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRhKj4geworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlclNoYWRvdyhpbnQgcHJvcCwgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoU2hhZG93RGF0YSosIGJvb2wp
KQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFNoYWRvd0RhdGEqPihwcm9wLCBnZXR0ZXIp
CisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dhID0gKGEtPiptX2dldHRlcikoKTsK
KyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAg
IAorICAgICAgICBpZiAoIXNoYWRvd2EgJiYgc2hhZG93YiB8fCBzaGFkb3dhICYmICFzaGFkb3di
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2hhZG93YSAmJiBzaGFk
b3diICYmICgqc2hhZG93YSAhPSAqc2hhZG93YikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgY3VsbCBvdXQg
YW55IHN0YWxlIGFuaW1hdGlvbnMgdGhhdCBhcmUgZmluaXNoZWQuCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG9ic29sZXRlVHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKG9ic29sZXRl
VHJhbnNpdGlvbnNbaV0pOwotICAgICAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyLCAwLCAw
KTsKLSAgICAgICAgZGVsZXRlIGFuaW1hdGlvbjsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIFNoYWRvd0RhdGEqIHNoYWRvd2Eg
PSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3diID0gKGItPipt
X2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSBkZWZhdWx0U2hhZG93RGF0YSgwLCAwLCAw
LCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFzaGFkb3dhKQor
ICAgICAgICAgICAgc2hhZG93YSA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgaWYgKCFz
aGFkb3diKQorICAgICAgICAgICAgc2hhZG93YiA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAg
ICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKHNoYWRvd2EsIHNoYWRvd2Is
IHByb2cpLCBmYWxzZSk7CiAgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIChSZW5kZXJT
dHlsZTo6Km1fc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9vbCk7Cit9OwogCi0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJldHVybiB0YXJnZXRTdHlsZTsKLX0K
LQotYm9vbCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKLXsK
LSAgICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5p
bWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5maW5pc2hlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorY2xhc3MgUHJvcGVydHlX
cmFwcGVySW50U2l6ZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4gewor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckludFNpemUoaW50IHByb3AsIEludFNpemUgKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
Y29uc3QgSW50U2l6ZSYpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPEludFNpemU+KHBy
b3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIEludFNpemUgc2l6ZWEgPSAoYS0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBJbnRTaXplIHNpemViID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiAoc2l6ZWEgPT0gc2l6ZWIpOworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIElu
dFNpemUgc2l6ZWEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBJbnRTaXplIHNpemViID0g
KGItPiptX2dldHRlcikoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgKGRzdC0+Km1fc2V0
dGVyKShibGVuZEZ1bmMoc2l6ZWEsIHNpemViLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBJbnRTaXplJik7Cit9
OwogCi12b2lkIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQotewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGlu
dCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5yZXNldChyZW5k
ZXJlciwgMCwgMCk7Ci19CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6
IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBw
ZXJNYXliZUludmFsaWRDb2xvcihpbnQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9y
JikpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgLCBtX2dldHRlcihnZXR0
ZXIpCisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0CisgICAgeworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsK
KyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBi
LT5jb2xvcigpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9y
OworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykg
Y29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xvcigp
OworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xvciA9
IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGZyb21Db2xv
ciwgdG9Db2xvciwgcHJvZykpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0
eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7Cit9OwogCiBjbGFzcyBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUo
RnJhbWUqKTsKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoKTsKLQotICAgIENvbXBv
c2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBnZXQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKTsK
KyAgICAKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihS
ZW5kZXJPYmplY3QqKTsKICAgICBib29sIGNsZWFyKFJlbmRlck9iamVjdCopOwogICAgIAotICAg
IHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qKTsKLSAg
ICB2b2lkIHVwZGF0ZVRpbWVyKCk7Ci0KLSAgICBib29sIGhhc0ltcGxpY2l0QW5pbWF0aW9ucygp
IGNvbnN0IHsgcmV0dXJuICFtX2FuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KKyAgICB2b2lkIGFu
aW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7Cisg
ICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIAorICAgIHZvaWQgdXBkYXRlUmVu
ZGVyaW5nRGlzcGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiop
OworICAgIHZvaWQgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgCisgICAg
Ym9vbCBoYXNBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fY29tcG9zaXRlQW5pbWF0aW9u
cy5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50
KiBkb2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVu
dCk7CisgICAgCisgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOworICAgIAorICAgIGJvb2wgaXNB
bmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0
eSkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKGludCBwcm9w
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRp
YyBpbnQgZ2V0UHJvcGVydHlBdEluZGV4KGludCBpKTsKKyAgICBzdGF0aWMgaW50IGdldE51bVBy
b3BlcnRpZXMoKSB7IHJldHVybiBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsgfQorICAgIAor
ICAgIC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9u
IHRpbWVycworICAgIHN0YXRpYyBib29sIGJsZW5kUHJvcGVydGllcyhpbnQgcHJvcCwgUmVuZGVy
U3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBk
b3VibGUgcHJvZyk7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUo
Ym9vbCB3YWl0aW5nKSB7IGlmICh3YWl0aW5nKSBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycysr
OyBlbHNlIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzLS07IH0KKyAgICAKIHByaXZhdGU6Ci0g
ICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+IG1f
YW5pbWF0aW9uczsKLSAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4gbV90aW1l
cjsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVQcm9wZXJ0eU1hcCgpOworICAgIAorICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmltYXRpb24qPiBSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA7CisgICAgCisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwIG1fY29t
cG9zaXRlQW5pbWF0aW9uczsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4g
bV9hbmltYXRpb25UaW1lcjsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4g
bV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyOwogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIHVp
bnQzMl90IG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzOworICAgIAorICAgIHN0YXRpYyBWZWN0
b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KiBnX3Byb3BlcnR5V3JhcHBlcnM7CisgICAgc3RhdGlj
IGludCBnX3Byb3BlcnR5V3JhcHBlck1hcFtudW1DU1NQcm9wZXJ0aWVzXTsKIH07CiAKKyNwcmFn
bWEgbWFyayAtCisKK1ZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4qIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpnX3Byb3BlcnR5V3JhcHBlcnMgPSAwOworaW50IEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpnX3Byb3BlcnR5V3JhcHBlck1hcFtdOworCiBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqIGZyYW1lKQotICAg
IDogbV90aW1lcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQp
Ci0gICAgLCBtX2ZyYW1lKGZyYW1lKQorOiBtX2FuaW1hdGlvblRpbWVyKHRoaXMsICZBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCkKKywgbV91cGRhdGVSZW5k
ZXJpbmdEaXNwYXRjaGVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRl
UmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKQorLCBtX2ZyYW1lKGZyYW1lKQorLCBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycygwKQogeworICAgIGVuc3VyZVByb3BlcnR5TWFwKCk7CiB9CiAKIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp+QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoKQog
ewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2FuaW1hdGlvbnMpOworICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmVuc3VyZVByb3BlcnR5TWFwKCkKK3sKKyAgICAvLyBGSVhNRTog
VGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBp
dCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IEFuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJv
eWVkPworICAgIGlmIChnX3Byb3BlcnR5V3JhcHBlcnMgPT0gMCkgeworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMgPSBuZXcgVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPigpOworICAgICAg
ICAKKyAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8g
dGhlIGNvbXBhcmlzb25zIGFuZCBibGVuZHMKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TGVmdCwgJlJlbmRl
clN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExlZnQpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
UmlnaHQsICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5n
dGg+KENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6OnRvcCwgJlJlbmRlclN0eWxlOjpzZXRU
b3ApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJl
bmRlclN0eWxlOjpzZXRCb3R0b20pKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJT
dHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1
bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWdu
ZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9y
dD4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0
b21XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NT
UHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHls
ZTo6c2V0TWFyZ2luTGVmdCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRl
clN0eWxlOjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0
aD4oQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVy
U3R5bGU6OnNldE1hcmdpblRvcCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZS
ZW5kZXJTdHlsZTo6bWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSkp
OworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
PExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCkpOworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRk
aW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBh
ZGRpbmdSaWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCkpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJv
cGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0UGFkZGluZ0JvdHRvbSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3Im
PihDU1NQcm9wZXJ0eUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dENvbG9yKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgQ29sb3ImPihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgJlJlbmRl
clN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9y
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lk
dGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29s
dW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkdhcCkpOworICAgICAgICBnX3Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
V2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywg
JlJlbmRlclN0eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRI
b3Jpem9udGFsQm9yZGVyU3BhY2luZykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZl
cnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRl
eCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4KSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6bGluZUhlaWdodCwgJlJlbmRl
clN0eWxlOjpzZXRMaW5lSGVpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsICZS
ZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zmc2V0
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgpKTsKKyAgICAgICAg
Z19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1By
b3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldExldHRlclNwYWNpbmcpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sICZS
ZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0
aD4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5z
Zm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCkpOworICAgICAg
ICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4o
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9y
bU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWSkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
TGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXpl
KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tTGVmdFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8RVZpc2liaWxpdHk+KENTU1Byb3BlcnR5
VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZp
c2liaWxpdHkpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZS
ZW5kZXJTdHlsZTo6c2V0Wm9vbSkpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoZXNl
IG1pZ2h0IGJlIGludmFsaWQgY29sb3JzLCBuZWVkIHRvIGNoZWNrIGZvciB0aGF0CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpj
b2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxl
Ojp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFN0cm9rZUNvbG9yKSk7Cisg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHls
ZTo6dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
UmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRv
cENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yKSk7CisgICAgICAgIGdfcHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRv
bUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNvbG9yKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yKSk7CisgICAgICAgIAorICAgICAgICAvLyBU
aGVzZSBhcmUgZm9yIHNoYWRvd3MKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJl
bmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3co
Q1NTUHJvcGVydHlUZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnRleHRTaGFkb3csICZSZW5kZXJT
dHlsZTo6c2V0VGV4dFNoYWRvdykpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHVu
dXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCAodW5zaWduZWQgaW50KSBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlck1hcFtpXSA9IENTU1Byb3BlcnR5SW52YWxpZDsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQo
KCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9wZXJ0eSA8
IG51bUNTU1Byb3BlcnRpZXMpOworICAgICAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJNYXBbKCpn
X3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9wZXJ0eV0gPSBp
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBzdGF0aWMKK2Jvb2wgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnByb3BlcnRpZXNFcXVhbChpbnQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIGlmIChwcm9wID09IGNBbmltYXRlQWxs
KSB7CisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoISgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+ZXF1YWxzKGEsIGIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAg
aW50IHByb3BJbmRleCA9IHByb3AgLSBmaXJzdENTU1Byb3BlcnR5OworICAgICAgICAKKyAgICAg
ICAgaWYgKHByb3BJbmRleCA+PSAwICYmIHByb3BJbmRleCA8IG51bUNTU1Byb3BlcnRpZXMpIHsK
KyAgICAgICAgICAgIGludCBpID0gZ19wcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcEluZGV4XTsKKyAg
ICAgICAgICAgIHJldHVybiAoaSA+PSAwKSA/ICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+ZXF1
YWxzKGEsIGIpIDogdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gc3RhdGljCitpbnQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdldFByb3BlcnR5
QXRJbmRleChpbnQgaSkKK3sKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSAoaW50KSBnX3Byb3BlcnR5
V3JhcHBlcnMtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKyAg
ICAgICAgCisgICAgcmV0dXJuICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+cHJvcGVydHkoKTsK
K30KKyAgICAKKy8vIHN0YXRpYyAtIHJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29m
dHdhcmUgYW5pbWF0aW9uIHRpbWVycworYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
YmxlbmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKQoreworICAgIGlmIChw
cm9wID09IGNBbmltYXRlQWxsKSB7CisgICAgICAgIGJvb2wgbmVlZHNUaW1lciA9IGZhbHNlOwor
ICAgIAorICAgICAgICBzaXplX3QgbiA9IGdfcHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAg
UHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9ICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXTsK
KyAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxzKGEsIGIpKSB7CisgICAgICAgICAgICAg
ICAgd3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9nKTsKKyAgICAgICAgICAgICAgICBuZWVk
c1RpbWVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmVlZHNUaW1lcjsKKyAgICB9CisgICAgCisgICAgaW50IHByb3BJbmRleCA9IHByb3AgLSBmaXJz
dENTU1Byb3BlcnR5OworICAgIGlmIChwcm9wSW5kZXggPj0gMCAmJiBwcm9wSW5kZXggPCBudW1D
U1NQcm9wZXJ0aWVzKSB7CisgICAgICAgIGludCBpID0gZ19wcm9wZXJ0eVdyYXBwZXJNYXBbcHJv
cEluZGV4XTsKKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAgICAgUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9ICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXTsKKyAgICAgICAgICAg
IHdyYXBwZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNvbXBv
c2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0KFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK0NvbXBvc2l0
ZUFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFjY2Vzc0NvbXBvc2l0ZUFu
aW1hdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIENvbXBvc2l0ZUltcGxpY2l0
QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKLSAgICBp
ZiAoIWFuaW1hdGlvbiAmJiB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkgewotICAgICAgICBh
bmltYXRpb24gPSBuZXcgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24oKTsKLSAgICAgICAgbV9h
bmltYXRpb25zLnNldChyZW5kZXJlciwgYW5pbWF0aW9uKTsKKyAgICBDb21wb3NpdGVBbmltYXRp
b24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVyZXIpOworICAg
IGlmICghYW5pbWF0aW9uKSB7CisgICAgICAgIGFuaW1hdGlvbiA9IG5ldyBDb21wb3NpdGVBbmlt
YXRpb24oIXJlbmRlcmVyLT5kb2N1bWVudCgpLT5sb2FkQ29tcGxldGUoKSwgdGhpcyk7CisgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CiAgICAg
fQogICAgIHJldHVybiBhbmltYXRpb247CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmNsZWFyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgQ29tcG9zaXRlSW1w
bGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKHJlbmRlcmVyKTsK
KyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9SIHdlIGFyZSBz
dXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bworICAgIC8vIGRvIGEgc2V0Q2hhbmdlZCgpIHdo
ZW4gc3VzcGVuZGVkCisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMudGFrZShyZW5kZXJlcik7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICBh
bmltYXRpb24tPnJlc2V0VHJhbnNpdGlvbnMocmVuZGVyZXIpOworICAgIGJvb2wgd2FzU3VzcGVu
ZGVkID0gYW5pbWF0aW9uLT5zdXNwZW5kZWQoKTsKICAgICBkZWxldGUgYW5pbWF0aW9uOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiAhd2FzU3VzcGVuZGVkOwogfQogCi12b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVUaW1lcigpCit2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKG1fbnVtU3R5bGVBdmFp
bGFibGVXYWl0ZXJzID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAg
ICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgeworICAgICAgICBpdC0+c2Vjb25kLT5zdHls
ZUF2YWlsYWJsZSgpOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXIoKQogewogICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7
Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+
OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJl
bmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0g
bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+YW5pbWF0aW5nKCkpIHsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgeworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29t
cEFuaW0tPmFuaW1hdGluZygpKSB7CiAgICAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGFuaW1hdGlu
ZykgewotICAgICAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fdGlt
ZXIuc3RhcnRSZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOwotICAgIH0gZWxzZSBpZiAo
bV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICAgICAgaWYg
KCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2FuaW1hdGlvblRp
bWVyLnN0YXJ0UmVwZWF0aW5nKGNBbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICB9IGVsc2UgaWYg
KG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9hbmltYXRpb25UaW1lci5z
dG9wKCk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qKQor
eworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CisgICAgfQorfQorCit2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIo
KQoreworICAgIGlmICghbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyLmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyLnN0YXJ0T25lU2hvdCgwKTsKKyAg
ICB9CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQoVGlt
ZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU+KiB0aW1lcikKIHsKICAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxs
IHdlIGRvIGlzIGNhbGwgc2V0Q2hhbmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBh
bmltYXRpb25zIGFuZCB0aGVuIGRvIGFuIGltbWVkaWF0ZQogICAgIC8vIHVwZGF0ZVJlbmRlcmlu
Zy4gIEl0IHdpbGwgdGhlbiBjYWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCiAg
ICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5l
bmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRB
bmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5hbmltYXRpbmcoKSkgeworICAgIFJl
bmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlv
bk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsg
CisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQo
KSAmJiBjb21wQW5pbS0+YW5pbWF0aW5nKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICBpdC0+Zmlyc3QtPmVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAg
ICAgICAgICAgY29tcEFuaW0tPnNldEFuaW1hdGluZyhmYWxzZSk7CisgICAgICAgICAgICBzZXRD
aGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwogICAgIAotICAgIHVwZGF0
ZVRpbWVyKCk7CisgICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKIH0KIAotQW5pbWF0aW9uQ29u
dHJvbGxlcjo6QW5pbWF0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCi06bV9kYXRhKG5ldyBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShmcmFtZSkpCitib29sIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjppc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9i
aiwgaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0
aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldChvYmopOworICAgIGlmICghYW5pbWF0aW9u
KSByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGFuaW1hdGlvbi0+aXNBbmltYXRpbmdQ
cm9wZXJ0eShwcm9wZXJ0eSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAg
ICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3Vt
ZW50KQorICAgICAgICAgICAgY29tcEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgfQor
ICAgIAorICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0Vu
ZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVn
aW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAocmVuZGVyZXItPmRvY3Vt
ZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAgICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9u
cygpOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOworfQorCisjcHJh
Z21hIG1hcmsgLQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsLCB3
ZSBkb24ndCBkbyB0cmFuc2l0aW9ucworICAgIGlmICghY3VycmVudFN0eWxlKQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0
ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCisgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiBhbmlt
ID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCk7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkp
IHsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gYW5pbS0+ZHVyYXRpb24oKTsKKyAgICAgICAg
ZG91YmxlIGRlbGF5ID0gYW5pbS0+ZGVsYXkoKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGFu
IGVtcHR5IHRyYW5zaXRpb24sIHNraXAgaXQKKyAgICAgICAgaWYgKGR1cmF0aW9uID09IDAgJiYg
ZGVsYXkgPD0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgCisgICAgICAgIGlu
dCBwcm9wID0gYW5pbS0+cHJvcGVydHkoKTsKKyAgICAgICAgYm9vbCBhbGwgPSBwcm9wID09IGNB
bmltYXRlQWxsOworICAgICAgICAKKyAgICAgICAgLy8gSGFuZGxlIGJvdGggdGhlICdhbGwnIGFu
ZCBzaW5nbGUgcHJvcGVydHkgY2FzZXMuIEZvciB0aGUgc2luZ2xlIHByb3AgY2FzZSwgd2UgbWFr
ZSBvbmx5IG9uZSBwYXNzCisgICAgICAgIC8vIHRocm91Z2ggdGhlIGxvb3AKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYWxsKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPj0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdldE51bVByb3BlcnRp
ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gZ2V0
IHRoZSBuZXh0IHByb3AKKyAgICAgICAgICAgICAgICBwcm9wID0gQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmdldFByb3BlcnR5QXRJbmRleChpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0aW9uIGZvciB0aGlzIHBy
b3AKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlv
bnMuZ2V0KHByb3ApOworICAgICAgICAgICAgYm9vbCBlcXVhbCA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChpbXBsQW5pbSkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJl
IGlzIG9uZSwgaGFzIG91ciB0YXJnZXQgY2hhbmdlZD8KKyAgICAgICAgICAgICAgICBpZiAoIWlt
cGxBbmltLT5pc1RhcmdldFByb3BlcnR5RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEl0IGhhcyBjaGFuZ2VkIC0gdG9zcyBpdCBhbmQgc3RhcnQgb3Zl
cgorICAgICAgICAgICAgICAgICAgICAvLyBPcGFjaXR5IGlzIHNwZWNpYWwgc2luY2UgaXQgY2Fu
IHBvcCBpbiBhbmQgb3V0IG9mIFJlbmRlckxheWVycy4gV2UgbmVlZCB0byBjb21wdXRlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBibGVuZGVkIG9wYWNpdHkgdmFsdWUgYmV0d2VlbiB0aGUg
cHJldmlvdXMgZnJvbSBhbmQgdG8gc3R5bGVzIGFuZCBwdXQgdGhhdCBpbiB0aGUgY3VycmVudFN0
eWxlLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlY29tZSB0aGUgbmV3IGZy
b21TdHlsZS4gVGhpcyBpcyBjaGFuZ2luZyBhIGNvbnN0IFJlbmRlclN0eWxlLCBidXQgd2Uga25v
dyB3aGF0IHdlIGFyZSBkb2luZywgcmVhbGx5IDotKQorICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvcCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGdldCB0aGUgYmxlbmRlZCB2YWx1ZSBvZiBvcGFjaXR5IGludG8gdGhlIGN1cnJlbnRTdHlsZSAo
d2hpY2ggd2lsbCBiZSB0aGUgbmV3IGZyb21TdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGltcGxBbmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5T3BhY2l0eSwg
Y3VycmVudFN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGltcGxBbmltLT5yZXNldChyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBpbXBsQW5pbTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJv
cCk7CisgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICBl
cXVhbCA9IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwg
Y3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghZXF1YWwpIHsKKyAgICAgICAgICAgICAgICAvLyBBQWRkIHRoZSBuZXcgdHJhbnNpdGlvbgor
ICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGlj
aXRBbmltYXRpb24oY29uc3RfY2FzdDxUcmFuc2l0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCB0aGlz
KTsKKyAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnNldChwcm9wLCBhbmltYXRpb24pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
b25lIHBhc3MgZm9yIHRoZSBzaW5nbGUgcHJvcCBjYXNlCisgICAgICAgICAgICBpZiAoIWFsbCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVuZGVyU3R5
bGUqIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7Cisg
ICAgUmVuZGVyU3R5bGUqIHJlc3VsdFN0eWxlID0gMDsKKyAgICAKKyAgICAvLyBXZSBkb24ndCBk
byBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3Rh
cnR1cCkKKyAgICB1cGRhdGVUcmFuc2l0aW9ucyhyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJn
ZXRTdHlsZSk7CisgICAgCisgICAgaWYgKGN1cnJlbnRTdHlsZSkgeworICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91
dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KKyAgICAgICAgLy8gdG8gZmlsbCBp
biBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCisgICAgICAgIENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Cisg
ICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qICBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGlmIChh
bmltKSB7CisgICAgICAgICAgICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlzLCByZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIGNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMocmVuZGVy
ZXIpOworICAgIAorICAgIHJldHVybiByZXN1bHRTdHlsZSA/IHJlc3VsdFN0eWxlIDogdGFyZ2V0
U3R5bGU7Cit9CisKKy8vICJhbmltYXRpbmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5p
bmcgdGhhdCByZXF1aXJlcyB0aGUgdGltZXIgdG8ga2VlcCBmaXJpbmcKKy8vIChlLmcuIGEgdHJh
bnNpdGlvbikKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBpbkFu
aW1hdGluZykKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBp
dC0+c2Vjb25kOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoaW5BbmltYXRpbmcp
OworICAgIH0KK30KKworYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGluZygpCit7Cisg
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+YW5pbWF0aW5nKCkgJiYgdHJhbnNp
dGlvbi0+cnVubmluZygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc2V0VHJhbnNpdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAo
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICB0cmFuc2l0aW9uLT5yZXNldChy
ZW5kZXJlcik7CisgICAgICAgIGRlbGV0ZSB0cmFuc2l0aW9uOworICAgIH0KKyAgICBtX3RyYW5z
aXRpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhbnVwRmlu
aXNoZWRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKHN1c3Bl
bmRlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gTWFrZSBhIGxpc3Qgb2YgdHJh
bnNpdGlvbnMgdG8gYmUgZGVsZXRlZAorICAgIFZlY3RvcjxpbnQ+IGZpbmlzaGVkVHJhbnNpdGlv
bnM7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKIAorICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmICghYW5pbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYW5p
bS0+cG9zdGFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZlbnQoKSkKKyAgICAgICAg
ICAgIGZpbmlzaGVkVHJhbnNpdGlvbnMuYXBwZW5kKGFuaW0tPnByb3BlcnR5KCkpOworICAgIH0K
KyAgICAKKyAgICAvLyBEZWxldGUgdGhlbQorICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9y
IGl0ID0gZmluaXNoZWRUcmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBmaW5pc2hlZFRyYW5zaXRp
b25zLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gbV90
cmFuc2l0aW9ucy5nZXQoKml0KTsKKyAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgIGFu
aW0tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGRlbGV0ZSBhbmltOworICAgICAgICB9
CisgICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKCppdCk7CisgICAgfQorfQorCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6c2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRv
dWJsZSB0KQoreworICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZSBmb3IgZ2l2ZW4gcHJvcGVydHkg
dHJhbnNpdGlvbgorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0YXJ0VGltZSgpICYmIAor
ICAgICAgICAgICAgICAgICAgICAoYW5pbS0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSB8fCBhbmlt
LT5wcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVN0
YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgdCk7
CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMo
KQoreworICAgIGlmIChtX3N1c3BlbmRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1f
c3VzcGVuZGVkID0gdHJ1ZTsKKworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAg
ICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAg
IGlmICghbV9zdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N1c3BlbmRl
ZCA9IGZhbHNlOworCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vj
b25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKSB7CisgICAgICAgICAg
ICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJv
cGVydHkpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoYW5pbSAmJiAoYW5pbS0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSB8fCBh
bmltLT5wcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0tPnNldE92
ZXJyaWRkZW4odHJ1ZSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVz
dW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCit7CisgICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5p
bSAmJiAoYW5pbS0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSB8fCBhbmltLT5wcm9wZXJ0eSgpID09
IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwor
ICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN0eWxlQXZhaWxhYmxlKCkKK3sK
KyAgICBpZiAobV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMgPT0gMCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkpCisg
ICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVf
SU5QVVRfU1RZTEVfQVZBSUxBQkxFLCAtMSk7CisgICAgfQorfQorCitib29sIENvbXBvc2l0ZUFu
aW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0Cit7CisgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAo
YW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNwcmFnbWEgbWFy
ayAtCisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKQorewor
ICAgIGlmICghcnVubmluZygpIHx8ICFtX29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5k
IHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVz
dCBmaW5pc2hlZCBhbmltYXRpb24uCisgICAgLy8gSWYgc28sIHNlbmQgYmFjayB0aGUgdGFyZ2V0
U3R5bGUgKGl0IHdpbGwgZ2V0IHRvc3NlZCBsYXRlcikKKyAgICBpZiAocG9zdGFjdGl2ZSgpKSB7
CisgICAgICAgIGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICAgICAgaW9BbmltYXRlZFN0
eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHRhcmdldFN0eWxlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdl
IGFyZSBuZXcKKyAgICBpZiAoaXNuZXcoKSkKKyAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJl
bnRTdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIAorICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1h
dGlvbi4KKyAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNv
IG1ha2Ugb25lIGlmIG5lZWRlZAorICAgIGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICBp
b0FuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHls
ZSgqdGFyZ2V0U3R5bGUpOworICAgIAorICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3MoMSwgMCk7
CisgICAgYm9vbCBuZWVkc0FuaW0gPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQ
cm9wZXJ0aWVzKG1fcHJvcGVydHksIGlvQW5pbWF0ZWRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9T
dHlsZSwgcHJvZyk7CisgICAgaWYgKG5lZWRzQW5pbSkKKyAgICAgICAgc2V0QW5pbWF0aW5nKCk7
Cit9CisKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdp
blRpbWUpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjplbmRBbmltYXRpb24oYm9vbCByZXNldCkKK3sKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlv
bjo6b25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgLy8gd2UncmUg
Y29udmVydGluZyB0aGUgYW5pbWF0aW9uIGludG8gYSB0cmFuc2l0aW9uIGhlcmUKKyAgICBpZiAo
IXNlbmRUcmFuc2l0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50
LCBpbkVsYXBzZWRUaW1lKSkgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZl
bnQsIHdoaWNoIHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xsIGp1c3QgZW5kCisg
ICAgICAgIC8vIGl0IGhlcmUuCisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAgICB9Cit9
CisKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgcmV0
dXJuIGZhbHNlOyAvLyBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQKK30KKwordm9pZCBJbXBsaWNp
dEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20gLyogPSAwICovLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gLyogPSAwICovKQorewor
ICAgIEFTU0VSVCgoIW1fdG9TdHlsZSAmJiAhdG8pIHx8IG1fdG9TdHlsZSAhPSB0byk7CisgICAg
QVNTRVJUKCghbV9mcm9tU3R5bGUgJiYgIWZyb20pIHx8IG1fZnJvbVN0eWxlICE9IGZyb20pOwor
ICAgIGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5bGUtPmRlcmVmKHJlbmRlcmVy
LT5yZW5kZXJBcmVuYSgpKTsKKyAgICBpZiAobV90b1N0eWxlKQorICAgICAgICBtX3RvU3R5bGUt
PmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAgICAKKyAgICBtX2Zyb21TdHlsZSA9
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihmcm9tKTsgICAvLyBpdCBpcyByZWFkLW9ubHksIG90
aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5
bGUtPnJlZigpOworICAgIAorICAgIG1fdG9TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUq
Pih0byk7ICAgICAgIC8vIGl0IGlzIHJlYWQtb25seSwgb3RoZXIgdGhhbiB0aGUgcmVmCisgICAg
aWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5yZWYoKTsKKyAgICAKKyAgICAvLyBy
ZXN0YXJ0IHRoZSB0cmFuc2l0aW9uCisgICAgaWYgKGZyb20gJiYgdG8pCisgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgLTEpOworfQorCit2
b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpzZXRPdmVycmlkZGVuKGJvb2wgYikKK3sKKyAgICBpZiAo
YiAhPSBtX292ZXJyaWRkZW4pIHsKKyAgICAgICAgbV9vdmVycmlkZGVuID0gYjsKKyAgICAgICAg
dXBkYXRlU3RhdGVNYWNoaW5lKG1fb3ZlcnJpZGRlbiA/IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJS
SURFIDogU1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFLCAtMSk7CisgICAgfQorfQorCitib29s
IEltcGxpY2l0QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAor
eworICAgIHJldHVybiBtX3Byb3BlcnR5ID09IHByb3BlcnR5IHx8CisgICAgKG1fcHJvcGVydHkg
PT0gY0FuaW1hdGVBbGwgJiYgIUFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVz
RXF1YWwocHJvcGVydHksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUpKTsKK30KKworYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKGludCBwcm9wLCBSZW5kZXJTdHls
ZSogdGFyZ2V0U3R5bGUpCit7CisgICAgcmV0dXJuIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLCB0YXJnZXRTdHlsZSk7Cit9CisKK3Zv
aWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50IHByb3As
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpCit7CisgICAgZG91YmxlIHByb2cgPSBwcm9ncmVz
cygxLCAwKTsKKyAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQcm9wZXJ0aWVz
KHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7Cit9ICAg
IAorCisjcHJhZ21hIG1hcmsgLQorCitBbmltYXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250
cm9sbGVyKEZyYW1lKiBmcmFtZSkKKzogbV9kYXRhKG5ldyBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZShmcmFtZSkpCit7CisgICAgCiB9CiAKIEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRp
b25Db250cm9sbGVyKCkKQEAgLTU2Niw1MCArMTcxNSw4NyBAQCBBbmltYXRpb25Db250cm9sbGVy
Ojp+QW5pbWF0aW9uQ29udHJvbGxlcigpCiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBB
bmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxJbXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIGlmICghbV9kYXRhLT5oYXNJbXBsaWNpdEFu
aW1hdGlvbnMoKSkKKyAgICBpZiAoIW1fZGF0YS0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICBy
ZXR1cm47Ci0KKyAgICAKICAgICBpZiAobV9kYXRhLT5jbGVhcihyZW5kZXJlcikpCi0gICAgICAg
IHJlbmRlcmVyLT5lbGVtZW50KCktPnNldENoYW5nZWQoKTsKKyAgICAgICAgc2V0Q2hhbmdlZChy
ZW5kZXJlci0+ZWxlbWVudCgpKTsKIH0KIAotUmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnVwZGF0ZUltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUpCi17CitSZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3
U3R5bGUpCit7ICAgIAorICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBj
YWNoZQorICAgIGlmICghcmVuZGVyZXItPmRvY3VtZW50KCkgfHwgcmVuZGVyZXItPmRvY3VtZW50
KCktPmluUGFnZUNhY2hlKCkpCisgICAgICAgIHJldHVybiBuZXdTdHlsZTsKKyAgICAKKyAgICBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAKKyAgICBpZiAo
KCFvbGRTdHlsZSB8fCAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpICYmICFuZXdTdHlsZS0+dHJh
bnNpdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0
eWxlKiBibGVuZGVkU3R5bGUgPSBuZXdTdHlsZTsKKyAgICAKICAgICAvLyBGZXRjaCBvdXIgY3Vy
cmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiAgV2UgdGhl
biBjb21wYXJlIHRoZW0KICAgICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRpb25zIGluIHRoZSBzdHls
ZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGluIHN5bmMuICBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKICAg
ICAvLyBoYXZlIGNoYW5nZWQsIHdlIHJlc2V0IHRoZSBhbmltYXRpb24uICBXZSB0aGVuIGRvIGEg
YmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgogICAgIC8vIGEgbmV3IHN0eWxl
LgogICAgIEFTU0VSVChyZW5kZXJlci0+ZWxlbWVudCgpKTsgLy8gRklYTUU6IFdlIGRvIG5vdCBh
bmltYXRlIGdlbmVyYXRlZCBjb250ZW50IHlldC4KLQotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBhbmltYXRpb24gPSBtX2RhdGEtPmdldChyZW5kZXJlciwgbmV3U3R5bGUpOwotICAg
IGlmICghYW5pbWF0aW9uICYmICFuZXdTdHlsZS0+dHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0
dXJuIG5ld1N0eWxlOwotCi0gICAgUmVuZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9IGFuaW1hdGlv
bi0+YW5pbWF0ZShyZW5kZXJlciwgcmVuZGVyZXItPnN0eWxlKCksIG5ld1N0eWxlKTsKLSAgICBt
X2RhdGEtPnVwZGF0ZVRpbWVyKCk7Ci0KKyAgICAKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIHJl
bmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKHJlbmRl
cmVyKTsKKyAgICBibGVuZGVkU3R5bGUgPSByZW5kZXJlckFuaW1hdGlvbnMtPmFuaW1hdGUocmVu
ZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7CisgICAgCisgICAgbV9kYXRhLT51cGRhdGVBbmlt
YXRpb25UaW1lcigpOworICAgIAogICAgIGlmIChibGVuZGVkU3R5bGUgIT0gbmV3U3R5bGUpIHsK
LSAgICAgICAgLy8gRG8gc29tZSBvZiB0aGUgd29yayB0aGF0IENTU1N0eWxlU2VsZWN0b3I6OmFk
anVzdFJlbmRlclN0eWxlKCkgZG9lcywgdG8gaW1wb3NlIHJ1bGVzCi0gICAgICAgIC8vIGxpa2Ug
b3BhY2l0eSBjcmVhdGluZyBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAvLyBJZiB0aGUgYW5p
bWF0aW9ucy90cmFuc2l0aW9ucyBjaGFuZ2Ugb3BhY2l0eSBvciB0cmFuc2Zvcm0sIHdlIG5lZWVk
IHRvIHVwZGF0ZQorICAgICAgICAvLyB0aGUgc3R5bGUgdG8gaW1wb3NlIHRoZSBzdGFja2luZyBy
dWxlcy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbworICAgICAgICAvLyBkb25lIGluIENTU1N0eWxl
U2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKCkuCiAgICAgICAgIGlmIChibGVuZGVkU3R5bGUt
Pmhhc0F1dG9aSW5kZXgoKSAmJiAoYmxlbmRlZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IGJs
ZW5kZWRTdHlsZS0+aGFzVHJhbnNmb3JtKCkpKQogICAgICAgICAgICAgYmxlbmRlZFN0eWxlLT5z
ZXRaSW5kZXgoMCk7CiAgICAgfQotCiAgICAgcmV0dXJuIGJsZW5kZWRTdHlsZTsKIH0KIAotdm9p
ZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygpCitib29sIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCog
b2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+aXNBbmltYXRp
bmdQcm9wZXJ0eU9uUmVuZGVyZXIob2JqLCBwcm9wZXJ0eSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAg
IC8vIEZJWE1FOiBXYWxrIHRoZSB3aG9sZSBoYXNodGFibGUgYW5kIGNhbGwgcGF1c2Ugb24gZWFj
aCBhbmltYXRpb24uCi0gICAgLy8gS2lsbCBvdXIgdGltZXIuCisjaWZkZWYgREVCVUdfU1RBVEVf
TUFDSElORQorICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uQ29udHJvbGxlciAlcCBzdXNw
ZW5kQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNlbmRp
ZgorICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwogfQogCi12b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQordm9pZCBBbmltYXRpb25Db250
cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICAvLyBG
SVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRhYmxlIGFuZCBjYWxsIHJlc3VtZSBvbiBlYWNoIGFu
aW1hdGlvbi4KLSAgICAvLyBTdGFydCBvdXIgdGltZXIuCisjaWZkZWYgREVCVUdfU1RBVEVfTUFD
SElORQorICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uQ29udHJvbGxlciAlcCByZXN1bWVB
bmltYXRpb25zIGZvciBkb2N1bWVudCAlcFxuIiwgdGhpcywgZG9jdW1lbnQpOworI2VuZGlmCisg
ICAgbV9kYXRhLT5yZXN1bWVBbmltYXRpb25zKGRvY3VtZW50KTsKIH0KIAordm9pZCBBbmltYXRp
b25Db250cm9sbGVyOjpzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKQoreworICAgIG1f
ZGF0YS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7Cit9CisKK3ZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlcjo6c3R5bGVBdmFpbGFibGUoKQoreworICAgIG1fZGF0YS0+c3R5bGVBdmFp
bGFibGUoKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdHls
ZUF2YWlsYWJsZShib29sIHdhaXRpbmcpCit7CisgICAgaWYgKHdhaXRpbmcpCisgICAgICAgIG1f
bnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7CisgICAgZWxzZQorICAgICAgICBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycy0tOworICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c2V0V2FpdGlu
Z0ZvclN0eWxlQXZhaWxhYmxlKHdhaXRpbmcpOworfQorICAgIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvcGFnZS9BbmltYXRpb25D
b250cm9sbGVyLmgKaW5kZXggZmRhMTE0My4uOTBjNDlkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29u
dHJvbGxlci5oCkBAIC0yOSw5ICsyOSwxMiBAQAogI2lmbmRlZiBBbmltYXRpb25Db250cm9sbGVy
X2gKICNkZWZpbmUgQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVy
T2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CkBAIC00MiwxNCArNDUsMjIgQEAgcHVibGljOgog
ICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqKTsKICAgICB+QW5pbWF0aW9uQ29udHJvbGxl
cigpOwogICAgIAotICAgIHZvaWQgY2FuY2VsSW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVj
dCopOwotICAgIFJlbmRlclN0eWxlKiB1cGRhdGVJbXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMo
UmVuZGVyT2JqZWN0Kik7CisgICAgUmVuZGVyU3R5bGUqIHVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVy
T2JqZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKKyAgICAKKyAgICBib29sIGlzQW5pbWF0
aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNv
bnN0OworICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50
KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2
b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CiAgICAgCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworICAgIHZvaWQgc3RhcnRVcGRh
dGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgCisgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgp
OwogICAgIAogcHJpdmF0ZToKICAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogbV9kYXRh
OworICAgIAogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzMwYzk3Mi4uOGFhZTNhNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0x
NDgwLDcgKzE0ODAsNyBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycyhGcmFtZVZpZXcgKnZpZXcs
IERvY3VtZW50ICpkb2N1bWVudCkKICAgICAgICAgaWYgKHZpZXctPmZyYW1lKCkpIHsKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+
cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+c3VzcGVuZE1hcnF1ZWVzKCk7Ci0gICAgICAgICAgICB2aWV3LT5mcmFt
ZSgpLT5hbmltYXRpb24oKS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHZpZXct
PmZyYW1lKCktPmFuaW1hdGlvbigpLT5zdXNwZW5kQW5pbWF0aW9ucyhkb2N1bWVudCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAxNDVlNDc2
Li5jNDllMWNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTIxNTYsNyArMjE1
Niw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlvbkNoYW5n
ZSgpCiB2b2lkIFJlbmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKICAgICBpZiAoIWlzVGV4dCgpICYmIG1fc3R5bGUgJiYgc3R5bGUpCi0gICAgICAg
IHN0eWxlID0gYW5pbWF0aW9uKCktPnVwZGF0ZUltcGxpY2l0QW5pbWF0aW9ucyh0aGlzLCBzdHls
ZSk7CisgICAgICAgIHN0eWxlID0gYW5pbWF0aW9uKCktPnVwZGF0ZUFuaW1hdGlvbnModGhpcywg
c3R5bGUpOwogCiAgICAgc2V0U3R5bGUoc3R5bGUpOwogfQpAQCAtMjUzNSw3ICsyNTM1LDcgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKQogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCkt
PnJlbW92ZSh0aGlzKTsKIAotICAgIGFuaW1hdGlvbigpLT5jYW5jZWxJbXBsaWNpdEFuaW1hdGlv
bnModGhpcyk7CisgICAgYW5pbWF0aW9uKCktPmNhbmNlbEFuaW1hdGlvbnModGhpcyk7CiAKICAg
ICAvLyBCeSBkZWZhdWx0IG5vIHJlZi1jb3VudGluZy4gUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkg
ZG9lc24ndCBjYWxsCiAgICAgLy8gdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IG5lZWRzIHRvIGRv
IHJlZi1jb3VudGluZy4gSWYgYW55dGhpbmcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmlu
ZGV4IDg3ZDg0NDUuLmEzNzdhZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAt
NzIsNyArNzIsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpCiAgICAgLy8gU28gdGhl
IGNvZGUgYmVsb3cgaW5jbHVkZXMgY29waWVkIGFuZCBwYXN0ZWQgY29udGVudHMgb2YKICAgICAv
LyBib3RoIFJlbmRlckJveDo6ZGVzdHJveSgpIGFuZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKS4K
ICAgICAvLyBGaXggb3JpZ2luYWxseSBtYWRlIGZvciA8cmRhcjovL3Byb2JsZW0vNDIyODgxOD4u
Ci0gICAgYW5pbWF0aW9uKCktPmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyh0aGlzKTsKKyAgICBh
bmltYXRpb24oKS0+Y2FuY2VsQW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIGlmIChSZW5kZXJWaWV3
KiB2ID0gdmlldygpKQogICAgICAgICB2LT5yZW1vdmVXaWRnZXQodGhpcyk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggZmFmZjdlMC4uMzczZDlkYyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtNjY1LDExMCArNjY1LDg3IEBA
IFRyYW5zZm9ybU9wZXJhdGlvbiogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyCiB9CiAKIFRyYW5zaXRpb246OlRyYW5zaXRpb24oKQot
ICAgIDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigp
KQotICAgICwgbV9yZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25SZXBl
YXRDb3VudCgpKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKQotICAgICwgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6
aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKQorICAgIDogbV9kdXJhdGlvbihSZW5kZXJTdHls
ZTo6aW5pdGlhbER1cmF0aW9uKCkpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxl
Ojppbml0aWFsVGltaW5nRnVuY3Rpb24oKSkKKyAgICAsIG1fZGVsYXkoUmVuZGVyU3R5bGU6Omlu
aXRpYWxEZWxheSgpKQorICAgICwgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3Bl
cnR5KCkpCiAgICAgLCBtX2R1cmF0aW9uU2V0KGZhbHNlKQotICAgICwgbV9yZXBlYXRDb3VudFNl
dChmYWxzZSkKICAgICAsIG1fdGltaW5nRnVuY3Rpb25TZXQoZmFsc2UpCisgICAgLCBtX2RlbGF5
U2V0KGZhbHNlKQogICAgICwgbV9wcm9wZXJ0eVNldChmYWxzZSkKICAgICAsIG1fbmV4dCgwKQog
ewogfQogCiBUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pCi0gICAg
OiBtX2R1cmF0aW9uKG8ubV9kdXJhdGlvbikKLSAgICAsIG1fcmVwZWF0Q291bnQoby5tX3JlcGVh
dENvdW50KQorICAgIDogUmVmQ291bnRlZDxUcmFuc2l0aW9uPigpCisgICAgLCBtX2R1cmF0aW9u
KG8ubV9kdXJhdGlvbikKICAgICAsIG1fdGltaW5nRnVuY3Rpb24oby5tX3RpbWluZ0Z1bmN0aW9u
KQorICAgICwgbV9kZWxheShvLm1fZGVsYXkpCiAgICAgLCBtX3Byb3BlcnR5KG8ubV9wcm9wZXJ0
eSkKICAgICAsIG1fZHVyYXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQotICAgICwgbV9yZXBlYXRD
b3VudFNldChvLm1fcmVwZWF0Q291bnRTZXQpCiAgICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0KG8u
bV90aW1pbmdGdW5jdGlvblNldCkKKyAgICAsIG1fZGVsYXlTZXQoby5tX2RlbGF5U2V0KQogICAg
ICwgbV9wcm9wZXJ0eVNldChvLm1fcHJvcGVydHlTZXQpCi0gICAgLCBtX25leHQoby5tX25leHQg
PyBuZXcgVHJhbnNpdGlvbigqby5tX25leHQpIDogMCkKKyAgICAsIG1fbmV4dChvLm1fbmV4dCA/
IG5ldyBUcmFuc2l0aW9uKCooby5tX25leHQuZ2V0KCkpKSA6IDApCiB7CiB9CiAKLVRyYW5zaXRp
b246On5UcmFuc2l0aW9uKCkKLXsKLSAgICBkZWxldGUgbV9uZXh0OwotfQotCiBUcmFuc2l0aW9u
JiBUcmFuc2l0aW9uOjpvcGVyYXRvcj0oY29uc3QgVHJhbnNpdGlvbiYgbykKIHsKICAgICBpZiAo
bV9uZXh0ICE9IG8ubV9uZXh0KSB7Ci0gICAgICAgIGRlbGV0ZSBtX25leHQ7Ci0gICAgICAgIG1f
bmV4dCA9IG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDA7CisgICAgICAg
IG1fbmV4dCA9IG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKihvLm1fbmV4dC5nZXQoKSkpIDog
MDsKICAgICB9CiAKKyAgICBtX2RlbGF5ID0gby5tX2RlbGF5OwogICAgIG1fZHVyYXRpb24gPSBv
Lm1fZHVyYXRpb247Ci0gICAgbV9yZXBlYXRDb3VudCA9IG8ubV9yZXBlYXRDb3VudDsKICAgICBt
X3RpbWluZ0Z1bmN0aW9uID0gby5tX3RpbWluZ0Z1bmN0aW9uOwogICAgIG1fcHJvcGVydHkgPSBv
Lm1fcHJvcGVydHk7CiAKKyAgICBtX2RlbGF5U2V0ID0gby5tX2RlbGF5U2V0OwogICAgIG1fZHVy
YXRpb25TZXQgPSBvLm1fZHVyYXRpb25TZXQ7Ci0gICAgbV9yZXBlYXRDb3VudFNldCA9IG8ubV9y
ZXBlYXRDb3VudFNldDsKICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0
aW9uU2V0OwogICAgIG1fcHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7CiAKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKLWJvb2wgVHJhbnNpdGlvbjo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2l0
aW9uJiBvKSBjb25zdAorYm9vbCBUcmFuc2l0aW9uOjp0cmFuc2l0aW9uc01hdGNoKGNvbnN0IFRy
YW5zaXRpb24qIG8pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb24gPT0gby5tX2R1cmF0
aW9uICYmIG1fcmVwZWF0Q291bnQgPT0gby5tX3JlcGVhdENvdW50ICYmIG1fdGltaW5nRnVuY3Rp
b24gPT0gby5tX3RpbWluZ0Z1bmN0aW9uICYmCi0gICAgICAgICAgIG1fcHJvcGVydHkgPT0gby5t
X3Byb3BlcnR5ICYmIG1fZHVyYXRpb25TZXQgPT0gby5tX2R1cmF0aW9uU2V0ICYmIG1fcmVwZWF0
Q291bnRTZXQgPT0gby5tX3JlcGVhdENvdW50U2V0ICYmCi0gICAgICAgICAgIG1fdGltaW5nRnVu
Y3Rpb25TZXQgPT0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0ICYmIG1fcHJvcGVydHlTZXQgPT0gby5t
X3Byb3BlcnR5U2V0ICYmCi0gICAgICAgICAgICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICptX25l
eHQgPT0gKm8ubV9uZXh0IDogbV9uZXh0ID09IG8ubV9uZXh0KTsKKyAgICBpZiAoIW8pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IG1fZHVyYXRpb24gPT0g
by0+bV9kdXJhdGlvbiAmJgorICAgICAgICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvbiA9PSBv
LT5tX3RpbWluZ0Z1bmN0aW9uICYmCisgICAgICAgICAgICAgICAgICBtX2RlbGF5ID09IG8tPm1f
ZGVsYXkgJiYKKyAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHkgPT0gby0+bV9wcm9wZXJ0eSAm
JiAKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlvblNldCAm
JiAKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1pbmdG
dW5jdGlvblNldCAmJiAKKyAgICAgICAgICAgICAgICAgIG1fZGVsYXlTZXQgPT0gby0+bV9kZWxh
eVNldCAmJgorICAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5
U2V0OworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgRklMTF9VTlNFVF9Q
Uk9QRVJUWSh0ZXN0LCBwcm9wKSBcCitmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPnRl
c3QoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9IFwKK2lmIChjdXJyICYmIGN1cnIgIT0gdGhp
cykgeyBcCisvKiBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0
aGUgcGF0dGVybiBzcGVjaWZpZWQuICovIFwKK2ZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRo
aXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgXAorY3Vyci0+cHJvcCA9IHBhdHRlcm4t
PnByb3A7IFwKK3BhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7IFwKK2lmIChwYXR0ZXJuID09IGN1
cnIgfHwgIXBhdHRlcm4pIFwKK3BhdHRlcm4gPSB0aGlzOyBcCit9IFwKIH0KIAogdm9pZCBUcmFu
c2l0aW9uOjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKIHsKICAgICBUcmFuc2l0aW9uKiBjdXJyOwot
ICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNEdXJhdGlvblNldCgpOyBjdXJy
ID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAg
ICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhl
IHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0
aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5tX2R1
cmF0aW9uID0gcGF0dGVybi0+bV9kdXJhdGlvbjsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0
ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJu
KQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNSZXBlYXRDb3VudFNldCgp
OyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMp
IHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdp
dGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBhdHRl
cm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJy
LT5tX3JlcGVhdENvdW50ID0gcGF0dGVybi0+bV9yZXBlYXRDb3VudDsKLSAgICAgICAgICAgIHBh
dHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJy
IHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNUaW1p
bmdGdW5jdGlvblNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAm
JiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1h
aW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRy
YW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0g
ICAgICAgICAgICBjdXJyLT5tX3RpbWluZ0Z1bmN0aW9uID0gcGF0dGVybi0+bV90aW1pbmdGdW5j
dGlvbjsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRl
cm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChjdXJyID0gdGhpczsgY3Vy
ciAmJiBjdXJyLT5pc1Byb3BlcnR5U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfQotICAg
IGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbGwg
aW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQuCi0gICAg
ICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fcHJvcGVydHkgPSBwYXR0ZXJuLT5tX3Byb3Bl
cnR5OwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAgICAgICAg
IGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAgcGF0dGVy
biA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1
cmF0aW9uU2V0LCBtX2R1cmF0aW9uKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzVGltaW5n
RnVuY3Rpb25TZXQsIG1fdGltaW5nRnVuY3Rpb24pOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFko
aXNEZWxheVNldCwgbV9kZWxheSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5
U2V0LCBtX3Byb3BlcnR5KTsKIH0KIAogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YSgpCkBAIC04MjUsNyArODAyLDYgQEAgU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YTo6flN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoKQogICAgIGRlbGV0ZSBtX2Nv
bnRlbnQ7CiAgICAgZGVsZXRlIG1fY291bnRlckRpcmVjdGl2ZXM7CiAgICAgZGVsZXRlIG1fYm94
U2hhZG93OwotICAgIGRlbGV0ZSBtX3RyYW5zaXRpb247CiAjaWYgRU5BQkxFKFhCTCkKICAgICBk
ZWxldGUgYmluZGluZ1VSSTsKICNlbmRpZgpAQCAtMTg3MSwzMiArMTg0Nyw1OCBAQCBjb25zdCBW
ZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiBSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJl
Z2lvbnMoKQogdm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlvbnMoKQogewogICAgIGlm
ICh0cmFuc2l0aW9ucygpKSB7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9ucygpLT5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaWYgKHRyYW5zaXRpb25zKCktPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7
CiAgICAgICAgICAgICBjbGVhclRyYW5zaXRpb25zKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBUcmFuc2l0aW9uKiBuZXh0OwogICAgICAgICBmb3IgKFRyYW5z
aXRpb24qIHAgPSBhY2Nlc3NUcmFuc2l0aW9ucygpOyBwOyBwID0gbmV4dCkgewotICAgICAgICAg
ICAgbmV4dCA9IHAtPm1fbmV4dDsKKyAgICAgICAgICAgIG5leHQgPSBwLT5uZXh0KCk7CiAgICAg
ICAgICAgICBpZiAobmV4dCAmJiBuZXh0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgbmV4dDsKLSAgICAgICAgICAgICAgICBwLT5tX25leHQgPSAwOworICAgICAgICAgICAg
ICAgIHAtPnNldE5leHQoMCk7IC8vIHJlbW92ZXMgdGhlIHJlZiwgc28gbmV4dCBnZXRzIGRlbGV0
ZWQKKyAgICAgICAgICAgICAgICBuZXh0ID0gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAorCisgICAgICAgIGlmICghdHJhbnNpdGlvbnMo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50
byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNvbWUgcHJvcGVydGllcyBzZXQuCiAgICAgICAgIGFj
Y2Vzc1RyYW5zaXRpb25zKCktPmZpbGxVbnNldFByb3BlcnRpZXMoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIHByb3BlcnRpZXMuIFRoaXMg
aXMgYW4gTyhuXjIpIGFsZ29yaXRobQorICAgICAgICAvLyBidXQgdGhlIGxpc3RzIHRlbmQgdG8g
YmUgdmVyeSBzaG9ydCwgc28gaXQgaXMgcHJvYmFibHkgb2sKKyAgICAgICAgVHJhbnNpdGlvbiog
cHJldmkgPSAwOworICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBpID0gYWNjZXNzVHJhbnNpdGlv
bnMoKTsgcGk7ICkgeworICAgICAgICAgICAgVHJhbnNpdGlvbiogbmV4dGkgPSBwaS0+bmV4dCgp
OworICAgICAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwaiA9IG5leHRpOyBwajsgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBpLT5wcm9wZXJ0eSgpID09IHBqLT5wcm9wZXJ0eSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIHRvc3MgcGkKKyAgICAgICAgICAgICAgICAgICAgcGkgPSBwaS0+
bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldmkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2aS0+c2V0TmV4dChwaSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3Ry
YW5zaXRpb24gPSBwaTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dGkgPSBwaS0+bmV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICBwaiA9IG5leHRpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBqID0gcGotPm5leHQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXZpID0gcGk7CisgICAgICAgICAgICBwaSA9IG5l
eHRpOworICAgICAgICB9CiAgICAgfQogfQogCiBUcmFuc2l0aW9uKiBSZW5kZXJTdHlsZTo6YWNj
ZXNzVHJhbnNpdGlvbnMoKQogewotICAgIFRyYW5zaXRpb24qIGxheWVyID0gcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbjsKKyAgICBUcmFuc2l0aW9uKiBsYXllciA9
IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24uZ2V0KCk7CiAgICAg
aWYgKCFsYXllcikKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJh
bnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCk7Ci0gICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX3RyYW5zaXRpb247CisgICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Ry
YW5zaXRpb24uZ2V0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmggYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CmluZGV4IGViYWI4YjYuLmJlMjlmYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaApAQCAtMTI1Nyw1OCArMTI1Nyw2OSBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwog
fTsKIAotc3RydWN0IFRyYW5zaXRpb24geworY2xhc3MgVHJhbnNpdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFRyYW5zaXRpb24+IHsKIHB1YmxpYzoKICAgICBUcmFuc2l0aW9uKCk7Ci0gICAgflRy
YW5zaXRpb24oKTsKIAotICAgIFRyYW5zaXRpb24qIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25l
eHQ7IH0KLSAgICBUcmFuc2l0aW9uKiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0OyB9CisgICAgY29u
c3QgVHJhbnNpdGlvbiogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAg
IFRyYW5zaXRpb24qIG5leHQoKSB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KIAorICAgIGJvb2wg
aXNEZWxheVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXlTZXQ7IH0KICAgICBib29sIGlzRHVy
YXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uU2V0OyB9Ci0gICAgYm9vbCBpc1Jl
cGVhdENvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRDb3VudFNldDsgfQogICAgIGJv
b2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb25T
ZXQ7IH0KICAgICBib29sIGlzUHJvcGVydHlTZXQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5
U2V0OyB9Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZHVyYXRp
b25TZXQgJiYgIW1fcmVwZWF0Q291bnRTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1f
cHJvcGVydHlTZXQ7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKCFtX2R1cmF0aW9uU2V0ICYmICFtX2RlbGF5U2V0ICYmICFtX3RpbWluZ0Z1bmN0
aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHlPclpl
cm9EdXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbXB0eSgpIHx8ICht
X2R1cmF0aW9uID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
RGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJhdGlvbigp
IHsgbV9kdXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclJlcGVhdENvdW50KCkg
eyBtX3JlcGVhdENvdW50U2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNsZWFyVGltaW5nRnVuY3Rp
b24oKSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxzZTsgfQorCiAgICAgdm9pZCBjbGVhclBy
b3BlcnR5KCkgeyBtX3Byb3BlcnR5U2V0ID0gZmFsc2U7IH0KIAotICAgIGludCBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBpbnQgcmVwZWF0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3JlcGVhdENvdW50OyB9CisgICAgZG91YmxlIGRlbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWxheTsgfQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uOyB9CiAgICAgaW50IHByb3BlcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQotICAgIAotICAgIHZvaWQgc2V0RHVyYXRpb24oaW50
IGQpIHsgbV9kdXJhdGlvbiA9IGQ7IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBz
ZXRSZXBlYXRDb3VudChpbnQgYykgeyBtX3JlcGVhdENvdW50ID0gYzsgbV9yZXBlYXRDb3VudFNl
dCA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0RGVsYXkoZG91YmxlIGMpIHsgbV9kZWxheSA9IGM7
IG1fZGVsYXlTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUgZCkgeyBB
U1NFUlQoZCA+PSAwKTsgbV9kdXJhdGlvbiA9IGQ7IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9CiAg
ICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiYgZikgeyBtX3Rp
bWluZ0Z1bmN0aW9uID0gZjsgbV90aW1pbmdGdW5jdGlvblNldCA9IHRydWU7IH0KICAgICB2b2lk
IHNldFByb3BlcnR5KGludCB0KSB7IG1fcHJvcGVydHkgPSB0OyBtX3Byb3BlcnR5U2V0ID0gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0TmV4dChUcmFuc2l0aW9uKiBuKSB7IGlmIChtX25leHQuZ2V0KCkg
IT0gbikgeyBtX25leHQgPSBuOyB9IH0KIAotICAgIHZvaWQgc2V0TmV4dChUcmFuc2l0aW9uKiBu
KSB7IGlmIChtX25leHQgIT0gbikgeyBkZWxldGUgbV9uZXh0OyBtX25leHQgPSBuOyB9IH0KLQot
ICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBUcmFuc2l0aW9uJiBvKTsgICAgCisgICAg
VHJhbnNpdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24mIG8pOwogICAgIFRyYW5zaXRp
b24oY29uc3QgVHJhbnNpdGlvbiYgbyk7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJh
bnNpdGlvbiYgbykgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zaXRpb24m
IG8pIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7Ci0gICAgfQorICAgIC8v
IHJldHVybiB0cnVlIGlmIGFsbCBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgbWF0Y2ggKGV4Y2x1ZGlu
ZyBtX25leHQpCisgICAgYm9vbCB0cmFuc2l0aW9uc01hdGNoKGNvbnN0IFRyYW5zaXRpb24qIHQp
IGNvbnN0OworCisgICAgLy8gcmV0dXJuIHRydWUgZXZlcnkgdHJhbnNpdGlvbiBpbiB0aGUgY2hh
aW4gKGRlZmluZWQgYnkgbV9uZXh0KSBtYXRjaCAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VHJhbnNpdGlvbiYgbykgY29uc3QgeyByZXR1cm4gdHJhbnNpdGlvbnNNYXRjaCgmbykgJiYgKCht
X25leHQgJiYgby5tX25leHQpID8gKCptX25leHQgPT0gKm8ubV9uZXh0KSA6IChtX25leHQgPT0g
by5tX25leHQpKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcmFuc2l0aW9uJiBvKSBj
b25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAKICAgICB2b2lkIGZpbGxVbnNldFByb3Bl
cnRpZXMoKTsKIAotICAgIGludCBtX2R1cmF0aW9uOwotICAgIGludCBtX3JlcGVhdENvdW50Owor
cHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKICAgICBUaW1pbmdGdW5jdGlvbiBtX3Rp
bWluZ0Z1bmN0aW9uOworICAgIGRvdWJsZSBtX2RlbGF5OwogICAgIGludCBtX3Byb3BlcnR5Owog
Ci0gICAgYm9vbCBtX2R1cmF0aW9uU2V0OwotICAgIGJvb2wgbV9yZXBlYXRDb3VudFNldDsKLSAg
ICBib29sIG1fdGltaW5nRnVuY3Rpb25TZXQ7Ci0gICAgYm9vbCBtX3Byb3BlcnR5U2V0OwotCi0g
ICAgVHJhbnNpdGlvbiogbV9uZXh0OworICAgIGJvb2wgbV9kdXJhdGlvblNldCAgICAgICA6IDE7
CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0IDogMTsKKyAgICBib29sIG1fZGVsYXlTZXQg
ICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wcm9wZXJ0eVNldCAgICAgICA6IDE7CisgICAgCisg
ICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fbmV4dDsKIH07CiAKIGNsYXNzIFN0eWxlUmVmbGVjdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4gewpAQCAtMTM4OSw3ICsxNDAw
LDcgQEAgcHVibGljOgogICAgIAogICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IG1fYm94UmVm
bGVjdDsKIAotICAgIFRyYW5zaXRpb24qIG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8VHJhbnNp
dGlvbj4gbV90cmFuc2l0aW9uOwogCiAgICAgRmlsbExheWVyIG1fbWFzazsKICAgICBOaW5lUGll
Y2VJbWFnZSBtX21hc2tCb3hJbWFnZTsKQEAgLTIwMzAsOSArMjA0MSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJhY2tncm91bmQtPm1fb3V0bGluZS5fb2Zmc2V0OwogICAgIH0KICAgICBT
aGFkb3dEYXRhKiB0ZXh0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEt
PnRleHRTaGFkb3c7IH0KLSAgICBDb2xvciB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVy
biByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9yOyB9CisgICAgY29uc3QgQ29sb3Im
IHRleHRTdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0
U3Ryb2tlQ29sb3I7IH0KICAgICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVy
biByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFN0cm9rZVdpZHRoOyB9Ci0gICAgQ29sb3IgdGV4dEZp
bGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0RmlsbENvbG9y
OyB9CisgICAgY29uc3QgQ29sb3ImIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJl
SW5oZXJpdGVkRGF0YS0+dGV4dEZpbGxDb2xvcjsgfQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+b3BhY2l0eTsgfQogICAgIEVBcHBlYXJh
bmNlIGFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQXBwZWFyYW5jZT4o
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYXBwZWFyYW5jZSk7IH0KICAgICBFQm94QWxpZ25tZW50
IGJveEFsaWduKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RUJveEFsaWdubWVudD4ocmFy
ZU5vbkluaGVyaXRlZERhdGEtPmZsZXhpYmxlQm94LT5hbGlnbik7IH0KQEAgLTIwODgsNyArMjA5
OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IGdldHRlciBt
ZXRob2RzCiAgICAgVHJhbnNpdGlvbiogYWNjZXNzVHJhbnNpdGlvbnMoKTsKLSAgICBjb25zdCBU
cmFuc2l0aW9uKiB0cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX3RyYW5zaXRpb247IH0KKyAgICBjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb24uZ2V0KCk7
IH0KICAgICBpbnQgbGluZUNsYW1wKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERh
dGEtPmxpbmVDbGFtcDsgfQogICAgIGJvb2wgdGV4dFNpemVBZGp1c3QoKSBjb25zdCB7IHJldHVy
biByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3Q7IH0KICAgICBFVGV4dFNlY3VyaXR5
IHRleHRTZWN1cml0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0U2VjdXJpdHk+
KHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkpOyB9CkBAIC0yMzUyLDcgKzIzNjMsNyBA
QCBwdWJsaWM6CiAgICAgLy8gRW5kIENTUzMgU2V0dGVycwogICAgCiAgICAgLy8gQXBwbGUtc3Bl
Y2lmaWMgcHJvcGVydHkgc2V0dGVycwotICAgIHZvaWQgY2xlYXJUcmFuc2l0aW9ucygpIHsgZGVs
ZXRlIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb247IHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSAwOyB9CisgICAgdm9pZCBjbGVh
clRyYW5zaXRpb25zKCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0
aW9uID0gMDsgfQogICAgIHZvaWQgaW5oZXJpdFRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb24q
IHBhcmVudCkgeyBjbGVhclRyYW5zaXRpb25zKCk7IGlmIChwYXJlbnQpIHJhcmVOb25Jbmhlcml0
ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSBuZXcgVHJhbnNpdGlvbigqcGFyZW50KTsg
fQogICAgIHZvaWQgYWRqdXN0VHJhbnNpdGlvbnMoKTsKICAgICB2b2lkIHNldExpbmVDbGFtcChp
bnQgYykgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBsaW5lQ2xhbXAsIGMpOyB9CkBA
IC0yNTExLDEwICsyNTIyLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxU
cmFuc2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQpOyB9CiAgICAg
CiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBpbnQgaW5pdGlhbFRy
YW5zaXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgaW50IGluaXRpYWxU
cmFuc2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGljIFRpbWluZ0Z1
bmN0aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVybiBUaW1pbmdG
dW5jdGlvbigpOyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkg
eyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbERlbGF5KCkg
eyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBkb3VibGUgaW5pdGlhbER1cmF0aW9uKCkgeyByZXR1
cm4gMDsgfQorICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVGltaW5nRnVuY3Rpb24o
KSB7IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CisgICAgc3RhdGljIGludCBpbml0aWFsUHJv
cGVydHkoKSB7IHJldHVybiBjQW5pbWF0ZUFsbDsgfQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbExp
bmVDbGFtcCgpIHsgcmV0dXJuIC0xOyB9CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFRleHRTaXpl
QWRqdXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBFVGV4dFNlY3VyaXR5IGluaXRp
YWxUZXh0U2VjdXJpdHkoKSB7IHJldHVybiBUU05PTkU7IH0K
</data>
<flag name="review"
          id="9897"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22478</attachid>
            <date>2008-07-25 13:05:13 -0700</date>
            <delta_ts>2008-07-30 18:28:10 -0700</delta_ts>
            <desc>Patch update 3</desc>
            <filename>patch4-new-animation-controller-update3.patch</filename>
            <type>text/plain</type>
            <size>136789</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDg1OTJm
MjEuLjAxMjBiNDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTE4Nyw2ICsxODgsMTAgQEAgc3RhdGljIGNvbnN0IGludCBjb21wdXRlZFBy
b3BlcnRpZXNbXSA9IHsKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5LAorICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRp
bWluZ0Z1bmN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwK
QEAgLTEwNTUsNiArMTA2MCw2MyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uKiB0ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7
CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAgICAgIGZvciAoIDsgdDsgdCA9IHQt
Pm5leHQoKSkKKyAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUodC0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
bkR1cmF0aW9uOiB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgICAgICAgICAgY29uc3QgQW5p
bWF0aW9uKiB0ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgewor
ICAgICAgICAgICAgICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodC0+ZHVyYXRpb24o
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxEdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1MpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uKiB0ID0g
c3R5bGUtPnRyYW5zaXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAg
ICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBUaW1pbmdGdW5jdGlvbiYgdGYgPSB0LT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHRmLngx
KCksIHRmLnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBUaW1p
bmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0
ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogeworICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogdCA9IHN0eWxlLT50cmFuc2l0aW9u
cygpOworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQg
PSB0LT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByb3AgPSB0LT5wcm9wZXJ0
eSgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZU5vbmUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9wID09IGNB
bmltYXRlQWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJhbGwiOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZ2V0UHJv
cGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3ApKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmFtZSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoImFsbCIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXI6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206CkBAIC0xMTEy
LDExICsxMTc0LDYgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2s6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5n
U3RhcnQ6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlOgotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25SZXBlYXRDb3VudDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgYXJl
IHVuaW1wbGVtZW50ZWQuCiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoU1ZHKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKaW5kZXggZmM4MjNjMC4uM2RjYTQyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMjk0LDggKzEy
OTQsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvblJlcGVhdENvdW50OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGlt
aW5nRnVuY3Rpb246CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0
eTogewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKQEAgLTE3MDksOCArMTcwOSw5IEBA
IHZvaWQgQ1NTUGFyc2VyOjphZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZh
bCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlv
blNob3J0aGFuZChib29sIGltcG9ydGFudCkKIHsKLSAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uRHVyYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25SZXBlYXRDb3VudCB9OworICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uIH07CiAgICAgY29uc3QgaW50IG51bVByb3BlcnRpZXMgPSBzaXplb2YocHJvcGVy
dGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7CiAgICAgCiAgICAgU2hvcnRoYW5kU2NvcGUg
c2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uKTsKQEAgLTIyMDYsMjAgKzIy
MDcsMjAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGlu
dCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25EdXJhdGlvbigpCitQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRGVsYXkoKQogewogICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUs
IG1fc3RyaWN0KSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOwog
ICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VHJhbnNpdGlvblJlcGVhdENvdW50KCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VEdXJhdGlvbigpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKLSAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5maW5pdGUpCi0g
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+
aWQpOwotICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyfEZOb25OZWcsIG1fc3RyaWN0
KSkKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGltZXxGTm9uTmVnLCBtX3N0cmljdCkpCiAg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKICAgICByZXR1cm4gMDsK
IH0KQEAgLTIyNDIsNyArMjI0Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1bmN0
aW9uVmFsdWUoQ1NTUGFyc2VyVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFu
c2l0aW9uVGltaW5nRnVuY3Rpb24oKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVRpbWluZ0Z1bmN0aW9uKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlIHx8
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNl
SW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFYXNlSW5PdXQpCkBAIC0yMzA2LDE4ICsyMzA3LDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQp
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByb3BJZCkg
ewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRp
b246Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvbkR1cmF0
aW9uKCk7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25E
ZWxheToKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEZWxheSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRDb3VudDoKLSAg
ICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQo
KTsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0
aW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUR1cmF0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9u
OgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRpbWluZ0Z1
bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTM5MDcsNyArMzkwOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQ
YXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gaXMgYSBsaXN0
IG9mIGZ1bmN0aW9uYWwgcHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkgdHJhbnNmb3JtIG9wZXJhdGlv
bnMuCiAgICAgLy8gV2UgY29sbGVjdCBhIGxpc3Qgb2YgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVz
LCB3aGVyZSBlYWNoIHZhbHVlIHNwZWNpZmllcyBhIHNpbmdsZSBvcGVyYXRpb24uCi0gICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGZvciAoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsgdmFsdWU7IHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKSkg
ewogICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1bmN0aW9uIHx8
ICF2YWx1ZS0+ZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggM2Zi
Mzk3OC4uYzEyYTcxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTg0LDExICs4NCwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgYWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWws
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpOwogCiAgICAgICAgIHZvaWQgYWRkVHJhbnNpdGlv
blZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwp
OwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25EdXJhdGlvbigp
OwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3Vu
dCgpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbigpOwotICAgICAgICBib29sIHBhcnNlVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3VsdCk7CisKKyAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VEZWxheSgpOworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZUR1cmF0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVGltaW5n
RnVuY3Rpb24oKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9u
UHJvcGVydHkoKTsKKworICAgICAgICBib29sIHBhcnNlVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQ
YXJzZXJWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3VsdCk7CiAgICAgICAgIGJvb2wgcGFy
c2VUcmFuc2l0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAg
ICAgICBib29sIHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCk7CiAgICAg
ICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbiBiL1dlYkNv
cmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KaW5kZXggNDg5MmFlMS4uNTAzOTRlNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgorKysgYi9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eU5hbWVzLmluCkBAIC0xNDIsMTEgKzE0Miw2IEBAIHdvcmQtc3BhY2luZwogd29y
ZC13cmFwCiB6LWluZGV4CiB6b29tCi0td2Via2l0LXRyYW5zaXRpb24KLS13ZWJraXQtdHJhbnNp
dGlvbi1kdXJhdGlvbgotLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Ci0td2Via2l0LXRyYW5z
aXRpb24tcmVwZWF0LWNvdW50Ci0td2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCiAt
d2Via2l0LWFwcGVhcmFuY2UKIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwCiAtd2Via2l0LWJhY2tn
cm91bmQtY29tcG9zaXRlCkBAIC0yMjUsNiArMjIwLDExIEBAIHpvb20KIC13ZWJraXQtdHJhbnNm
b3JtLW9yaWdpbgogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXgKIC13ZWJraXQtdHJhbnNmb3Jt
LW9yaWdpbi15Cistd2Via2l0LXRyYW5zaXRpb24KKy13ZWJraXQtdHJhbnNpdGlvbi1kZWxheQor
LXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uCistd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHkK
Ky13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24KIC13ZWJraXQtdXNlci1kcmFnCiAt
d2Via2l0LXVzZXItbW9kaWZ5CiAtd2Via2l0LXVzZXItc2VsZWN0CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCmluZGV4IGM3NmRlMDUuLjIzNTZkODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CkBAIC0xODQsMTMgKzE4NCwxMyBAQCBIQU5ETEVfRklMTF9MQVlFUl9WQUxVRShtYXNrLCBNYXNr
LCBwcm9wLCBQcm9wLCB2YWx1ZSkKIAogI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklU
X0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAotICAgIFRyYW5z
aXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKLSAgICBU
cmFuc2l0aW9uKiBwcmV2Q2hpbGQgPSAwOyBcCi0gICAgY29uc3QgVHJhbnNpdGlvbiogY3VyclBh
cmVudCA9IG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7IFwKKyAgICBBbmltYXRpb24qIGN1
cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKKyAgICBBbmltYXRpb24q
IHByZXZDaGlsZCA9IDA7IFwKKyAgICBjb25zdCBBbmltYXRpb24qIGN1cnJQYXJlbnQgPSBtX3Bh
cmVudFN0eWxlLT50cmFuc2l0aW9ucygpOyBcCiAgICAgd2hpbGUgKGN1cnJQYXJlbnQgJiYgY3Vy
clBhcmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwKICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsg
XAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiovIFwKLSAgICAgICAg
ICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKKyAgICAgICAgICAgIC8qIE5lZWQg
dG8gbWFrZSBhIG5ldyB0cmFuc2l0aW9uLiovIFwKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5l
dyBBbmltYXRpb24oKTsgXAogICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGls
ZCk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKGN1cnJQYXJl
bnQtPnByb3AoKSk7IFwKQEAgLTIwMCw0MiArMjAwLDQzIEBAIGlmIChpc0luaGVyaXQpIHsgXAog
ICAgIH0gXAogICAgIFwKICAgICB3aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAgICAgICAgLyogUmVz
ZXQgYW55IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8g
XAorICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIHRyYW5zaXRpb25zIHRvIG5vdCBoYXZl
IHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKICAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgp
OyBcCiAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiAgICAgfSBcCi19
IGVsc2UgaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9z
dHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJl
bmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvbiMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAor
fSBcCitpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBBbmltYXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5
bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKKyAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5k
ZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAogICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNo
aWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpIFwK
ICAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCisgICAgcmV0dXJuOyBcCiB9CiAK
ICNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIHsgXAog
SEFORExFX1RSQU5TSVRJT05fSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCi1pZiAo
aXNJbmhlcml0IHx8IGlzSW5pdGlhbCkgXAotICAgIHJldHVybjsgXAotVHJhbnNpdGlvbiogY3Vy
ckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotVHJhbnNpdGlvbiogcHJl
dkNoaWxkID0gMDsgXAorQW5pbWF0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3NUcmFu
c2l0aW9ucygpOyBcCitBbmltYXRpb24qIHByZXZDaGlsZCA9IDA7IFwKIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgeyBcCi0gICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBh
IGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8gXAorICAgIC8qIFdhbGsg
ZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSB0cmFuc2l0aW9uLCBjcmVhdGluZyBuZXcgdHJh
bnNpdGlvbnMgYXMgbmVlZGVkLiAqLyBcCiAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7IFwKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCiAgICAgICAgIGlmICgh
Y3VyckNoaWxkKSB7IFwKLSAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllciB0
byBob2xkIHRoaXMgdmFsdWUgKi8gXAotICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IFRyYW5z
aXRpb24oKTsgXAotICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwK
KyAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IHRyYW5zaXRpb24gdG8gaG9sZCB0aGlzIHZh
bHVlICovIFwKKyAgICAgICAgY3VyckNoaWxkID0gbmV3IEFuaW1hdGlvbigpOyBcCisgICAgICAg
IHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBt
YXBUcmFuc2l0aW9uIyNQcm9wKGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsgXAorICAgICAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0
ZW0oaSkpOyBcCiAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAogICAgICAgICBjdXJy
Q2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogICAgIH0gXAogfSBlbHNlIHsgXAotICAgIG1h
cFRyYW5zaXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBtYXAjI1Byb3AoY3Vy
ckNoaWxkLCB2YWx1ZSk7IFwKICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAog
fSBcCiB3aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAgICAvKiBSZXNldCBhbGwgcmVtYWluaW5nIGxh
eWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisgICAgLyogUmVzZXQgYWxs
IHJlbWFpbmluZyB0cmFuc2l0aW9ucyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBc
CiAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCiAgICAgY3VyckNoaWxkID0gY3VyckNo
aWxkLT5uZXh0KCk7IFwKIH0gfQpAQCAtNDczNSwxOCArNDczNiwxOCBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAg
IGVsc2UgaWYgKGlzSW5oZXJpdCkKICAgICAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRUcmFuc2l0
aW9ucyhtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6CisgICAgICAgIEhBTkRMRV9U
UkFOU0lUSU9OX1ZBTFVFKGRlbGF5LCBEZWxheSwgdmFsdWUpCisgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgogICAgICAgICBIQU5E
TEVfVFJBTlNJVElPTl9WQUxVRShkdXJhdGlvbiwgRHVyYXRpb24sIHZhbHVlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRDb3VudDoK
LSAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocmVwZWF0Q291bnQsIFJlcGVhdENvdW50
LCB2YWx1ZSkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5Ogor
ICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShwcm9wZXJ0eSwgUHJvcGVydHksIHZhbHVl
KQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodGltaW5nRnVu
Y3Rpb24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIEhBTkRMRV9UUkFO
U0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3RyZXRjaDoKQEAgLTQ5ODcsMTAgKzQ5ODgsMTAgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICBsYXllci0+c2V0WVBvc2l0aW9uKGwpOwogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcER1cmF0aW9uKEFuaW1h
dGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3Nz
VmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRp
b24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvbkR1cmF0aW9uKCkp
OworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1
cmF0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00OTk5LDM1ICs1MDAwLDM2
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1cmF0aW9uKFRyYW5zaXRp
b24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1MpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKGludCgxMDAwKnByaW1p
dGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVy
YXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CiAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01T
KQotICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihpbnQocHJpbWl0aXZlVmFsdWUtPmdl
dEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihwcmltaXRp
dmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOwogfQogCi12b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcFRyYW5zaXRpb25SZXBlYXRDb3VudChUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcERlbGF5KEFuaW1hdGlv
biogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFs
dWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24t
PnNldFJlcGVhdENvdW50KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblJlcGVhdENvdW50
KCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERl
bGF5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
LSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkK
LSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoLTEpOwotICAgIGVsc2UKLSAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoaW50KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkpKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb3cpCisgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KDApOworICAgIGVsc2UgeworICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1MpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShwcmltaXRpdmVW
YWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLjBmKTsK
KyAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblRpbWluZ0Z1
bmN0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NW
YWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSk7CisgICAg
ICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGlt
aW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKICAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsK
ICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewpAQCAtNTA0OSwx
NyArNTA1MSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYQogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzVHJhbnNpdGlvblRpbWluZ0Z1bmN0
aW9uVmFsdWUoKSkgeworICAgIAorICAgIGlmICh2YWx1ZS0+aXNUaW1pbmdGdW5jdGlvblZhbHVl
KCkpIHsKICAgICAgICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSogdGltaW5nRnVuY3Rpb24gPSBz
dGF0aWNfY2FzdDxDU1NUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOwogICAgICAgICB0cmFu
c2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uLCB0aW1pbmdGdW5jdGlvbi0+eDEoKSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRp
bWluZ0Z1bmN0aW9uLT54MigpLCB0aW1pbmdGdW5jdGlvbi0+eTIoKSkpOwogICAgIH0KIH0KIAot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9uUHJvcGVydHkoVHJhbnNpdGlvbiog
dHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBQ
cm9wZXJ0eShBbmltYXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRp
b25Qcm9wZXJ0eSgpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5
bGU6OmluaXRpYWxQcm9wZXJ0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTA2
Nyw3ICs1MDY5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9uUHJvcGVy
dHkoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHYKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpOworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5KHN0
YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSk7CiB9
CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqIHZh
bHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmggYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMDBi
OWU2OC4uM2U0YzBlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtMjA0LDEwICsyMDQsMTAg
QEAgcHVibGljOgogICAgICAgICB2b2lkIG1hcEZpbGxYUG9zaXRpb24oRmlsbExheWVyKiwgQ1NT
VmFsdWUqKTsKICAgICAgICAgdm9pZCBtYXBGaWxsWVBvc2l0aW9uKEZpbGxMYXllciosIENTU1Zh
bHVlKik7CiAKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbios
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvblJlcGVhdENvdW50KFRyYW5z
aXRpb24qLCBDU1NWYWx1ZSopOwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9u
UHJvcGVydHkoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwRGVsYXko
QW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBEdXJhdGlvbihBbmltYXRp
b24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlv
biosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwUHJvcGVydHkoQW5pbWF0aW9uKiwgQ1NT
VmFsdWUqKTsKIAogICAgICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmlu
ZVBpZWNlSW1hZ2UmKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rp
b25WYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDNj
YjNlYmQuLmZmYTQ1NWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgKQEAgLTU0
LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGlz
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIGlzVGltaW5nRnVuY3Rpb25WYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICAK
ICAgICBkb3VibGUgbV94MTsKICAgICBkb3VibGUgbV95MTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmggYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCmluZGV4IGJmNWMzNjEuLmZm
ZGY0MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgKKysrIGIvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzSW1hZ2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzSW1wbGljaXRJbml0aWFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGltaW5nRnVuY3Rpb25WYWx1ZSgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gZmFs
c2U7IH0KIAogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZUtleXdvcmRzLmluIGIvV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgppbmRleCAzY2Jm
Yjg1Li5iMzllMTUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmlu
CisrKyBiL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KQEAgLTU2Myw2ICs1NjMsMTEg
QEAgdmlzdWFsCiBsaW5lcwogCiAjCisjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9ERUxB
WQorIworbm93CisKKyMKICMgQ1NTX1BST1BfX1dFQktJVF9UUkFOU0lUSU9OX1RJTUlOR19GVU5D
VElPTgogIwogZWFzZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCmluZGV4
IDU3NjQ5NmEuLmE2ZTcxY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5j
cHAKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OldlYktpdENTU1RyYW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9wZXJhdGlvblR5
cGUgb3ApCi0gICAgOiBDU1NWYWx1ZUxpc3QoZmFsc2UpCisgICAgOiBDU1NWYWx1ZUxpc3QodHJ1
ZSkKICAgICAsIG1fdHlwZShvcCkKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxZWY2YTVlLi4zMWMzMWEw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKIAorI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAjaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCkBAIC0xMTY2LDYgKzExNjcsMTAgQEAgdm9pZCBEb2N1bWVudDo6
dXBkYXRlUmVuZGVyaW5nKCkKIHsKICAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkpCiAgICAgICAg
IHJlY2FsY1N0eWxlKE5vQ2hhbmdlKTsKKyAgICAKKyAgICAvLyB0ZWxsIHRoZSBhbmltYXRpb24g
Y29udHJvbGxlciB0aGF0IHRoZSBzdHlsZSBpcyBhdmFpbGFibGUgYW5kIGl0IGNhbiBzdGFydCBh
bmltYXRpb25zCisgICAgaWYgKG1fZnJhbWUpCisgICAgICAgIG1fZnJhbWUtPmFuaW1hdGlvbigp
LT5zdHlsZUF2YWlsYWJsZSgpOwogfQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNS
ZW5kZXJpbmcoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKaW5kZXggMDM0YzExYS4uNjNlYjc3NiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03NTAsNyAr
NzUwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKCk7
CiAgICAgdm9pZCBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKLSAgICAKKyAgICAgICAg
CiAgICAgLy8gRkYgbWV0aG9kIGZvciBhY2Nlc3NpbmcgdGhlIHNlbGVjdGlvbiBhZGRlZCBmb3Ig
Y29tcGF0YWJpbGl0eS4KICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpIGNvbnN0Owog
ICAgIApAQCAtMTA0Niw2ICsxMDQ2LDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoTE9XX0JBTkRXSURU
SF9ESVNQTEFZKQogICAgIGJvb2wgbV9pbkxvd0JhbmR3aWR0aERpc3BsYXk7CiAjZW5kaWYKKwog
fTsKIAogaW5saW5lIGJvb2wgRG9jdW1lbnQ6Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5n
SW1wbCogaWQpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDdkNWYzZjYuLjk3MGMzZTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC03ODUsOSArNzg1LDkgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBj
aGFuZ2UpCiAgICAgICAgICAgICAgICAgbmV3U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeURp
cmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjaCAhPSBOb0No
YW5nZSkKKyAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlKSB7CiAgICAgICAgICAgICBzZXRSZW5k
ZXJTdHlsZShuZXdTdHlsZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoYW5nZWQoKSAmJiAoZG9jdW1l
bnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVs
ZXMoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VkKCkgJiYgKHN0eWxlQ2hhbmdlVHlw
ZSgpICE9IEFuaW1hdGlvblN0eWxlQ2hhbmdlKSAmJiAoZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdS
dWxlcygpIHx8IGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSkpIHsKICAgICAgICAg
ICAgIC8vIEFsdGhvdWdoIG5vIGNoYW5nZSBvY2N1cnJlZCwgd2UgdXNlIHRoZSBuZXcgc3R5bGUg
c28gdGhhdCB0aGUgY291c2luIHN0eWxlIHNoYXJpbmcgY29kZSB3b24ndCBnZXQKICAgICAgICAg
ICAgIC8vIGZvb2xlZCBpbnRvIGJlbGlldmluZyB0aGlzIHN0eWxlIGlzIHRoZSBzYW1lLiAgVGhp
cyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB0aGUgZG9jdW1lbnQgYWN0dWFsbHkgdXNlcwogICAgICAg
ICAgICAgLy8gc2libGluZy9kZXNjZW5kYW50IHJ1bGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgaXNu
J3QgcG9zc2libGUgZm9yIGFuY2VzdG9yIHN0eWxlcyB0byBhZmZlY3Qgc2hhcmluZyBvZgpAQCAt
Nzk2LDEyICs3OTYsMTMgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBj
aGFuZ2UpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGVJbnRlcm5hbChuZXdT
dHlsZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0UmVuZGVyU3R5bGUo
bmV3U3R5bGUpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3R5bGVDaGFuZ2VUeXBl
KCkgPT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpCisgICAgICAgICAgICAgc2V0UmVuZGVyU3R5bGUo
bmV3U3R5bGUpOwogCiAgICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJB
cmVuYSgpKTsKIAogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKSB7Ci0gICAgICAgICAgICBp
ZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBoYXNQb3NpdGlvbmFsUnVs
ZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID09IEZ1bGxTdHlsZUNoYW5nZSkKKyAgICAgICAgICAg
IGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bvc2l0aW9uYWxS
dWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQogICAgICAgICAg
ICAgICAgIGNoYW5nZSA9IEZvcmNlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IGNoYW5nZSA9IGNoOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIGIvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oCmluZGV4IDg3MmM2Y2YuLmQyODk4MjkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAorKysgYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgK
QEAgLTExOSw2ICsxMTksMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBuYW1lc3BhY2UgRXZlbnRO
YW1lcyB7CiAgICAgbWFjcm8ocHJvZ3Jlc3MpIFwKICAgICBtYWNybyhzdGFsbGVkKSBcCiAgICAg
XAorICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlvbkVuZCkgXAorICAgIG1hY3JvKHdlYmtpdEFuaW1h
dGlvblN0YXJ0KSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uKSBcCisgICAg
XAorICAgIG1hY3JvKHdlYmtpdFRyYW5zaXRpb25FbmQpIFwKKyAgICBcCiAvLyBlbmQgb2YgRE9N
X0VWRU5UX05BTUVTX0ZPUl9FQUNICiAKICNpZm5kZWYgRE9NX0VWRU5UX05BTUVTX0hJREVfR0xP
QkFMUwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAppbmRleCA2YWIzNzhkLi4zYTk5OTBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQg
Tm9kZTo6c2V0Q2hhbmdlZChTdHlsZUNoYW5nZVR5cGUgY2hhbmdlVHlwZSkKICAgICBpZiAoKGNo
YW5nZVR5cGUgIT0gTm9TdHlsZUNoYW5nZSkgJiYgIWF0dGFjaGVkKCkpIC8vIGNoYW5nZWQgY29t
cGFyZWQgdG8gd2hhdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCEoY2hhbmdlVHlwZSA9
PSBJbmxpbmVTdHlsZUNoYW5nZSAmJiBtX3N0eWxlQ2hhbmdlID09IEZ1bGxTdHlsZUNoYW5nZSkp
CisgICAgaWYgKCEoY2hhbmdlVHlwZSA9PSBJbmxpbmVTdHlsZUNoYW5nZSAmJiAobV9zdHlsZUNo
YW5nZSA9PSBGdWxsU3R5bGVDaGFuZ2UgfHwgbV9zdHlsZUNoYW5nZSA9PSBBbmltYXRpb25TdHls
ZUNoYW5nZSkpKQogICAgICAgICBtX3N0eWxlQ2hhbmdlID0gY2hhbmdlVHlwZTsKIAogICAgIGlm
IChtX3N0eWxlQ2hhbmdlICE9IE5vU3R5bGVDaGFuZ2UpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL05vZGUuaCBiL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBhNTM5NDgzLi5jNGExMWJiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZS5oCkBA
IC02MSw3ICs2MSw3IEBAIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKIAogdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKIAotZW51bSBTdHlsZUNoYW5nZVR5cGUgeyBOb1N0eWxlQ2hhbmdlLCBJ
bmxpbmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hhbmdlIH07CitlbnVtIFN0eWxlQ2hhbmdlVHlw
ZSB7IE5vU3R5bGVDaGFuZ2UsIElubGluZVN0eWxlQ2hhbmdlLCBGdWxsU3R5bGVDaGFuZ2UsIEFu
aW1hdGlvblN0eWxlQ2hhbmdlIH07CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPQ1VNRU5UX1BP
U0lUSU9OX0VRVUlWQUxFTlQgPSAweDAwOwogY29uc3QgdW5zaWduZWQgc2hvcnQgRE9DVU1FTlRf
UE9TSVRJT05fRElTQ09OTkVDVEVEID0gMHgwMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcCBiL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAppbmRleCBl
NWJkM2MxLi45OGYzOTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5j
cHAKKysrIGIvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCkBAIC0xMjcsNyArMTI3LDcg
QEAgdm9pZCBDYWNoZWRQYWdlOjpyZXN0b3JlKFBhZ2UqIHBhZ2UpCiAgICAgICAgIG1fZG9jdW1l
bnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKICNlbmRpZgog
Ci0gICAgbWFpbkZyYW1lLT5hbmltYXRpb24oKS0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIG1h
aW5GcmFtZS0+YW5pbWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnMobV9kb2N1bWVudC5nZXQoKSk7
CiAKICAgICBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRNb3VzZVByZXNzTm9kZShtb3Vz
ZVByZXNzTm9kZSgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggMTY3N2ZiMi4uOTUwZWU4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNw
cApAQCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKQEAgLTQzLDYgKzQ1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNv
bnN0IGRvdWJsZSBjQW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDI1OwogCitzdGF0aWMgdm9pZCBz
ZXRDaGFuZ2VkKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1
bWVudCgpICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgbm9kZS0+
c2V0Q2hhbmdlZChBbmltYXRpb25TdHlsZUNoYW5nZSk7Cit9CisKIC8vIFRoZSBlcHNpbG9uIHZh
bHVlIHdlIHBhc3MgdG8gVW5pdEJlemllcjo6c29sdmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9u
IGlzIGdvaW5nIHRvIHJ1biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBh
bmltYXRpb24sIHRoZSBtb3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rp
b24gcmVzdWx0IHRvIGF2b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBk
b3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAq
IGR1cmF0aW9uKTsgfQpAQCAtNTUsMTM1ICs2Myw3MzEgQEAgc3RhdGljIGlubGluZSBkb3VibGUg
c29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBw
MngKICAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwog
fQogCi1jbGFzcyBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjsKK2NsYXNzIENvbXBvc2l0ZUFu
aW1hdGlvbjsKK2NsYXNzIEFuaW1hdGlvbkJhc2U7CiAKLWNsYXNzIEltcGxpY2l0QW5pbWF0aW9u
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIEFuaW1hdGlvblRpbWVyQmFzZSB7CiBwdWJs
aWM6Ci0gICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiopOwotICAgIH5JbXBs
aWNpdEFuaW1hdGlvbigpOwotCi0gICAgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5bGUpOwotCi0gICAg
dm9pZCByZXNldChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogZnJvbSwgUmVuZGVyU3R5bGUq
IHRvKTsKKyAgICBBbmltYXRpb25UaW1lckJhc2UoQW5pbWF0aW9uQmFzZSogYW5pbSkKKyAgICA6
IG1fdGltZXIodGhpcywgJkFuaW1hdGlvblRpbWVyQmFzZTo6dGltZXJGaXJlZCkKKyAgICAsIG1f
YW5pbShhbmltKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CisgICAg
fQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQmFzZSgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQ9MCkKKyAgICB7CisgICAgICAgIG1f
dGltZXIuc3RhcnRPbmVTaG90KHRpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbmNl
bFRpbWVyKCkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0KICAgICAKLSAg
ICBkb3VibGUgcHJvZ3Jlc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChU
aW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikgPSAwOworICAgIAorcHJpdmF0ZToKKyAgICBUaW1l
cjxBbmltYXRpb25UaW1lckJhc2U+IG1fdGltZXI7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQW5p
bWF0aW9uQmFzZSogbV9hbmltOworfTsKIAotICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydHk7IH0KK2NsYXNzIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbmltYXRpb25UaW1lckJhc2UgeworcHVibGljOgorICAgIEFuaW1hdGlvbkV2ZW50RGlzcGF0
Y2hlcihBbmltYXRpb25CYXNlKiBhbmltKSAKKyAgICA6IEFuaW1hdGlvblRpbWVyQmFzZShhbmlt
KQorICAgICwgbV9wcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpCisgICAgLCBtX3Jlc2V0KGZh
bHNlKQorICAgICwgbV9lbGFwc2VkVGltZSgtMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgfkFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcigpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHN0YXJ0VGltZXIoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAg
ICAgICAgbV9lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgbV9uYW1lID0gbmFtZTsKKyAgICAg
ICAgbV9wcm9wZXJ0eSA9IHByb3BlcnR5OworICAgICAgICBtX3Jlc2V0ID0gcmVzZXQ7CisgICAg
ICAgIG1fZXZlbnRUeXBlID0gZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBzZWRUaW1lID0gZWxh
cHNlZFRpbWU7CisgICAgICAgIEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRUaW1lcigpOworICAg
IH0KICAgICAKLSAgICBib29sIGZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9maW5pc2hlZDsg
fQotICAgIHZvaWQgc2V0RmluaXNoZWQoYm9vbCBmKSB7IG1fZmluaXNoZWQgPSBmOyB9CisgICAg
dmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopOwogICAg
IAotICAgIGJvb2wgc3RhbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YWxlOyB9Ci0gICAgdm9pZCBz
ZXRTdGFsZSgpIHsgbV9zdGFsZSA9IHRydWU7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEVsZW1l
bnQ+IG1fZWxlbWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIGludCBtX3Byb3Bl
cnR5OworICAgIGJvb2wgbV9yZXNldDsKKyAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Cisg
ICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Cit9OwogCitjbGFzcyBBbmltYXRpb25UaW1lckNhbGxi
YWNrIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9u
VGltZXJDYWxsYmFjayhBbmltYXRpb25CYXNlKiBhbmltKSAKKyAgICA6IEFuaW1hdGlvblRpbWVy
QmFzZShhbmltKQorICAgICwgbV9lbGFwc2VkVGltZSgwKQorICAgIHsgfQorICAgIHZpcnR1YWwg
fkFuaW1hdGlvblRpbWVyQ2FsbGJhY2soKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGlt
ZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+Kik7CisgICAgCisgICAgdm9pZCBzdGFy
dFRpbWVyKGRvdWJsZSB0aW1lb3V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91
YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICAgICAgbV9ldmVudFR5cGUgPSBldmVudFR5cGU7
CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsKKyAgICAgICAgQW5pbWF0aW9u
VGltZXJCYXNlOjpzdGFydFRpbWVyKHRpbWVvdXQpOworICAgIH0KKyAgICAKIHByaXZhdGU6Ci0g
ICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCi0gICAgUmVuZGVyU3R5
bGUqIG1fZnJvbVN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3RvU3R5bGU7CisgICAgQXRvbWlj
U3RyaW5nIG1fZXZlbnRUeXBlOworICAgIGRvdWJsZSBtX2VsYXBzZWRUaW1lOworfTsKIAotICAg
IGludCBtX3Byb3BlcnR5OwotICAgIFRpbWluZ0Z1bmN0aW9uIG1fZnVuY3Rpb247Ci0gICAgZG91
YmxlIG1fZHVyYXRpb247CitjbGFzcyBJbXBsaWNpdEFuaW1hdGlvbjsKK2NsYXNzIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOwogCi0gICAgaW50IG1fcmVwZWF0Q291bnQ7CisvLyBBIENvbXBv
c2l0ZUFuaW1hdGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBhbmltYXRpb25zIHRoYXQK
Ky8vIGFyZSBydW5uaW5nLCBzdWNoIGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgdHJhbnNpdGlv
bmluZyBhdCBvbmNlLgorCitjbGFzcyBDb21wb3NpdGVBbmltYXRpb24gOiBwdWJsaWMgTm9uY29w
eWFibGUgeworcHVibGljOgorICAgIENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZSogYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICA6IG1fc3VzcGVuZGVkKGZhbHNl
KQorICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAg
LCBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycygwKQorICAgIHsgfQorICAgIAorICAgIH5Db21w
b3NpdGVBbmltYXRpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdHJhbnNp
dGlvbnMpOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
OworICAgIAorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcpOworICAgIGJv
b2wgYW5pbWF0aW5nKCk7CisgICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShp
bnQgcHJvcCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9wKTsgfQor
ICAgIAorICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJs
ZSB0KTsKKyAgICAKKyAgICB2b2lkIHJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0Kik7Cisg
ICAgdm9pZCByZXNldEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgCisgICAgdm9pZCBj
bGVhbnVwRmluaXNoZWRBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIAorICAgIHZvaWQg
c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBi
b29sIHN1c3BlbmRlZCgpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KKyAgICAK
KyAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7CisgICAg
dm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSk7Cisg
ICAgCisgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOworICAgIAorICAgIGJvb2wgaXNBbmltYXRp
bmdQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0V2FpdGlu
Z0ZvclN0eWxlQXZhaWxhYmxlKGJvb2wgd2FpdGluZyk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCB1
cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIAorcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+IENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA7CisgICAgCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCAgIG1fdHJh
bnNpdGlvbnM7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIG1fc3VzcGVuZGVkOwor
ICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7Cisg
ICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJz
OworfTsKKworY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24sIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pOyAgICAKKyAg
ICB2aXJ0dWFsIH5BbmltYXRpb25CYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FuaW1TdGF0
ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29t
cEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgfQorICAgIAor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQor
ICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ICB7IHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KTsgfQorICAgIAorICAgIHZvaWQgY2FuY2VsVGltZXJzKCkKKyAgICB7CisgICAgICAgIG1fYW5p
bWF0aW9uVGltZXJDYWxsYmFjay5jYW5jZWxUaW1lcigpOworICAgICAgICBtX2FuaW1hdGlvbkV2
ZW50RGlzcGF0Y2hlci5jYW5jZWxUaW1lcigpOworICAgIH0KKyAgICAKKyAgICAvLyBBbmltYXRp
b25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50
ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKKyAgICAvLyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQu
IFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZlcnJlZCByZXNwb25zZSBmcm9tIHRoZSBh
bmltYXRvci4KKyAgICAvLyBJZiBzbywgd2Ugc3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHRoYXQg
cmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4KKyAg
ICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBzdGFydCB0aW1l
IGFuZCBnbyBpbW1lZGlhdGVseSB0byB0aGUgTE9PUElORyBvcgorICAgIC8vIEVORElORyBzdGF0
ZS4KKyAgICBlbnVtIEFuaW1TdGF0ZSB7IAorICAgICAgICBTVEFURV9ORVcsICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFuaW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVubmlu
ZyB5ZXQKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9USU1FUiwgICAgICAgICAvLyBzdGFydCB0
aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRf
U1RZTEVfQVZBSUxBQkxFLCAgIC8vIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwIHNvIHdlIGNhbiBz
dGFydCBhbmltYXRpb25zCisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UsICAgICAg
Ly8gYW5pbWF0aW9uIHN0YXJ0ZWQsIHdhaXRpbmcgZm9yIHJlc3BvbnNlCisgICAgICAgIFNUQVRF
X0xPT1BJTkcsICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlv
biBydW5uaW5nLCBsb29wIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAg
U1RBVEVfRU5ESU5HLCAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5p
bWF0aW9uIHJ1bm5pbmcsIGVuZCB0aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAg
ICAgIFNUQVRFX1BBVVNFRF9XQUlUX1RJTUVSLCAgICAgICAgLy8gYW5pbWF0aW9uIGluIHBhdXNl
IG1vZGUgd2hlbiBhbmltYXRpb24gc3RhcnRlZAorICAgICAgICBTVEFURV9QQVVTRURfV0FJVF9S
RVNQT05TRSwgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQgd2hlbiBpbiBTVEFSVElORyBzdGF0ZQor
ICAgICAgICBTVEFURV9QQVVTRURfUlVOLCAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVz
ZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQorICAgICAgICBTVEFURV9ET05FICAg
ICAgICAgICAgICAgICAgICAgIC8vIGVuZCB0aW1lciBmaXJlZCwgYW5pbWF0aW9uIGZpbmlzaGVk
IGFuZCByZW1vdmVkCisgICAgfTsKKyAgICAKKyAgICBlbnVtIEFuaW1TdGF0ZUlucHV0IHsKKyAg
ICAgICAgU1RBVEVfSU5QVVRfTUFLRV9ORVcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5l
dyBmcm9tIGFueSBzdGF0ZQorICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sICAg
IC8vIGFuaW1hdGlvbiByZXF1ZXN0cyBhIHN0YXJ0CisgICAgICAgIFNUQVRFX0lOUFVUX1JFU1RB
UlRfQU5JTUFUSU9OLCAgLy8gZm9yY2UgYSByZXN0YXJ0IGZyb20gYW55IHN0YXRlCisgICAgICAg
IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVELCAgLy8gc3RhcnQgdGltZXIgZmlyZWQKKyAg
ICAgICAgU1RBVEVfSU5QVVRfU1RZTEVfQVZBSUxBQkxFLCAgICAgICAgLy8gc3R5bGUgaXMgc2V0
dXAsIHJlYWR5IHRvIHN0YXJ0IGFuaW1hdGluZworICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9U
SU1FX1NFVCwgICAgIC8vIG1fc3RhcnRUaW1lIHdhcyBzZXQKKyAgICAgICAgU1RBVEVfSU5QVVRf
TE9PUF9USU1FUl9GSVJFRCwgICAvLyBsb29wIHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lO
UFVUX0VORF9USU1FUl9GSVJFRCwgICAgLy8gZW5kIHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRF
X0lOUFVUX1BBVVNFX09WRVJSSURFLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBv
dmVycmlkZQorICAgICAgICBTVEFURV9JTlBVVF9SRVNVTUVfT1ZFUlJJREUsICAgIC8vIHJlc3Vt
ZSBhbiBvdmVycmlkZGVuIGFuaW1hdGlvbgorICAgICAgICBTVEFURV9JTlBVVF9QTEFZX1NUQVRF
X1JVTk5JTkcsIC8vIHBsYXkgc3RhdGUgcGF1c2VkIC0+IHJ1bm5pbmcKKyAgICAgICAgU1RBVEVf
SU5QVVRfUExBWV9TVEFURV9QQVVTRUQsICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1c2Vk
CisgICAgICAgIFNUQVRFX0lOUFVUX0VORF9BTklNQVRJT04gICAgICAgLy8gZm9yY2UgYW4gZW5k
IGZyb20gYW55IHN0YXRlCisgICAgfTsKKyAgICAKKyAgICAvLyBDYWxsZWQgd2hlbiBhbmltYXRp
b24gaXMgaW4gTkVXIHN0YXRlIHRvIHN0YXJ0IGFuaW1hdGlvbgorICAgIHZvaWQgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pOworICAgIAorICAg
IC8vIEFuaW1hdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKKyAgICAv
LyBUaGlzIGlzIGEgY2FsbGJhY2sgYW5kIGlzIG9ubHkgcmVjZWl2ZWQgd2hlbiBSZW5kZXJPYmpl
Y3Q6OnN0YXJ0QW5pbWF0aW9uKCkgb3IgUmVuZGVyT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oKSAK
KyAgICAvLyByZXR1cm5zIHRydWUuIElmIFJlbmRlck9iamVjdDo6CisgICAgdm9pZCBvbkFuaW1h
dGlvblN0YXJ0UmVzcG9uc2UoZG91YmxlIHN0YXJ0VGltZSk7CisgICAgCisgICAgLy8gQ2FsbGVk
IHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQorICAgIHZvaWQgdXBkYXRlUGxheVN0
YXRlKGJvb2wgcnVubmluZyk7CisgICAgYm9vbCBwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb247IH0KKyAgICAKKyAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXIHx8IG1fYW5pbVN0YXRlID09IFNU
QVRFX1NUQVJUX1dBSVRfVElNRVI7IH0KKyAgICBib29sIHByZWFjdGl2ZSgpIGNvbnN0CisgICAg
eyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXIHx8CisgICAgICAgICAgICAgbV9hbmlt
U3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9USU1FUiB8fAorICAgICAgICAgICAgIG1fYW5pbVN0
YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFIHx8CisgICAgICAgICAgICAg
bV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICB9CisgICAgYm9v
bCBwb3N0YWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfRE9ORTsg
fQorICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gIXBvc3RhY3RpdmUoKSAmJiAhcHJl
YWN0aXZlKCk7IH0KKyAgICBib29sIHJ1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhaXNuZXcoKSAm
JiAhcG9zdGFjdGl2ZSgpOyB9CisgICAgYm9vbCBwYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3Bh
dXNlVGltZSA+PSAwOyB9CisgICAgYm9vbCBpc25ldygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0
YXRlID09IFNUQVRFX05FVzsgfQorICAgIGJvb2wgd2FpdGluZ0ZvclN0YXJ0VGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7IH0KKyAg
ICBib29sIHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0
YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFOyB9CisgICAgYm9vbCB3YWl0
aW5nRm9yRW5kRXZlbnQoKSBjb25zdCAgeyByZXR1cm4gbV93YWl0aW5nRm9yRW5kRXZlbnQ7IH0K
KyAgICAKKyAgICAvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBydW5uaW5n
IHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0byBrZWVwIGZpcmluZworICAgIC8vIChlLmcuIGEgc29m
dHdhcmUgYW5pbWF0aW9uKQorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcg
PSB0cnVlKSB7IG1fYW5pbWF0aW5nID0gaW5BbmltYXRpbmc7IH0KKyAgICBib29sIGFuaW1hdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CisgICAgCisgICAgZG91YmxlIHByb2dy
ZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3Q7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGlvQW5pbWF0ZWRTdHls
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tID0gMCwgY29uc3QgUmVuZGVyU3R5bGUqIHRvID0gMCkgeyB9
CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgIHZv
aWQgYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgCisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2go
Y29uc3QgQW5pbWF0aW9uKiBhbmltKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbi0+YW5pbWF0
aW9uc01hdGNoKGFuaW0pOyB9CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb24oY29uc3QgQW5p
bWF0aW9uKiBhbmltKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmltYXRpb24qPihhbmlt
KTsgfQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJy
aWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNlIGZvcgorICAgIC8vIEltcGxpY2l0QW5p
bWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxk
IGZvcmNlCisgICAgLy8gc2V0IHRoZSBzdGFydCB0aW1lLiBJZiBhbiBhbmltYXRpb24gaXMgb3Zl
cnJpZGRlbiwgaXQgd2lsbCBwcm9iYWJseSBub3QgZ2V0CisgICAgLy8gYmFjayB0aGUgU1RBUlRf
VElNRSBldmVudC4KKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgCisgICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0aW9uIGlu
dm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PworICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVy
dHkoaW50IHByb3BlcnR5KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBbmlt
YXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KCF3YWl0aW5nVG9TdGFydCgpICYmICFwb3N0YWN0aXZlKCkpICYmIGFmZmVjdHNQcm9wZXJ0eShw
cm9wZXJ0eSk7CisgICAgfQorICAgICAgICAKK3Byb3RlY3RlZDoKKyAgICBFbGVtZW50KiBlbGVt
ZW50Rm9yRXZlbnREaXNwYXRjaCgpCisgICAgeworICAgICAgICBpZiAobV9vYmplY3QtPm5vZGUo
KSAmJiBtX29iamVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fb2JqZWN0LT5ub2RlKCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIHsgfQor
ICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKCkgeyByZXR1
cm4gbV9jb21wQW5pbTsgfQorICAgIAorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgd2hlbiB0aGUg
Y29ycmVzcG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBkbyBhbnkgZXh0cmEg
d29yaworICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGlt
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBlbGFw
c2VkVGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFw
c2VkVGltZSkgeyB9CisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdp
blRpbWUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihi
b29sIHJlc2V0KSB7IH0KKyAgICAKKyAgICB2b2lkIHByaW1lRXZlbnRUaW1lcnMoKTsKKyAgICAK
K3Byb3RlY3RlZDoKKyAgICBBbmltU3RhdGUgbV9hbmltU3RhdGU7CiAgICAgaW50IG1faXRlcmF0
aW9uOwogICAgIAotICAgIGJvb2wgbV9maW5pc2hlZDsgICAgCisgICAgYm9vbCBtX2FuaW1hdGlu
ZzsgICAgICAgLy8gdHJhbnNpdGlvbi9hbmltYXRpb24gcmVxdWlyZXMgY29udGludWFsIHRpbWVy
IGZpcmluZworICAgIGJvb2wgbV93YWl0ZWRGb3JSZXNwb25zZTsKICAgICBkb3VibGUgbV9zdGFy
dFRpbWU7Ci0gICAgYm9vbCBtX3BhdXNlZDsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAg
UmVuZGVyT2JqZWN0KiAgIG1fb2JqZWN0OwogICAgIAotICAgIGJvb2wgbV9zdGFsZTsKKyAgICBB
bmltYXRpb25UaW1lckNhbGxiYWNrIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjazsKKyAgICBBbmlt
YXRpb25FdmVudERpc3BhdGNoZXIgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXI7CisgICAgUmVm
UHRyPEFuaW1hdGlvbj4gbV9hbmltYXRpb247CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBtX2Nv
bXBBbmltOworICAgIGJvb2wgbV93YWl0aW5nRm9yRW5kRXZlbnQ7CiB9OwogCi1jbGFzcyBDb21w
b3NpdGVJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitjbGFzcyBJbXBs
aWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICB+Q29t
cG9zaXRlSW1wbGljaXRBbmltYXRpb24oKSB7IGRlbGV0ZUFsbFZhbHVlcyhtX2FuaW1hdGlvbnMp
OyB9Ci0KLSAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotCi0gICAgYm9vbCBh
bmltYXRpbmcoKSBjb25zdDsKLQotICAgIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0Kik7CisgICAg
SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQorICAgIDogQW5pbWF0
aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCisgICAgLCBtX3Byb3BlcnR5
KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCisgICAgLCBtX292ZXJyaWRkZW4oZmFsc2UpCisgICAg
LCBtX2Zyb21TdHlsZSgwKQorICAgICwgbV90b1N0eWxlKDApCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQo
IW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2Ug
d2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBhbmlt
YXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAorICAgICAgICAvLyBhbmltYXRpb25zIHN0aWNrIGFy
b3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisgICAgICAgIGlmICh3YWl0aW5nRm9yRW5kRXZlbnQo
KSAmJiBtX29iamVjdCkKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgCisgICAgICAg
IC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBjbGFzcyBzbyB0
aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCisgICAgICAgIGlmICghcG9zdGFjdGl2
ZSgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VORF9BTklN
QVRJT04sIC0xKTsgICAgIAorICAgIH0KKyAgICAKKyAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9u
RW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmltYXRp
b24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29s
IHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJl
bmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20gPSAwLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8gPSAwKTsKKyAgICAKKyAgICB2b2lkIHNldE92ZXJyaWRkZW4oYm9vbCBi
KTsKKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJp
ZGRlbjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHko
aW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9CisgICAgCisgICAgYm9vbCBpc1Rhcmdl
dFByb3BlcnR5RXF1YWwoaW50IHByb3AsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAKKyAg
ICB2b2lkIGJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50IHByb3AsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50
Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKGlu
TGlzdGVuZXJUeXBlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsK
KyAgICAKIHByaXZhdGU6Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj4gbV9h
bmltYXRpb25zOworICAgIGludCBtX3Byb3BlcnR5OworICAgIGJvb2wgbV9vdmVycmlkZGVuOwor
ICAgIAorICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgorICAgIFJl
bmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV90b1N0eWxlOwogfTsK
IAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24q
IHRyYW5zaXRpb24pCi06IG1fZnJvbVN0eWxlKDApCi0sIG1fdG9TdHlsZSgwKQotLCBtX3Byb3Bl
cnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCi0sIG1fZnVuY3Rpb24odHJhbnNpdGlvbi0+dGlt
aW5nRnVuY3Rpb24oKSkKLSwgbV9kdXJhdGlvbih0cmFuc2l0aW9uLT5kdXJhdGlvbigpIC8gMTAw
MC4wKQotLCBtX3JlcGVhdENvdW50KHRyYW5zaXRpb24tPnJlcGVhdENvdW50KCkpCi0sIG1faXRl
cmF0aW9uKDApCi0sIG1fZmluaXNoZWQoZmFsc2UpCi0sIG1fc3RhcnRUaW1lKGN1cnJlbnRUaW1l
KCkpCi0sIG1fcGF1c2VkKGZhbHNlKQotLCBtX3BhdXNlVGltZShtX3N0YXJ0VGltZSkKLSwgbV9z
dGFsZShmYWxzZSkKK3ZvaWQgQW5pbWF0aW9uVGltZXJDYWxsYmFjazo6dGltZXJGaXJlZChUaW1l
cjxBbmltYXRpb25UaW1lckJhc2U+KikKIHsKKyAgICBtX2FuaW0tPmFuaW1hdGlvblRpbWVyQ2Fs
bGJhY2tGaXJlZChtX2V2ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7CiB9CiAKLUltcGxpY2l0QW5p
bWF0aW9uOjp+SW1wbGljaXRBbmltYXRpb24oKQordm9pZCBBbmltYXRpb25FdmVudERpc3BhdGNo
ZXI6OnRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCiB7Ci0gICAgQVNTRVJU
KCFtX2Zyb21TdHlsZSAmJiAhbV90b1N0eWxlKTsKKyAgICBtX2FuaW0tPmFuaW1hdGlvbkV2ZW50
RGlzcGF0Y2hlckZpcmVkKG1fZWxlbWVudC5nZXQoKSwgbV9uYW1lLCBtX3Byb3BlcnR5LCBtX3Jl
c2V0LCBtX2V2ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7CiB9Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBmcm9tLCBS
ZW5kZXJTdHlsZSogdG8pCisgICAgCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0
IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRl
QW5pbWF0aW9uKiBjb21wQW5pbSkKKzogbV9hbmltU3RhdGUoU1RBVEVfTkVXKQorLCBtX2l0ZXJh
dGlvbigwKQorLCBtX2FuaW1hdGluZyhmYWxzZSkKKywgbV93YWl0ZWRGb3JSZXNwb25zZShmYWxz
ZSkKKywgbV9zdGFydFRpbWUoMCkKKywgbV9wYXVzZVRpbWUoLTEpCissIG1fb2JqZWN0KHJlbmRl
cmVyKQorLCBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2soY29uc3RfY2FzdDxBbmltYXRpb25CYXNl
Kj4odGhpcykpCissIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKGNvbnN0X2Nhc3Q8QW5pbWF0
aW9uQmFzZSo+KHRoaXMpKQorLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbio+KHRy
YW5zaXRpb24pKQorLCBtX2NvbXBBbmltKGNvbXBBbmltKQorLCBtX3dhaXRpbmdGb3JFbmRFdmVu
dChmYWxzZSkKIHsKLSAgICBzZXRGaW5pc2hlZChmYWxzZSk7Cit9CiAKLSAgICBpZiAobV9mcm9t
U3R5bGUpCi0gICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEo
KSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgbV90b1N0eWxlLT5kZXJlZihyZW5kZXJl
ci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9mcm9tU3R5bGUgPSBmcm9tOwotICAgIGlmIChtX2Zy
b21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigpOwotICAgIG1fdG9TdHlsZSA9IHRv
OwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7Ci0gICAgaWYg
KGZyb20gfHwgdG8pCi0gICAgICAgIG1fc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKK3ZvaWQg
QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBk
b3VibGUgcGFyYW0pCit7CisgICAgLy8gaWYgd2UgZ2V0IGEgUkVTVEFSVCB0aGVuIHdlIGZvcmNl
IGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZQorICAgIGlmIChpbnB1dCA9PSBT
VEFURV9JTlBVVF9NQUtFX05FVykgeworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVf
U1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUpCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRX
YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNU
QVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICBtX3BhdXNlVGltZSA9
IC0xOworICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7CisgICAgICAgIGVuZEFu
aW1hdGlvbihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5w
dXQgPT0gU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04pIHsKKyAgICAgICAgY2FuY2VsVGlt
ZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxF
X0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2
YWlsYWJsZShmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTkVXOworICAgICAg
ICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgIGVu
ZEFuaW1hdGlvbihmYWxzZSk7CiAgICAgICAgIAotICAgIC8vIElmIHdlIGFyZSBzdGFsZSwgYXR0
ZW1wdCB0byB1cGRhdGUgdG8gYSBuZXcgdHJhbnNpdGlvbiB1c2luZyB0aGUgbmV3IHx0b3wgc3R5
bGUuICBJZiB3ZSBhcmUgYWJsZSB0byBmaW5kIGEgbmV3IHRyYW5zaXRpb24sCi0gICAgLy8gdGhl
biB3ZSB3aWxsIHVubWFyayBvdXJzZWx2ZXMgZm9yIGRlYXRoLgotICAgIGlmIChzdGFsZSgpICYm
IGZyb20gJiYgdG8pIHsKLSAgICAgICAgIGZvciAoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlv
biA9IHRvLT50cmFuc2l0aW9ucygpOyB0cmFuc2l0aW9uOyB0cmFuc2l0aW9uID0gdHJhbnNpdGlv
bi0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSAhPSB0cmFuc2l0aW9uLT5w
cm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50IGR1
cmF0aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRpb24oKTsKLSAgICAgICAgICAgIGludCByZXBlYXRD
b3VudCA9IHRyYW5zaXRpb24tPnJlcGVhdENvdW50KCk7Ci0gICAgICAgICAgICBpZiAoZHVyYXRp
b24gJiYgcmVwZWF0Q291bnQpIHsKLSAgICAgICAgICAgICAgICBtX2R1cmF0aW9uID0gZHVyYXRp
b24gLyAxMDAwLjA7Ci0gICAgICAgICAgICAgICAgbV9yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50
OwotICAgICAgICAgICAgICAgIG1fc3RhbGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHVw
ZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIC0xKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRf
QU5JTUFUSU9OKSB7CisgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICBpZiAobV9hbmlt
U3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUpCisgICAgICAgICAgICBt
X2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2UpOworICAgICAgICBt
X2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9Q
QVVTRV9PVkVSUklERSkgeworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRf
V0FJVF9SRVNQT05TRSkgeworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRoZSBXQUlUX1JF
U1BPTlNFIHN0YXRlLCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKKyAg
ICAgICAgICAgIC8vIHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRl
CisgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNU
QVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSkgeworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0g
U1RBVEVfTE9PUElORyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9FTkRJTkcpIHsKKyAgICAgICAg
ICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKG1f
c3RhcnRUaW1lKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IC8vIElmIHdlIGRpZCBub3QgZmluZCBhIG5ldyB0cmFuc2l0aW9uLCB0aGVuIG1hcmsgb3Vyc2Vs
dmVzIGFzIGJlaW5nIGZpbmlzaGVkIHNvIHRoYXQgd2UgY2FuIGJlIHJlbW92ZWQuCi0gICAgaWYg
KHN0YWxlKCkpCi0gICAgICAgIHNldEZpbmlzaGVkKHRydWUpOworICAgIC8vIGV4ZWN1dGUgc3Rh
dGUgbWFjaGluZQorICAgIHN3aXRjaChtX2FuaW1TdGF0ZSkgeworICAgICAgICBjYXNlIFNUQVRF
X05FVzoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklN
QVRJT04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIHx8IGlucHV0
ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRf
UExBWV9TVEFURV9SVU5OSU5HKSB7CisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydCB0
aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAoMCBpZiBubyBkZWxheSkKKyAgICAgICAgICAgICAg
ICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9hbmltU3Rh
dGUgPSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9u
VGltZXJDYWxsYmFjay5zdGFydFRpbWVyKG1fYW5pbWF0aW9uLT5kZWxheSgpLCBFdmVudE5hbWVz
Ojp3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXkoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9X
QUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJU
X1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJU
X1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAg
ICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9u
IHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAg
ICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFC
TEU7CisgICAgICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIg
YSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBz
ZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIG1fb2JqZWN0
LT5hbmltYXRpb24oKS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocnVubmlu
ZygpKTsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGlt
ZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0aGUgdGltZXIsIHBhdXNlIGFu
ZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAg
ICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRl
ID0gU1RBVEVfUEFVU0VEX1dBSVRfVElNRVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRToKKyAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVFlMRV9BVkFJTEFCTEUgfHwg
aW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoZmFsc2Up
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZ
TEVfQVZBSUxBQkxFKSB7CisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVk
LCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQg
d2l0aCBzdGFydCB0aW1lCisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFS
VF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG92ZXJy
aWRlQW5pbWF0aW9ucygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNl
bmQgc3RhcnQgZXZlbnQsIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uU3Rh
cnQoMC4wZik7IC8vIHRoZSBlbGFwc2VkVGltZSBpcyBhbHdheXMgMCBoZXJlCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgorICAgICAgICAg
ICAgICAgIGlmIChvdmVycmlkZGVuKCkgfHwgIXN0YXJ0QW5pbWF0aW9uKDApKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJh
Y2ssIHNvIGZpcmUgdGhlIHN0YXJ0IHRpbWUgaGVyZQorICAgICAgICAgICAgICAgICAgICBtX2Fu
aW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgY3VycmVudFRp
bWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25zZSA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocnVubmluZygpKTsKKyAg
ICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZvciB0aGUgYSBub3RpZmljYXRpb24gdGhh
dCB0aGUgc3R5bGUgaGFzIGJlZW4gc2V0dXAuIElmIHdlJ3JlIGFza2VkIHRvIHdhaXQKKyAgICAg
ICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGUgc3R5bGUgbXVzdCBoYXZlIGJlZW4gcHJv
Y2Vzc2VkLCBzbyB3ZSBjYW4gZGVhbCB3aXRoIHRoaXMgbGlrZSB3ZSB3b3VsZAorICAgICAgICAg
ICAgICAgIC8vIGZvciBXQUlUX1JFU1BPTlNFLCBleGNlcHQgdGhhdCB3ZSBkb24ndCBuZWVkIHRv
IGRvIGFuIGVuZEFuaW1hdGlvbigpLgorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsK
KyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9T
VEFSVF9XQUlUX1JFU1BPTlNFOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lO
UFVUX1NUQVJUX1RJTUVfU0VUIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFV
U0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVU
X1NUQVJUX1RJTUVfU0VUKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwor
ICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBzdGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0
aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRU
aW1lIDw9IDApCisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBs
b29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAgICAgICAgICAgICAgICBwcmltZUV2ZW50VGltZXJz
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRl
ciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHNldENoYW5n
ZWQobV9vYmplY3QtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1h
dGlvbigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdo
aWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQgcmVzcG9uc2UuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFu
ZCB3YWl0LiBXaGVuIAorICAgICAgICAgICAgICAgIC8vIHdlIHVucGF1c2UsIHdlIHdpbGwgYWN0
IGFzIHRob3VnaCB0aGUgc3RhcnQgdGltZXIganVzdCBmaXJlZAorICAgICAgICAgICAgICAgIG1f
cGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAg
ICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9MT09Q
SU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX0xPT1BfVElNRVJf
RklSRUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9G
SVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAg
ICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KKyAgICAgICAgICAg
ICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7CisgICAgICAgICAgICAgICAgcHJpbWVF
dmVudFRpbWVycygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmlt
YXRpb24gYW5kIHdhaXQKKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1l
KCk7CisgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgICAgICAgICAgZW5k
QW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BB
VVNFRF9SVU47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTVEFURV9FTkRJTkc6CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRf
RU5EX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VE
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0VO
RF9USU1FUl9GSVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAg
ICAgICAgICAgICAgICAvLyBFbmQgdGltZXIgZmlyZWQsIGZpbmlzaCB1cAorICAgICAgICAgICAg
ICAgIG9uQW5pbWF0aW9uRW5kKHBhcmFtKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBz
ZXQgdGhlIGZpbmFsIHZhbHVlCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+
ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7Cisg
ICAgICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1hdGlvbigpLT5zdGFydFVwZGF0ZVJlbmRlcmlu
Z0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQg
aGVyZSB3aGVuIHdlJ3ZlIGJlZW4gY2FsbGVkIGZyb20gdGltZXJGaXJlZCgpCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2lu
ZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdAorICAgICAgICAg
ICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5j
ZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAg
ICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1JVTjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfV0FJVF9USU1FUjoKKyAgICAgICAgICAg
IEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpOworICAgICAg
ICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1l
cworICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1l
OworICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSwgZ28gYmFj
ayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7Cisg
ICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9O
LCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRF9XQUlU
X1JFU1BPTlNFOgorICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRF9SVU46CisgICAgICAgICAgICAv
LyBXZSB0cmVhdCB0aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2Ug
aXMgdGhhdCwgd2hlbiB3ZSBhcmUgaW4gdGhlIFdBSVRfUkVTUE9OU0UKKyAgICAgICAgICAgIC8v
IHN0YXRlLCB3ZSBkb24ndCB5ZXQgaGF2ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAw
IHRvIHN0YXJ0QW5pbWF0aW9uLiBXaGVuIHRoZSBTVEFSVF9USU1FCisgICAgICAgICAgICAvLyBl
dmVudCBjb21lcyBpbiBxbmQgd2Ugd2VyZSBpbiB0aGUgUlVOIHN0YXRlLCB3ZSB3aWxsIG5vdGlj
ZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZXQgdGhlIAorICAgICAgICAgICAgLy8gc3RhcnRUaW1l
IGFuZCB3aWxsIGlnbm9yZSBpdC4KKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9J
TlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkp
OworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgaWYgKG1fYW5p
bVN0YXRlID09IFNUQVRFX1BBVVNFRF9SVU4pCisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUg
Kz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdp
biB0aW1lIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2Fp
bgorICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAg
ICAgICBpZiAob3ZlcnJpZGRlbigpIHx8ICFzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNh
bGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fd2Fp
dGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U1RBVEVfRE9ORToKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0
ZSB1bnRpbCB3ZSBhcmUgZGVsZXRlZAorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8v
IHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIGlmIHdlIGNhbWUgb3V0IG9mIFNUQVRFX0VORElO
RyB3aGVuIHdlJ3ZlIGJlZW4gY2FsbGVkIGZyb20gdGltZXJGaXJlZCgpCit9CisgICAgCit2b2lk
IEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJlZChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworICAgIEFTU0VSVChtX29i
amVjdC0+ZG9jdW1lbnQoKSAmJiAhbV9vYmplY3QtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkp
OworICAgIAorICAgIC8vIEZJWE1FOiB1c2UgYW4gZW51bQorICAgIGlmIChldmVudFR5cGUgPT0g
RXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCkKKyAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJh
dGlvbkV2ZW50KQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfTE9PUF9U
SU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVu
dE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCkgeworICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7CisgICAgICAg
IC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlCisgICAgfQogfQogCi1kb3VibGUgSW1wbGlj
aXRBbmltYXRpb246OnByb2dyZXNzKCkgY29uc3QKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0
aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQogewotICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IGN1
cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZTsKKyAgICBtX3dhaXRpbmdGb3JFbmRFdmVudCA9IGZh
bHNlOwogICAgIAotICAgIGlmIChtX2ZpbmlzaGVkIHx8ICFtX2R1cmF0aW9uIHx8IGVsYXBzZWRU
aW1lID49IG1fZHVyYXRpb24pCi0gICAgICAgIHJldHVybiAxLjA7CisgICAgLy8gS2VlcCBhbiBh
dG9taWMgc3RyaW5nIG9uIHRoZSBzdGFjayB0byBrZWVwIGl0IGFsaXZlIHVudGlsIHdlIGV4aXQg
dGhpcyBtZXRob2QKKyAgICAvLyAoc2luY2UgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IG1heSBjYXVz
ZSB8dGhpc3wgdG8gYmUgZGVsZXRlZCwgdGhlcmVmb3JlIHJlbW92aW5nCisgICAgLy8gdGhlIGxh
c3QgcmVmIHRvIHRoZSBhdG9taWMgc3RyaW5nKS4KKyAgICBBdG9taWNTdHJpbmcgYW5pbU5hbWUo
bmFtZSk7CisgICAgQXRvbWljU3RyaW5nIGFuaW1FdmVudFR5cGUoZXZlbnRUeXBlKTsKKyAgICAv
LyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgc3RpY2tzIGFyb3VuZCB0b28KKyAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudFJldGFpbmVyKGVsZW1lbnQpOworICAgIAorICAgIEFTU0VSVCghZWxlbWVu
dCB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5QYWdl
Q2FjaGUoKSkpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lk
IEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlTdGF0ZShib29sIHJ1bikKK3sKKyAgICBpZiAocGF1
c2VkKCkgPT0gcnVuIHx8IGlzbmV3KCkpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShydW4g
PyBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcgOiBTVEFURV9JTlBVVF9QTEFZX1NUQVRF
X1BBVVNFRCwgLTEpOworfQogCi0gICAgaWYgKG1fZnVuY3Rpb24udHlwZSgpID09IExpbmVhclRp
bWluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1cm4gZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uOwor
ZG91YmxlIEFuaW1hdGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNl
dCkgY29uc3QKK3sKKyAgICBpZiAocHJlYWN0aXZlKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IHJ1bm5pbmcoKSA/IChjdXJyZW50VGltZSgpIC0g
bV9zdGFydFRpbWUpIDogKG1fcGF1c2VUaW1lIC0gbV9zdGFydFRpbWUpOworICAgIGlmIChydW5u
aW5nKCkgJiYgZWxhcHNlZFRpbWUgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBk
b3VibGUgZHVyID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgCisgICAgaWYgKHBvc3Rh
Y3RpdmUoKSB8fCAhbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgfHwgZWxhcHNlZFRpbWUgPj0gZHVy
KQorICAgICAgICByZXR1cm4gMS4wOworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIGZyYWN0aW9u
YWwgdGltZSwgdGFraW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24uCisgICAgLy8gVGhlcmUgaXMg
bm8gbmVlZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3Vs
ZCBoYXZlIAorICAgIC8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUKKyAg
ICBkb3VibGUgdCA9IGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAg
aW50IGkgPSAoaW50KSB0OworICAgIHQgLT0gaTsKKyAgICAKKyAgICBpZiAoc2NhbGUgIT0gMSB8
fCBvZmZzZXQgIT0gMCkKKyAgICAgICAgdCA9ICh0IC0gb2Zmc2V0KSAqIHNjYWxlOworICAgIAor
ICAgIGlmIChtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS50eXBlKCkgPT0gTGluZWFyVGlt
aW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVybiB0OwogICAgIAogICAgIC8vIEN1YmljIGJlemll
ci4KLSAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKG1fZnVuY3Rpb24ueDEoKSwg
bV9mdW5jdGlvbi55MSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
ZnVuY3Rpb24ueDIoKSwgbV9mdW5jdGlvbi55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uLCBtX2R1cmF0aW9uKTsKKyAgICBk
b3VibGUgdHQgPSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1
bmN0aW9uKCkueDEoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLnkxKCksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54Migp
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24t
PnRpbWluZ0Z1bmN0aW9uKCkueTIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdCwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgIHJldHVybiB0dDsKK30K
Kwordm9pZCBBbmltYXRpb25CYXNlOjpwcmltZUV2ZW50VGltZXJzKCkKK3sKKyAgICAvLyBEZWNp
ZGUgd2hlbiB0aGUgZW5kIG9yIGxvb3AgZXZlbnQgbmVlZHMgdG8gZmlyZQorICAgIGRvdWJsZSBj
dCA9IGN1cnJlbnRUaW1lKCk7CisgICAgY29uc3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN0
IC0gbV9zdGFydFRpbWU7CisgICAgQVNTRVJUKGVsYXBzZWREdXJhdGlvbiA+PSAwKTsKKyAgICAK
KyAgICBkb3VibGUgdG90YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAg
IGRvdWJsZSBkdXJhdGlvbkxlZnQgPSAwOworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9
IHRvdGFsRHVyYXRpb247CisgICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJh
dGlvbiA8IHRvdGFsRHVyYXRpb24pIHsKKyAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRp
b24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0
aW9uKCkpOworICAgICAgICBuZXh0SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1
cmF0aW9uTGVmdDsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IGhh
dmUgMCBkdXJhdGlvbkxlZnQsIGlmIHdlJ3ZlIGdvdHRlbiB0aGUgZXZlbnQgbGF0ZSBhbmQgd2Ug
YXJlIGFscmVhZHkKKyAgICAvLyBwYXN0IHRvdGFsRHVyYXRpb24uIEluIHRoaXMgY2FzZSB3ZSBz
dGlsbCBmaXJlIGFuIGVuZCB0aW1lciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZW5kLiAKKyAgICAv
LyBUaGlzIGRlZmVycyB0aGUgY2FsbCB0byBzZW5kQW5pbWF0aW9uRXZlbnRzIHRvIGF2b2lkIHJl
LWVudHJhbnQgY2FsbHMgdGhhdCBkZXN0cm95CisgICAgLy8gdGhlIFJlbmRlck9iamVjdCwgYW5k
IHRoZXJlZm9yZSB8dGhpc3wgYmVmb3JlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKyAgICBpZiAodG90
YWxEdXJhdGlvbiA8IDAgfHwgbmV4dEl0ZXJhdGlvblRpbWUgPCB0b3RhbER1cmF0aW9uKSB7Cisg
ICAgICAgIC8vIFdlIGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBsb29wIGV2ZW50Cisg
ICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDApOworICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX0xPT1BJTkc7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFy
dFRpbWVyKGR1cmF0aW9uTGVmdCwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9u
RXZlbnQsIG5leHRJdGVyYXRpb25UaW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8v
IFdlIGFyZSBhdCB0aGUgZW5kLCBzZW5kIGFuIGVuZCBldmVudAorICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX0VORElORzsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0
VGltZXIoZHVyYXRpb25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwg
bmV4dEl0ZXJhdGlvblRpbWUpOworICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgYmxlbmRG
dW5jKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKQEAgLTIyMyw3ICs4MjcsOCBA
QCBzdGF0aWMgaW5saW5lIEludFNpemUgYmxlbmRGdW5jKGNvbnN0IEludFNpemUmIGZyb20sIGNv
bnN0IEludFNpemUmIHRvLCBkb3VibGUgcAogc3RhdGljIGlubGluZSBTaGFkb3dEYXRhKiBibGVu
ZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSogdG8sIGRvdWJs
ZSBwcm9ncmVzcykKIHsgIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsKLSAgICByZXR1cm4gbmV3
IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVzcyksIGJsZW5kRnVu
Yyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Ymx1ciwgdG8tPmJs
dXIsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPmNvbG9yLCB0by0+Y29sb3IsIHByb2dyZXNz
KSk7CisgICAgcmV0dXJuIG5ldyBTaGFkb3dEYXRhKGJsZW5kRnVuYyhmcm9tLT54LCB0by0+eCwg
cHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+eSwgdG8tPnksIHByb2dyZXNzKSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1ciwgcHJvZ3Jl
c3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3MpKTsKIH0KIAog
c3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91Ymxl
IHByb2dyZXNzKQpAQCAtMjM3LDcgKzg0Miw4IEBAIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uCiAg
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gaSA8IGZyb21TaXplID8gZnJvbVtp
XS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9IGkgPCB0b1Np
emUgPyB0b1tpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmRl
ZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MpIDogZnJvbU9wLT5ibGVu
ZCgwLCBwcm9ncmVzcywgdHJ1ZSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRlZE9wKTsK
KyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRl
ZE9wKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI1NCwzMTEgKzg2MCw4Mjgg
QEAgc3RhdGljIGlubGluZSBFVmlzaWJpbGl0eSBibGVuZEZ1bmMoRVZpc2liaWxpdHkgZnJvbSwg
RVZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm8KICAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWSVNJ
QkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20pOwogfQogCi0jZGVmaW5lIEJMRU5EKHBy
b3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCAmJiBtX3Rv
U3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgcmVz
ZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgIGlmIChz
dGFsZSgpKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICB9IFwKLSAgICBpZiAobV9wcm9w
ZXJ0eSA9PSBjQW5pbWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsgXAotICAgICAgICBp
ZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICE9IG1fdG9TdHlsZS0+Z2V0dGVyKCkpIHtcCi0gICAg
ICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7IFwKLSAgICAgICAgICAgIGlmICghYW5pbWF0ZWRT
dHlsZSkgXAotICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5y
ZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgICAgICBh
bmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKG1fZnJvbVN0eWxlLT5nZXR0ZXIoKSwgbV90
b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAgICAgIGlmIChtX3Byb3Bl
cnR5ID09IHByb3ApIFwKLSAgICAgICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgfVwKLSAg
ICB9XAotCi0jZGVmaW5lIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IocHJvcCwgZ2V0dGVyLCBz
ZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+Z2V0dGVy
KCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSB7IFwKLSAgICAgICAgcmVzZXQocmVuZGVyZXIs
IGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgIGlmIChzdGFsZSgpKSBcCi0g
ICAgICAgICAgICByZXR1cm47IFwKLSAgICB9IFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBjQW5p
bWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsgXAotICAgICAgICBDb2xvciBmcm9tQ29s
b3IgPSBtX2Zyb21TdHlsZS0+Z2V0dGVyKCk7IFwKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IG1f
dG9TdHlsZS0+Z2V0dGVyKCk7IFwKLSAgICAgICAgaWYgKGZyb21Db2xvci5pc1ZhbGlkKCkgfHwg
dG9Db2xvci5pc1ZhbGlkKCkpIHsgXAotICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxp
ZCgpKSBcCi0gICAgICAgICAgICAgICAgZnJvbUNvbG9yID0gbV9mcm9tU3R5bGUtPmNvbG9yKCk7
IFwKLSAgICAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpIFwKLSAgICAgICAgICAgICAg
ICB0b0NvbG9yID0gbV90b1N0eWxlLT5jb2xvcigpOyBcCi0gICAgICAgICAgICBpZiAoZnJvbUNv
bG9yICE9IHRvQ29sb3IpIHtcCi0gICAgICAgICAgICAgICAgc2V0RmluaXNoZWQoZmFsc2UpOyBc
Ci0gICAgICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAg
ICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJT
dHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0
dGVyKGJsZW5kRnVuYyhmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKCkpKTtcCi0gICAgICAg
ICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47IFwKLSAgICAgICAgICAgIH1cCi0gICAgICAgIH1cCi0gICAgfVwKLQotI2RlZmluZSBC
TEVORF9TSEFET1cocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9
PSBwcm9wICYmICghbV90b1N0eWxlLT5nZXR0ZXIoKSB8fCAhdGFyZ2V0U3R5bGUtPmdldHRlcigp
IHx8ICptX3RvU3R5bGUtPmdldHRlcigpICE9ICp0YXJnZXRTdHlsZS0+Z2V0dGVyKCkpKSB7IFwK
LSAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0g
ICAgICAgIGlmIChzdGFsZSgpKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICB9IFwKLSAg
ICBpZiAobV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsg
XAotICAgICAgICBpZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICYmIG1fdG9TdHlsZS0+Z2V0dGVy
KCkgJiYgKm1fZnJvbVN0eWxlLT5nZXR0ZXIoKSAhPSAqbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wK
LSAgICAgICAgICAgIHNldEZpbmlzaGVkKGZhbHNlKTsgXAotICAgICAgICAgICAgaWYgKCFhbmlt
YXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVy
ZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAg
ICAgIGFuaW1hdGVkU3R5bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigp
LCBtX3RvU3R5bGUtPmdldHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1f
cHJvcGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9
XAotICAgIH0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVJbXBs
aWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxl
KiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBubyB0cmFuc2l0
aW9uLXByb3BlcnR5LCB0aGVuIHRoZSBvbmx5IHdheSB0byB0ZWxsIGlmIG91ciBnb2FsIHN0YXRl
IGNoYW5nZWQgaXMgdG8gY2hlY2sKLSAgICAvLyBldmVyeSBzaW5nbGUgYW5pbWF0YWJsZSBwcm9w
ZXJ0eS4gIEZvciBub3cgd2UnbGwganVzdCBkaWZmIHRoZSBzdHlsZXMgdG8gYXNrIHRoYXQgcXVl
c3Rpb24sCi0gICAgLy8gYnV0IHdlIHNob3VsZCByZWFsbHkgZXhjbHVkZSBub24tYW5pbWF0YWJs
ZSBwcm9wZXJ0aWVzLgotICAgIGlmICghbV90b1N0eWxlIHx8IChtX3Byb3BlcnR5ID09IGNBbmlt
YXRlQWxsICYmIHRhcmdldFN0eWxlLT5kaWZmKG1fdG9TdHlsZSkpKSB7Ci0gICAgICAgIHJlc2V0
KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgaWYgKHN0YWxl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEJsb3cgdXAg
c2hvcnRoYW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQuCi0gICAgc2V0RmluaXNoZWQo
dHJ1ZSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBzZXRMZWZ0KTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eVJpZ2h0LCByaWdodCwgc2V0UmlnaHQpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5VG9wLCB0b3AsIHNldFRvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3R0b20sIGJv
dHRvbSwgc2V0Qm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdpZHRoLCB3aWR0aCwgc2V0
V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5SGVpZ2h0LCBoZWlnaHQsIHNldEhlaWdodCk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJvcmRlckxlZnRXaWR0aCwg
c2V0Qm9yZGVyTGVmdFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGgsIGJvcmRlclJpZ2h0V2lkdGgsIHNldEJvcmRlclJpZ2h0V2lkdGgpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIGJvcmRlclRvcFdpZHRoLCBzZXRCb3JkZXJUb3BXaWR0
aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgYm9yZGVyQm90dG9t
V2lkdGgsIHNldEJvcmRlckJvdHRvbVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU1hcmdp
bkxlZnQsIG1hcmdpbkxlZnQsIHNldE1hcmdpbkxlZnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5
TWFyZ2luUmlnaHQsIG1hcmdpblJpZ2h0LCBzZXRNYXJnaW5SaWdodCk7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlNYXJnaW5Ub3AsIG1hcmdpblRvcCwgc2V0TWFyZ2luVG9wKTsKLSAgICBCTEVORChD
U1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgbWFyZ2luQm90dG9tLCBzZXRNYXJnaW5Cb3R0b20pOwot
ICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsIHBhZGRpbmdMZWZ0LCBzZXRQYWRkaW5n
TGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIHBhZGRpbmdSaWdodCwg
c2V0UGFkZGluZ1JpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIHBhZGRp
bmdUb3AsIHNldFBhZGRpbmdUb3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ0JvdHRv
bSwgcGFkZGluZ0JvdHRvbSwgc2V0UGFkZGluZ0JvdHRvbSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlPcGFjaXR5LCBvcGFjaXR5LCBzZXRPcGFjaXR5KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUNv
bG9yLCBjb2xvciwgc2V0Q29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCBiYWNrZ3JvdW5kQ29sb3IsIHNldEJhY2tncm91bmRDb2xvcik7Ci0gICAgQkxFTkRfTUFZ
QkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgY29sdW1u
UnVsZUNvbG9yLCBzZXRDb2x1bW5SdWxlQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uUnVsZVdpZHRoLCBjb2x1bW5SdWxlV2lkdGgsIHNldENvbHVtblJ1bGVXaWR0aCk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsIGNvbHVtbkdhcCwgc2V0Q29s
dW1uR2FwKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCBjb2x1bW5D
b3VudCwgc2V0Q29sdW1uQ291bnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
V2lkdGgsIGNvbHVtbldpZHRoLCBzZXRDb2x1bW5XaWR0aCk7Ci0gICAgQkxFTkRfTUFZQkVfSU5W
QUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgdGV4dFN0cm9rZUNv
bG9yLCBzZXRUZXh0U3Ryb2tlQ29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1Io
Q1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCB0ZXh0RmlsbENvbG9yLCBzZXRUZXh0Rmls
bENvbG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFj
aW5nLCBob3Jpem9udGFsQm9yZGVyU3BhY2luZywgc2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCB2ZXJ0
aWNhbEJvcmRlclNwYWNpbmcsIHNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyk7Ci0gICAgQkxFTkRf
TUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgYm9yZGVyTGVm
dENvbG9yLCBzZXRCb3JkZXJMZWZ0Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09M
T1IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBzZXRCb3Jk
ZXJSaWdodENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5
Qm9yZGVyVG9wQ29sb3IsIGJvcmRlclRvcENvbG9yLCBzZXRCb3JkZXJUb3BDb2xvcik7Ci0gICAg
QkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBi
b3JkZXJCb3R0b21Db2xvciwgc2V0Qm9yZGVyQm90dG9tQ29sb3IpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5WkluZGV4LCB6SW5kZXgsIHNldFpJbmRleCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0LCBsaW5lSGVpZ2h0LCBzZXRMaW5lSGVpZ2h0KTsKLSAgICBCTEVORF9NQVlCRV9J
TlZBTElEX0NPTE9SKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBvdXRsaW5lQ29sb3IsIHNldE91
dGxpbmVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCBvdXRsaW5l
T2Zmc2V0LCBzZXRPdXRsaW5lT2Zmc2V0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU91dGxpbmVX
aWR0aCwgb3V0bGluZVdpZHRoLCBzZXRPdXRsaW5lV2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5TGV0dGVyU3BhY2luZywgbGV0dGVyU3BhY2luZywgc2V0TGV0dGVyU3BhY2luZyk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgd29yZFNwYWNpbmcsIHNldFdvcmRTcGFjaW5n
KTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGJveFNoYWRv
dywgc2V0Qm94U2hhZG93KTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlUZXh0U2hhZG93
LCB0ZXh0U2hhZG93LCBzZXRUZXh0U2hhZG93KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSwgdHJhbnNmb3JtLCBzZXRUcmFuc2Zvcm0pOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgdHJhbnNmb3JtT3JpZ2luWCwgc2V0VHJhbnNmb3Jt
T3JpZ2luWCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZLCB0
cmFuc2Zvcm1PcmlnaW5ZLCBzZXRUcmFuc2Zvcm1PcmlnaW5ZKTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsIGJvcmRlclRvcExlZnRSYWRpdXMsIHNldEJv
cmRlclRvcExlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9w
UmlnaHRSYWRpdXMsIGJvcmRlclRvcFJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJUb3BSaWdodFJhZGl1
cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBi
b3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBib3JkZXJCb3R0
b21SaWdodFJhZGl1cywgc2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5VmlzaWJpbGl0eSwgdmlzaWJpbGl0eSwgc2V0VmlzaWJpbGl0eSk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlab29tLCB6b29tLCBzZXRab29tKTsKLX0KLQotUmVuZGVyU3R5bGUqIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKLXsK
LSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyZW50VHJhbnNpdGlvbnMgPSBjdXJyZW50U3R5bGUt
PnRyYW5zaXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdGFyZ2V0VHJhbnNpdGlvbnMg
PSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBib29sIHRyYW5zaXRpb25zQ2hhbmdl
ZCA9IG1fYW5pbWF0aW9ucy5pc0VtcHR5KCkgfHwgKGN1cnJlbnRUcmFuc2l0aW9ucyAhPSB0YXJn
ZXRUcmFuc2l0aW9ucyAmJiAhKGN1cnJlbnRUcmFuc2l0aW9ucyAmJiB0YXJnZXRUcmFuc2l0aW9u
cyAmJiAqY3VycmVudFRyYW5zaXRpb25zID09ICp0YXJnZXRUcmFuc2l0aW9ucykpOwotCi0gICAg
aWYgKHRyYW5zaXRpb25zQ2hhbmdlZCkgewotICAgICAgICBIYXNoTWFwPGludCwgSW1wbGljaXRB
bmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgICAgICAg
Ci0gICAgICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9y
IGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
IC8vIE1hcmsgYW55IHJ1bm5pbmcgYW5pbWF0aW9ucyBhcyBzdGFsZSBpZiB0aGUgc2V0IG9mIHRy
YW5zaXRpb25zIGNoYW5nZWQuICBTdGFsZSBhbmltYXRpb25zIGNvbnRpbnVlCi0gICAgICAgICAg
ICAvLyB0byBibGVuZCBvbiBhIHRpbWVyLCBhbmQgdGhlbiByZW1vdmUgdGhlbXNlbHZlcyB3aGVu
IGZpbmlzaGVkLgotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0U3RhbGUoKTsKLQotICAgICAg
ICAvLyBJZiBvdXIgdHJhbnNpdGlvbnMgY2hhbmdlZCB3ZSBuZWVkIHRvIGFkZCBuZXcgYW5pbWF0
aW9ucyBmb3IgYW55IHRyYW5zaXRpb25zIHRoYXQKLSAgICAgICAgLy8gZG9uJ3QgZXhpc3QgeWV0
LiAgSWYgYSBuZXcgdHJhbnNpdGlvbiBjb25mbGljdHMgd2l0aCBhIGN1cnJlbnRseSBydW5uaW5n
IHN0YWxlIHRyYW5zaXRpb24sIHRoZW4gd2Ugd2lsbCBub3QgYWRkIGl0LgotICAgICAgICAvLyBU
aGUgc3RhbGUgdHJhbnNpdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgaXRzZWxmIHRv
IHRoZSBuZXcgdHJhbnNpdGlvbiBpZiBpdCBldmVyIGdldHMgcmVzZXQgb3IgZmluaXNoZXMuCi0g
ICAgICAgIGZvciAoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IHRhcmdldFRyYW5zaXRp
b25zOyB0cmFuc2l0aW9uOyB0cmFuc2l0aW9uID0gdHJhbnNpdGlvbi0+bmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpbnQgcHJvcGVydHkgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgaW50IGR1cmF0aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRpb24oKTsKLSAgICAgICAgICAgIGlu
dCByZXBlYXRDb3VudCA9IHRyYW5zaXRpb24tPnJlcGVhdENvdW50KCk7Ci0gICAgICAgICAgICBp
ZiAocHJvcGVydHkgJiYgZHVyYXRpb24gJiYgcmVwZWF0Q291bnQgJiYgIW1fYW5pbWF0aW9ucy5j
b250YWlucyhwcm9wZXJ0eSkpIHsKLSAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbWF0aW9uID0gbmV3IEltcGxpY2l0QW5pbWF0aW9uKHRyYW5zaXRpb24pOwotICAgICAgICAg
ICAgICAgIG1fYW5pbWF0aW9ucy5zZXQocHJvcGVydHksIGFuaW1hdGlvbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KK2NsYXNzIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckJhc2UoaW50IHByb3ApCisgICAgOiBtX3Byb3AocHJvcCkKKyAgICB7
IH0KKyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgeyB9CisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0PTA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0PTA7
CisgICAgCisgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9CisgICAg
Citwcml2YXRlOgorICAgIGludCBtX3Byb3A7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJCYXNl
IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoaW50IHByb3AsIFQgKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRl
cikoKTsKICAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5bGU6OiptX2dl
dHRlcikoKSBjb25zdDsKK307CiAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBv
YmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdl
IHdhbnQgdGhlbQotICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVl
ZGVkLgotICAgIFJlbmRlclN0eWxlKiByZXN1bHQgPSAwOwotICAgIEhhc2hNYXA8aW50LCBJbXBs
aWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAg
VmVjdG9yPGludD4gb2Jzb2xldGVUcmFuc2l0aW9uczsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyKGludCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQorICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNl
dHRlcikKKyAgICB7IH0KICAgICAKLSAgICAvLyBMb29rIGF0IHRoZSAiYWxsIiBhbmltYXRpb24g
Zmlyc3QuCi0gICAgSW1wbGljaXRBbmltYXRpb24qIGFsbEFuaW1hdGlvbiA9IG1fYW5pbWF0aW9u
cy5nZXQoY0FuaW1hdGVBbGwpOwotICAgIGlmIChhbGxBbmltYXRpb24pIHsKLSAgICAgICAgYWxs
QW5pbWF0aW9uLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0
eWxlLCByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBj
b25zdAorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoKGEtPipQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxUPjo6bV9nZXR0ZXIpKCksIHByb2cpKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7Cit9OwogCi0gICAgICAgIC8vIElm
IHRoZSBhbmltYXRpb24gaXMgZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBhcyBzdGFsZSwgdGhlbiB3
ZSBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gaXRlcmF0aW9uIG9mIHRoZSBo
YXNobWFwIGlzIGZpbmlzaGVkLgotICAgICAgICBpZiAoYWxsQW5pbWF0aW9uLT5maW5pc2hlZCgp
ICYmIGFsbEFuaW1hdGlvbi0+c3RhbGUoKSkKLSAgICAgICAgICAgIG9ic29sZXRlVHJhbnNpdGlv
bnMuYXBwZW5kKGNBbmltYXRlQWxsKTsKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNoYWRvdyA6IHB1
YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8U2hhZG93RGF0YSo+IHsKK3B1YmxpYzoKKyAgICBQ
cm9wZXJ0eVdyYXBwZXJTaGFkb3coaW50IHByb3AsIFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFNoYWRvd0RhdGEq
LCBib29sKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRhKj4ocHJvcCwg
Z2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1
YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdAorICAgIHsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YSA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgIFNoYWRvd0RhdGEqIHNoYWRvd2IgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFzaGFkb3dhICYmIHNoYWRvd2IgfHwgc2hhZG93YSAmJiAh
c2hhZG93YikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNoYWRvd2Eg
JiYgc2hhZG93YiAmJiAoKnNoYWRvd2EgIT0gKnNoYWRvd2IpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgLy8gTm93IGxv
b2sgYXQgdGhlIHNwZWNpYWxpemVkIGFuaW1hdGlvbnMuCi0gICAgZm9yIChIYXNoTWFwPGludCwg
SW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIFNraXAgb3ZlciB0aGUgImFsbCIgYW5pbWF0
aW9uLCBzaW5jZSB3ZSBhbmltYXRlZCBpdCBhbHJlYWR5LgotICAgICAgICBpZiAoaXQtPnNlY29u
ZC0+cHJvcGVydHkoKSA9PSBjQW5pbWF0ZUFsbCkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAg
IHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAg
ICAgU2hhZG93RGF0YSogc2hhZG93YSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIFNoYWRv
d0RhdGEqIHNoYWRvd2IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFkb3dEYXRhIGRl
ZmF1bHRTaGFkb3dEYXRhKDAsIDAsIDAsIENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgIAot
ICAgICAgICBpdC0+c2Vjb25kLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUs
IHRhcmdldFN0eWxlLCByZXN1bHQpOwotCi0gICAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gaXMg
ZG9uZSBhbmQgd2UgYXJlIG1hcmtlZCBhcyBzdGFsZSwgdGhlbiB3ZSBjYW4gYmUgcmVtb3ZlZCBh
ZnRlciB0aGUKLSAgICAgICAgLy8gaXRlcmF0aW9uIG9mIHRoZSBoYXNobWFwIGlzIGZpbmlzaGVk
LgotICAgICAgICBpZiAoaXQtPnNlY29uZC0+ZmluaXNoZWQoKSAmJiBpdC0+c2Vjb25kLT5zdGFs
ZSgpKQotICAgICAgICAgICAgb2Jzb2xldGVUcmFuc2l0aW9ucy5hcHBlbmQoaXQtPnNlY29uZC0+
cHJvcGVydHkoKSk7CisgICAgICAgIGlmICghc2hhZG93YSkKKyAgICAgICAgICAgIHNoYWRvd2Eg
PSAmZGVmYXVsdFNoYWRvd0RhdGE7CisgICAgICAgIGlmICghc2hhZG93YikKKyAgICAgICAgICAg
IHNoYWRvd2IgPSAmZGVmYXVsdFNoYWRvd0RhdGE7CisgICAgICAgIAorICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhzaGFkb3dhLCBzaGFkb3diLCBwcm9nKSwgZmFsc2UpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoU2hh
ZG93RGF0YSosIGJvb2wpOworfTsKIAorY2xhc3MgUHJvcGVydHlXcmFwcGVySW50U2l6ZSA6IHB1
YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4geworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckludFNpemUoaW50IHByb3AsIEludFNpemUgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgSW50U2l6ZSYpKQor
ICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPEludFNpemU+KHByb3AsIGdldHRlcikKKyAgICAs
IG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7
CisgICAgICAgIEludFNpemUgc2l6ZWEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBJbnRT
aXplIHNpemViID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiAo
c2l6ZWEgPT0gc2l6ZWIpOwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgY3VsbCBvdXQgYW55IHN0
YWxlIGFuaW1hdGlvbnMgdGhhdCBhcmUgZmluaXNoZWQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG9ic29sZXRlVHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKG9ic29sZXRlVHJhbnNp
dGlvbnNbaV0pOwotICAgICAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyLCAwLCAwKTsKLSAg
ICAgICAgZGVsZXRlIGFuaW1hdGlvbjsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5
bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3Vi
bGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIEludFNpemUgc2l6ZWEgPSAoYS0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBJbnRTaXplIHNpemViID0gKGItPiptX2dldHRlcikoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoc2l6ZWEsIHNp
emViLCBwcm9nKSk7CiAgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIChSZW5kZXJTdHls
ZTo6Km1fc2V0dGVyKShjb25zdCBJbnRTaXplJik7Cit9OwogCi0gICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJldHVybiB0YXJnZXRTdHlsZTsKLX0KLQotYm9v
bCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKLXsKLSAgICBI
YXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9h
bmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9u
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5maW5pc2hlZCgpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbXBvc2l0ZUltcGxp
Y2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1h
dGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5yZXNldChyZW5kZXJlciwgMCwgMCk7Ci19CitjbGFzcyBQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJC
YXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihpbnQg
cHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgOiBQcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3ApCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBDb2xv
ciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0g
KGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIENv
bG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9yIHRvQ29sb3Ig
PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3Iu
aXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChk
c3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZykpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENv
bG9yJik7Cit9OwogCiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7CiBwdWJsaWM6
CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqKTsKICAgICB+QW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoKTsKLQotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBn
ZXQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKTsKKyAgICAKKyAgICBDb21wb3NpdGVBbmlt
YXRpb24qIGFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJPYmplY3QqKTsKICAgICBib29s
IGNsZWFyKFJlbmRlck9iamVjdCopOwogICAgIAotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qKTsKLSAgICB2b2lkIHVwZGF0ZVRpbWVyKCk7Ci0K
LSAgICBib29sIGhhc0ltcGxpY2l0QW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2FuaW1h
dGlvbnMuaXNFbXB0eSgpOyB9Ci0KKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25U
aW1lcigpOworICAgIAorICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKFRp
bWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopOworICAgIHZvaWQgc3RhcnRVcGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gIW1fY29tcG9zaXRlQW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICAKKyAg
ICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCBy
ZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgCisgICAgdm9pZCBzdHls
ZUF2YWlsYWJsZSgpOworICAgIAorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgCisgICAgc3Rh
dGljIGJvb2wgcHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBpbnQgZ2V0UHJvcGVydHlBdEluZGV4
KGludCBpKTsKKyAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMoKSB7IHJldHVybiBnUHJv
cGVydHlXcmFwcGVycy0+c2l6ZSgpOyB9CisgICAgCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2Ug
bmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIGJvb2wg
YmxlbmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKTsKKyAgICAKKyAgICB2
b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRpbmcpIHsgaWYgKHdhaXRp
bmcpIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7IGVsc2UgbV9udW1TdHlsZUF2YWlsYWJs
ZVdhaXRlcnMtLTsgfQorICAgIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCos
IENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj4gbV9hbmltYXRpb25zOwotICAgIFRpbWVyPEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX3RpbWVyOworICAgIHN0YXRpYyB2b2lkIGVuc3Vy
ZVByb3BlcnR5TWFwKCk7CisgICAgCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCos
IENvbXBvc2l0ZUFuaW1hdGlvbio+IFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDsKKyAgICAKKyAg
ICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXAgbV9jb21wb3NpdGVBbmltYXRpb25zOworICAgIFRp
bWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX2FuaW1hdGlvblRpbWVyOworICAgIFRp
bWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNo
ZXI7CiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgdWludDMyX3QgbV9udW1TdHlsZUF2YWlsYWJs
ZVdhaXRlcnM7CisgICAgCisgICAgc3RhdGljIFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4q
IGdQcm9wZXJ0eVdyYXBwZXJzOworICAgIHN0YXRpYyBpbnQgZ1Byb3BlcnR5V3JhcHBlck1hcFtu
dW1DU1NQcm9wZXJ0aWVzXTsKIH07CiAKK1ZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4qIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnUHJvcGVydHlXcmFwcGVycyA9IDA7CitpbnQgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdQcm9wZXJ0eVdyYXBwZXJNYXBbXTsKKwogQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKiBm
cmFtZSkKLSAgICA6IG1fdGltZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp0
aW1lckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKzogbV9hbmltYXRpb25UaW1lcih0aGlz
LCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCissIG1f
dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZCkKKywgbV9mcmFtZShmcmFtZSkKKywg
bV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMoMCkKIHsKKyAgICBlbnN1cmVQcm9wZXJ0eU1hcCgp
OwogfQogCiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6fkFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlKCkKIHsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9hbmltYXRpb25zKTsKKyAgICBkZWxl
dGVBbGxWYWx1ZXMobV9jb21wb3NpdGVBbmltYXRpb25zKTsKK30KKworLy8gc3RhdGljCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVQcm9wZXJ0eU1hcCgpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJlIHdlIHNob3VsZCBy
ZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBBbmltYXRpb25Db250cm9sbGVy
IGlzIGRlc3Ryb3llZD8KKyAgICBpZiAoZ1Byb3BlcnR5V3JhcHBlcnMgPT0gMCkgeworICAgICAg
ICBnUHJvcGVydHlXcmFwcGVycyA9IG5ldyBWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KCk7
CisgICAgICAgIAorICAgICAgICAvLyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVy
cyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcworICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUxlZnQs
ICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpzZXRMZWZ0KSk7CisgICAgICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1By
b3BlcnR5UmlnaHQsICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQp
KTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
PExlbmd0aD4oQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6
OnNldFRvcCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20s
ICZSZW5kZXJTdHlsZTo6c2V0Qm90dG9tKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2lkdGgsICZSZW5k
ZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgpKTsKKyAgICAgICAgZ1Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVy
dHlIZWlnaHQsICZSZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCkp
OworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgpKTsKKyAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSk7CisgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0aCkpOworICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgpKTsKKyAgICAgICAgZ1By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJv
cGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6
c2V0TWFyZ2luTGVmdCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5
bGU6Om1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSk7CisgICAgICAg
IGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENT
U1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwgJlJlbmRlclN0eWxl
OjpzZXRNYXJnaW5Ub3ApKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJT
dHlsZTo6bWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSkpOworICAg
ICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdMZWZ0LCAmUmVu
ZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0
LCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmln
aHQpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdU
b3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCkpOworICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRp
bmdCb3R0b20sICZSZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQ
YWRkaW5nQm90dG9tKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9w
YWNpdHksICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkpOworICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3ImPihDU1NQcm9wZXJ0
eUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yKSk7Cisg
ICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBDb2xvciY+KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tn
cm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IpKTsKKyAgICAgICAg
Z1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNo
b3J0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSk7CisgICAgICAg
IGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29sdW1uR2FwLCAmUmVuZGVy
U3R5bGU6OnNldENvbHVtbkdhcCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6c2V0Q29s
dW1uQ291bnQpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLCAmUmVuZGVyU3R5
bGU6OmNvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSk7CisgICAgICAg
IGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgJlJlbmRlclN0eWxlOjpob3Jp
em9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFsQm9yZGVyU3Bh
Y2luZykpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNh
bEJvcmRlclNwYWNpbmcpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZSZW5kZXJTdHlsZTo6eklu
ZGV4LCAmUmVuZGVyU3R5bGU6OnNldFpJbmRleCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUxpbmVIZWln
aHQsICZSZW5kZXJTdHlsZTo6bGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVpZ2h0
KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxpbnQ+KENTU1Byb3BlcnR5T3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zm
c2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVPZmZzZXQpKTsKKyAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQ
cm9wZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZVdpZHRoKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJl
bmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcp
KTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
PGludD4oQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZykpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+
KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJl
bmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6
c2V0VHJhbnNmb3JtT3JpZ2luWCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9y
aWdpblksICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRU
cmFuc2Zvcm1PcmlnaW5ZKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BMZWZ0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyVG9wTGVmdFJhZGl1cykpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wUmln
aHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKSk7CisgICAgICAgIGdQcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0
b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cykp
OworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8
RVZpc2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmls
aXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxpdHkpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20s
ICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBGSVhNRTogdGhlc2UgbWlnaHQgYmUgaW52YWxpZCBjb2xvcnMsIG5lZWQgdG8g
Y2hlY2sgZm9yIHRoYXQKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxl
Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENv
bHVtblJ1bGVDb2xvcikpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJv
a2VDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dFN0cm9rZUNvbG9yKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEZp
bGxDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRl
eHRGaWxsQ29sb3IpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxl
ZnRDb2xvcikpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdo
dENvbG9yKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3Ip
KTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
TWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xv
cikpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
OjpvdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yKSk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGVzZSBhcmUgZm9yIHNoYWRvd3MKKyAgICAgICAgZ1Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0
Qm94U2hhZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hT
aGFkb3cpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjp0ZXh0U2hh
ZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkgbnVtQ1NTUHJvcGVydGllczsgKytpKQor
ICAgICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlck1hcFtpXSA9IENTU1Byb3BlcnR5SW52YWxpZDsK
KyAgICAgICAgCisgICAgICAgIHNpemVfdCBuID0gZ1Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAg
ICAgIEFTU0VSVCgoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXS0+cHJvcGVydHkoKSAtIGZpcnN0Q1NT
UHJvcGVydHkgPCBudW1DU1NQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIGdQcm9wZXJ0eVdyYXBw
ZXJNYXBbKCpnUHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCkgLSBmaXJzdENTU1Byb3Bl
cnR5XSA9IGk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLUNvbXBvc2l0ZUltcGxpY2l0QW5pbWF0
aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0KFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKKy8vIHN0YXRpYworYm9vbCBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCiB7Ci0gICAgQ29tcG9zaXRlSW1wbGljaXRB
bmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy5nZXQocmVuZGVyZXIpOwotICAgIGlm
ICghYW5pbWF0aW9uICYmIHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKSB7Ci0gICAgICAgIGFu
aW1hdGlvbiA9IG5ldyBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbigpOwotICAgICAgICBtX2Fu
aW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBhbmltYXRpb24pOworICAgIGlmIChwcm9wID09IGNBbmlt
YXRlQWxsKSB7CisgICAgICAgIHNpemVfdCBuID0gZ1Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghKCpnUHJvcGVydHlXcmFwcGVycylbaV0tPmVxdWFscyhhLCBiKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIGludCBwcm9wSW5kZXggPSBwcm9wIC0gZmlyc3RDU1NQcm9wZXJ0eTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwcm9wSW5kZXggPj0gMCAmJiBwcm9wSW5kZXggPCBudW1DU1NQcm9wZXJ0aWVz
KSB7CisgICAgICAgICAgICBpbnQgaSA9IGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcEluZGV4XTsK
KyAgICAgICAgICAgIHJldHVybiAoaSA+PSAwKSA/ICgqZ1Byb3BlcnR5V3JhcHBlcnMpW2ldLT5l
cXVhbHMoYSwgYikgOiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBzdGF0aWMKK2ludCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0UHJvcGVy
dHlBdEluZGV4KGludCBpKQoreworICAgIGlmIChpIDwgMCB8fCBpID49IChpbnQpIGdQcm9wZXJ0
eVdyYXBwZXJzLT5zaXplKCkpCisgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Cisg
ICAgICAgIAorICAgIHJldHVybiAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXS0+cHJvcGVydHkoKTsK
K30KKyAgICAKKy8vIHN0YXRpYyAtIHJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29m
dHdhcmUgYW5pbWF0aW9uIHRpbWVycworYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
YmxlbmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKQoreworICAgIGlmIChw
cm9wID09IGNBbmltYXRlQWxsKSB7CisgICAgICAgIGJvb2wgbmVlZHNUaW1lciA9IGZhbHNlOwor
ICAgIAorICAgICAgICBzaXplX3QgbiA9IGdQcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBQ
cm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnUHJvcGVydHlXcmFwcGVycylbaV07Cisg
ICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkgeworICAgICAgICAgICAgICAg
IHdyYXBwZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICAgICAgbmVlZHNU
aW1lciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5l
ZWRzVGltZXI7CisgICAgfQorICAgIAorICAgIGludCBwcm9wSW5kZXggPSBwcm9wIC0gZmlyc3RD
U1NQcm9wZXJ0eTsKKyAgICBpZiAocHJvcEluZGV4ID49IDAgJiYgcHJvcEluZGV4IDwgbnVtQ1NT
UHJvcGVydGllcykgeworICAgICAgICBpbnQgaSA9IGdQcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcElu
ZGV4XTsKKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVy
QmFzZSogd3JhcHBlciA9ICgqZ1Byb3BlcnR5V3JhcHBlcnMpW2ldOworICAgICAgICAgICAgd3Jh
cHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9nKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworQ29tcG9zaXRl
QW5pbWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWNjZXNzQ29tcG9zaXRlQW5p
bWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKKyAgICBp
ZiAoIWFuaW1hdGlvbikgeworICAgICAgICBhbmltYXRpb24gPSBuZXcgQ29tcG9zaXRlQW5pbWF0
aW9uKHRoaXMpOworICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBh
bmltYXRpb24pOwogICAgIH0KICAgICByZXR1cm4gYW5pbWF0aW9uOwogfQogCiBib29sIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewot
ICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMu
dGFrZShyZW5kZXJlcik7CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0
aGluZyBPUiB3ZSBhcmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KKyAgICAvLyBkbyBh
IHNldENoYW5nZWQoKSB3aGVuIHN1c3BlbmRlZAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5p
bWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLnRha2UocmVuZGVyZXIpOwogICAgIGlmICgh
YW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5yZXNldChy
ZW5kZXJlcik7CisgICAgYW5pbWF0aW9uLT5yZXNldFRyYW5zaXRpb25zKHJlbmRlcmVyKTsKKyAg
ICBib29sIHdhc1N1c3BlbmRlZCA9IGFuaW1hdGlvbi0+c3VzcGVuZGVkKCk7CiAgICAgZGVsZXRl
IGFuaW1hdGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdhc1N1c3BlbmRlZDsK
IH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlVGltZXIoKQordm9p
ZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQoreworICAgIGlm
IChtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25z
RW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0
QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5i
ZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAg
aXQtPnNlY29uZC0+c3R5bGVBdmFpbGFibGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKCkKIHsKICAgICBib29sIGFu
aW1hdGluZyA9IGZhbHNlOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1w
bGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAg
IGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+
OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFuaW1hdGluZygpKSB7CisgICAgCisgICAgUmVuZGVy
T2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAg
ICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghY29tcEFuaW0tPnN1
c3BlbmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRpbmcoKSkgewogICAgICAgICAgICAgYW5pbWF0
aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIGlmIChhbmltYXRpbmcpIHsKLSAgICAgICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgICAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKGNBbmltYXRpb25UaW1lckRlbGF5KTsK
LSAgICB9IGVsc2UgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90aW1lci5zdG9w
KCk7CisgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7
CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1f
YW5pbWF0aW9uVGltZXIuc3RvcCgpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiogdGltZXIp
Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVSZW5kZXJpbmdEaXNwYXRj
aGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikKK3sKKyAgICBpZiAo
bV9mcmFtZSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkKK3sKKyAgICBp
ZiAoIW1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1f
dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5zdGFydE9uZVNob3QoMCk7CisgICAgfQorfQorCit2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKFRpbWVy
PEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiogdGltZXIpCiB7CiAgICAgLy8gV2hlbiB0aGUg
dGltZXIgZmlyZXMsIGFsbCB3ZSBkbyBpcyBjYWxsIHNldENoYW5nZWQgb24gYWxsIERPTSBub2Rl
cyB3aXRoIHJ1bm5pbmcgYW5pbWF0aW9ucyBhbmQgdGhlbiBkbyBhbiBpbW1lZGlhdGUKICAgICAv
LyB1cGRhdGVSZW5kZXJpbmcuICBJdCB3aWxsIHRoZW4gY2FsbCBiYWNrIHRvIHVzIHdpdGggbmV3
IGluZm9ybWF0aW9uLgogICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQg
PSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJlbmRlck9iamVjdCosIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+YW5pbWF0
aW5nKCkpIHsKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFu
aW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChSZW5k
ZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmlt
YXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKCFjb21w
QW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmFuaW1hdGluZygpKSB7CiAgICAgICAgICAg
ICBhbmltYXRpbmcgPSB0cnVlOwotICAgICAgICAgICAgaXQtPmZpcnN0LT5lbGVtZW50KCktPnNl
dENoYW5nZWQoKTsKKyAgICAgICAgICAgIGNvbXBBbmltLT5zZXRBbmltYXRpbmcoZmFsc2UpOwor
ICAgICAgICAgICAgc2V0Q2hhbmdlZChyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsK
ICAgICAKLSAgICB1cGRhdGVUaW1lcigpOworICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CiB9
CiAKLUFuaW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1l
KQotOm1fZGF0YShuZXcgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoZnJhbWUpKQorYm9vbCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBDb21wb3NpdGVB
bmltYXRpb24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQob2JqKTsKKyAg
ICBpZiAoIWFuaW1hdGlvbikgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBhbmltYXRp
b24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHkpOworfQorCit2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25z
RW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0
QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5i
ZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChyZW5kZXJlci0+ZG9j
dW1lbnQoKSA9PSBkb2N1bWVudCkKKyAgICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5kQW5pbWF0
aW9ucygpOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOworfQorCit2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9y
IChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAg
ICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYg
KHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQorICAgICAgICAgICAgY29tcEFuaW0t
PnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQW5pbWF0aW9uVGlt
ZXIoKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSkKK3sKKyAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCwgd2Ug
ZG9uJ3QgZG8gdHJhbnNpdGlvbnMKKyAgICBpZiAoIWN1cnJlbnRTdHlsZSkKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUg
dGhlIGFjdGl2ZSB0cmFuc2l0aW9ucworICAgIGZvciAoY29uc3QgQW5pbWF0aW9uKiBhbmltID0g
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCk7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsK
KyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gYW5pbS0+ZHVyYXRpb24oKTsKKyAgICAgICAgZG91
YmxlIGRlbGF5ID0gYW5pbS0+ZGVsYXkoKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGVt
cHR5IHRyYW5zaXRpb24sIHNraXAgaXQKKyAgICAgICAgaWYgKGR1cmF0aW9uID09IDAgJiYgZGVs
YXkgPD0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgCisgICAgICAgIGludCBw
cm9wID0gYW5pbS0+cHJvcGVydHkoKTsKKyAgICAgICAgYm9vbCBhbGwgPSBwcm9wID09IGNBbmlt
YXRlQWxsOworICAgICAgICAKKyAgICAgICAgLy8gSGFuZGxlIGJvdGggdGhlICdhbGwnIGFuZCBz
aW5nbGUgcHJvcGVydHkgY2FzZXMuIEZvciB0aGUgc2luZ2xlIHByb3AgY2FzZSwgd2UgbWFrZSBv
bmx5IG9uZSBwYXNzCisgICAgICAgIC8vIHRocm91Z2ggdGhlIGxvb3AKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYWxsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPj0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdldE51bVByb3BlcnRpZXMo
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gZ2V0IHRo
ZSBuZXh0IHByb3AKKyAgICAgICAgICAgICAgICBwcm9wID0gQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmdldFByb3BlcnR5QXRJbmRleChpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AK
KyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlvbnMu
Z2V0KHByb3ApOworICAgICAgICAgICAgYm9vbCBlcXVhbCA9IHRydWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChpbXBsQW5pbSkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG9uZSwgaGFzIG91ciB0YXJnZXQgY2hhbmdlZD8KKyAgICAgICAgICAgICAgICBpZiAoIWltcGxB
bmltLT5pc1RhcmdldFByb3BlcnR5RXF1YWwocHJvcCwgdGFyZ2V0U3R5bGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEl0IGhhcyBjaGFuZ2VkIC0gdG9zcyBpdCBhbmQgc3RhcnQgb3Zlcgor
ICAgICAgICAgICAgICAgICAgICAvLyBPcGFjaXR5IGlzIHNwZWNpYWwgc2luY2UgaXQgY2FuIHBv
cCBpbiBhbmQgb3V0IG9mIFJlbmRlckxheWVycy4gV2UgbmVlZCB0byBjb21wdXRlCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBibGVuZGVkIG9wYWNpdHkgdmFsdWUgYmV0d2VlbiB0aGUgcHJl
dmlvdXMgZnJvbSBhbmQgdG8gc3R5bGVzIGFuZCBwdXQgdGhhdCBpbiB0aGUgY3VycmVudFN0eWxl
LCB3aGljaAorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGJlY29tZSB0aGUgbmV3IGZyb21T
dHlsZS4gVGhpcyBpcyBjaGFuZ2luZyBhIGNvbnN0IFJlbmRlclN0eWxlLCBidXQgd2Uga25vdyB3
aGF0IHdlIGFyZSBkb2luZywgcmVhbGx5IDotKQorICAgICAgICAgICAgICAgICAgICBpZiAocHJv
cCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdl
dCB0aGUgYmxlbmRlZCB2YWx1ZSBvZiBvcGFjaXR5IGludG8gdGhlIGN1cnJlbnRTdHlsZSAod2hp
Y2ggd2lsbCBiZSB0aGUgbmV3IGZyb21TdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGxBbmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5T3BhY2l0eSwgY3Vy
cmVudFN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGltcGxBbmltLT5yZXNldChyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBp
bXBsQW5pbTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7
CisgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIFNlZSBp
ZiB3ZSBuZWVkIHRvIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICBlcXVh
bCA9IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgY3Vy
cmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
ZXF1YWwpIHsKKyAgICAgICAgICAgICAgICAvLyBBQWRkIHRoZSBuZXcgdHJhbnNpdGlvbgorICAg
ICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGljaXRB
bmltYXRpb24oY29uc3RfY2FzdDxBbmltYXRpb24qPihhbmltKSwgcmVuZGVyZXIsIHRoaXMpOwor
ICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlvbnMuc2V0KHByb3AsIGFuaW1hdGlvbik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCBvbmUg
cGFzcyBmb3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UKKyAgICAgICAgICAgIGlmICghYWxsKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJTdHlsZSog
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3sKKyAgICBS
ZW5kZXJTdHlsZSogcmVzdWx0U3R5bGUgPSAwOworICAgIAorICAgIC8vIFdlIGRvbid0IGRvIGFu
eSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVw
KQorICAgIHVwZGF0ZVRyYW5zaXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0
eWxlKTsKKyAgICAKKyAgICBpZiAoY3VycmVudFN0eWxlKSB7CisgICAgICAgIC8vIE5vdyB0aGF0
IHdlIGhhdmUgdHJhbnNpdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRo
ZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQorICAgICAgICAvLyB0byBmaWxsIGluIGEg
UmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KKyAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBJbXBs
aWNpdEFuaW1hdGlvbiogIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgaWYgKGFuaW0p
IHsKKyAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50
U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhyZW5kZXJlcik7
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdFN0eWxlID8gcmVzdWx0U3R5bGUgOiB0YXJnZXRTdHls
ZTsKK30KKworLy8gImFuaW1hdGluZyIgbWVhbnMgdGhhdCBzb21ldGhpbmcgaXMgcnVubmluZyB0
aGF0IHJlcXVpcmVzIHRoZSB0aW1lciB0byBrZWVwIGZpcmluZworLy8gKGUuZy4gYSB0cmFuc2l0
aW9uKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1hdGluZyhib29sIGluQW5pbWF0
aW5nKQoreworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIHRyYW5zaXRpb24tPnNldEFuaW1hdGluZyhpbkFuaW1hdGluZyk7Cisg
ICAgfQorfQorCitib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0aW5nKCkKK3sKKyAgICBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRp
b25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5hbmltYXRpbmcoKSAmJiB0cmFuc2l0aW9u
LT5ydW5uaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzZXRUcmFuc2l0aW9ucyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAg
dHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHRyYW5zaXRpb24tPnJlc2V0KHJlbmRl
cmVyKTsKKyAgICAgICAgZGVsZXRlIHRyYW5zaXRpb247CisgICAgfQorICAgIG1fdHJhbnNpdGlv
bnMuY2xlYXIoKTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFudXBGaW5pc2hl
ZEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoc3VzcGVuZGVk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBNYWtlIGEgbGlzdCBvZiB0cmFuc2l0
aW9ucyB0byBiZSBkZWxldGVkCisgICAgVmVjdG9yPGludD4gZmluaXNoZWRUcmFuc2l0aW9uczsK
KyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Ry
YW5zaXRpb25zLmVuZCgpOworCisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgaWYgKCFhbmltKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChhbmltLT5w
b3N0YWN0aXZlKCkgJiYgIWFuaW0tPndhaXRpbmdGb3JFbmRFdmVudCgpKQorICAgICAgICAgICAg
ZmluaXNoZWRUcmFuc2l0aW9ucy5hcHBlbmQoYW5pbS0+cHJvcGVydHkoKSk7CisgICAgfQorICAg
IAorICAgIC8vIERlbGV0ZSB0aGVtCisgICAgZm9yIChWZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQg
PSBmaW5pc2hlZFRyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGZpbmlzaGVkVHJhbnNpdGlvbnMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBtX3RyYW5z
aXRpb25zLmdldCgqaXQpOworICAgICAgICBpZiAoYW5pbSkgeworICAgICAgICAgICAgYW5pbS0+
cmVzZXQocmVuZGVyZXIpOworICAgICAgICAgICAgZGVsZXRlIGFuaW07CisgICAgICAgIH0KKyAg
ICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUoKml0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91Ymxl
IHQpCit7CisgICAgLy8gU2V0IHRoZSBzdGFydCB0aW1lIGZvciBnaXZlbiBwcm9wZXJ0eSB0cmFu
c2l0aW9uCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOwor
ICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3RhcnRUaW1lKCkgJiYgCisgICAg
ICAgICAgICAgICAgICAgIChhbmltLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFuaW0tPnBy
b3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvbkJhc2U6OlNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCB0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCit7
CisgICAgaWYgKG1fc3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNw
ZW5kZWQgPSB0cnVlOworCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKSB7CisgICAgICAg
ICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgaWYg
KCFtX3N1c3BlbmRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3VzcGVuZGVkID0g
ZmFsc2U7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpIHsKKyAgICAgICAgICAgIGFu
aW0tPnVwZGF0ZVBsYXlTdGF0ZSh0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBD
b21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0
eSkKIHsKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChhbmltICYmIChhbmltLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFuaW0t
PnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJp
ZGRlbih0cnVlKTsKKyAgICB9Cit9CiAKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVP
dmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYm
IChhbmltLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFuaW0tPnByb3BlcnR5KCkgPT0gY0Fu
aW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CisgICAg
fQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3R5bGVBdmFpbGFibGUoKQoreworICAg
IGlmIChtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycyA9PSAwKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAg
ICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSkKKyAgICAg
ICAgICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBV
VF9TVFlMRV9BVkFJTEFCTEUsIC0xKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmlt
ICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
UmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUpCit7CisgICAgaWYgKHBhdXNlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5p
bWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNo
ZWQgYW5pbWF0aW9uLgorICAgIC8vIElmIHNvLCBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlIChp
dCB3aWxsIGdldCB0b3NzZWQgbGF0ZXIpCisgICAgaWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAg
ICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgICAgIGlvQW5pbWF0ZWRTdHlsZSA9IGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0YXJnZXRTdHlsZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBSZXNldCB0byBzdGFydCB0aGUgdHJhbnNpdGlvbiBpZiB3ZSBhcmUgbmV3
CisgICAgaWYgKGlzbmV3KCkpCisgICAgICAgIHJlc2V0KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUs
IHRhcmdldFN0eWxlKTsKKyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCisg
ICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9u
ZSBpZiBuZWVkZWQKKyAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgaW9BbmltYXRl
ZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdl
dFN0eWxlKTsKKyAgICAKKyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDApOworICAgIGJv
b2wgbmVlZHNBbmltID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGll
cyhtX3Byb3BlcnR5LCBpb0FuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHBy
b2cpOworICAgIGlmIChuZWVkc0FuaW0pCisgICAgICAgIHNldEFuaW1hdGluZygpOworfQorCiti
b29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5kQW5p
bWF0aW9uKGJvb2wgcmVzZXQpCit7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5p
bWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIC8vIHdlJ3JlIGNvbnZlcnRp
bmcgdGhlIGFuaW1hdGlvbiBpbnRvIGEgdHJhbnNpdGlvbiBoZXJlCisgICAgaWYgKCFzZW5kVHJh
bnNpdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgaW5FbGFw
c2VkVGltZSkpIHsKKyAgICAgICAgLy8gd2UgZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGlj
aCB3b3VsZCBjYWxsIGVuZEFuaW1hdGlvbigpLCBzbyB3ZSdsbCBqdXN0IGVuZAorICAgICAgICAv
LyBpdCBoZXJlLgorICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgfQorfQorCitib29s
IEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHJldHVybiBmYWxz
ZTsgLy8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRp
b246OnJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
IC8qID0gMCAqLywgY29uc3QgUmVuZGVyU3R5bGUqIHRvIC8qID0gMCAqLykKK3sKKyAgICBBU1NF
UlQoKCFtX3RvU3R5bGUgJiYgIXRvKSB8fCBtX3RvU3R5bGUgIT0gdG8pOworICAgIEFTU0VSVCgo
IW1fZnJvbVN0eWxlICYmICFmcm9tKSB8fCBtX2Zyb21TdHlsZSAhPSBmcm9tKTsKKyAgICBpZiAo
bV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVy
QXJlbmEoKSk7CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5kZXJlZihy
ZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7CisgICAgCisgICAgbV9mcm9tU3R5bGUgPSBjb25zdF9j
YXN0PFJlbmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMgcmVhZC1vbmx5LCBvdGhlciB0aGFu
IHRoZSByZWYKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5yZWYo
KTsKKyAgICAKKyAgICBtX3RvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odG8pOyAg
ICAgICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmIChtX3Rv
U3R5bGUpCisgICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7CisgICAgCisgICAgLy8gcmVzdGFydCB0
aGUgdHJhbnNpdGlvbgorICAgIGlmIChmcm9tICYmIHRvKQorICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sIC0xKTsKK30KKwordm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRlbihib29sIGIpCit7CisgICAgaWYgKGIgIT0gbV9v
dmVycmlkZGVuKSB7CisgICAgICAgIG1fb3ZlcnJpZGRlbiA9IGI7CisgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShtX292ZXJyaWRkZW4gPyBTVEFURV9JTlBVVF9QQVVTRV9PVkVSUklERSA6IFNU
QVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSwgLTEpOworICAgIH0KK30KKworYm9vbCBJbXBsaWNp
dEFuaW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSB8fAorICAgIChtX3Byb3BlcnR5ID09IGNBbmlt
YXRlQWxsICYmICFBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKHBy
b3BlcnR5LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSk7Cit9CisKK2Jvb2wgSW1wbGljaXRBbmlt
YXRpb246OmlzVGFyZ2V0UHJvcGVydHlFcXVhbChpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKQoreworICAgIHJldHVybiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVy
dGllc0VxdWFsKHByb3AsIG1fdG9TdHlsZSwgdGFyZ2V0U3R5bGUpOworfQorCit2b2lkIEltcGxp
Y2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKGludCBwcm9wLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlKQoreworICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3MoMSwgMCk7
CisgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcyhwcm9wLCBj
dXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOworfSAgICAKKworQW5p
bWF0aW9uQ29udHJvbGxlcjo6QW5pbWF0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCis6IG1f
ZGF0YShuZXcgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoZnJhbWUpKQoreworICAgIAogfQog
CiBBbmltYXRpb25Db250cm9sbGVyOjp+QW5pbWF0aW9uQ29udHJvbGxlcigpCkBAIC01NjYsNTAg
KzE2ODksODcgQEAgQW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNvbnRyb2xsZXIoKQog
ICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2Vs
SW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
LSAgICBpZiAoIW1fZGF0YS0+aGFzSW1wbGljaXRBbmltYXRpb25zKCkpCisgICAgaWYgKCFtX2Rh
dGEtPmhhc0FuaW1hdGlvbnMoKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgaWYgKG1f
ZGF0YS0+Y2xlYXIocmVuZGVyZXIpKQotICAgICAgICByZW5kZXJlci0+ZWxlbWVudCgpLT5zZXRD
aGFuZ2VkKCk7CisgICAgICAgIHNldENoYW5nZWQocmVuZGVyZXItPmVsZW1lbnQoKSk7CiB9CiAK
LVJlbmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbXBsaWNpdEFuaW1hdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoteworUmVu
ZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreyAgICAKKyAgICAvLyBkb24n
dCBkbyBhbnl0aGluZyBpZiB3ZSdyZSBpbiB0aGUgY2FjaGUKKyAgICBpZiAoIXJlbmRlcmVyLT5k
b2N1bWVudCgpIHx8IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAgICAg
ICByZXR1cm4gbmV3U3R5bGU7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CisgICAgCisgICAgaWYgKCghb2xkU3R5bGUgfHwgIW9sZFN0eWxlLT50
cmFuc2l0aW9ucygpKSAmJiAhbmV3U3R5bGUtPnRyYW5zaXRpb25zKCkpCisgICAgICAgIHJldHVy
biBuZXdTdHlsZTsKKyAgICAKKyAgICBSZW5kZXJTdHlsZSogYmxlbmRlZFN0eWxlID0gbmV3U3R5
bGU7CisgICAgCiAgICAgLy8gRmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1h
dGlvbnMgZnJvbSBhIGhhc2h0YWJsZS4gIFdlIHRoZW4gY29tcGFyZSB0aGVtCiAgICAgLy8gYWdh
aW5zdCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgc3R5bGUgYW5kIG1ha2Ugc3VyZSB3ZSdyZSBpbiBz
eW5jLiAgSWYgZGVzdGluYXRpb24gdmFsdWVzCiAgICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNl
dCB0aGUgYW5pbWF0aW9uLiAgV2UgdGhlbiBkbyBhIGJsZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFu
ZCB3ZSByZXR1cm4KICAgICAvLyBhIG5ldyBzdHlsZS4KICAgICBBU1NFUlQocmVuZGVyZXItPmVs
ZW1lbnQoKSk7IC8vIEZJWE1FOiBXZSBkbyBub3QgYW5pbWF0ZSBnZW5lcmF0ZWQgY29udGVudCB5
ZXQuCi0KLSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9kYXRh
LT5nZXQocmVuZGVyZXIsIG5ld1N0eWxlKTsKLSAgICBpZiAoIWFuaW1hdGlvbiAmJiAhbmV3U3R5
bGUtPnRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBuZXdTdHlsZTsKLQotICAgIFJlbmRl
clN0eWxlKiBibGVuZGVkU3R5bGUgPSBhbmltYXRpb24tPmFuaW1hdGUocmVuZGVyZXIsIHJlbmRl
cmVyLT5zdHlsZSgpLCBuZXdTdHlsZSk7Ci0gICAgbV9kYXRhLT51cGRhdGVUaW1lcigpOwotCisg
ICAgCisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiByZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEt
PmFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7CisgICAgYmxlbmRlZFN0eWxlID0g
cmVuZGVyZXJBbmltYXRpb25zLT5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwgbmV3U3R5bGUp
OworICAgIAorICAgIG1fZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKKyAgICAKICAgICBp
ZiAoYmxlbmRlZFN0eWxlICE9IG5ld1N0eWxlKSB7Ci0gICAgICAgIC8vIERvIHNvbWUgb2YgdGhl
IHdvcmsgdGhhdCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZSgpIGRvZXMsIHRv
IGltcG9zZSBydWxlcwotICAgICAgICAvLyBsaWtlIG9wYWNpdHkgY3JlYXRpbmcgc3RhY2tpbmcg
Y29udGV4dC4KKyAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgY2hhbmdl
IG9wYWNpdHkgb3IgdHJhbnNmb3JtLCB3ZSBuZWVlZCB0byB1cGRhdGUKKyAgICAgICAgLy8gdGhl
IHN0eWxlIHRvIGltcG9zZSB0aGUgc3RhY2tpbmcgcnVsZXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFs
c28KKyAgICAgICAgLy8gZG9uZSBpbiBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHls
ZSgpLgogICAgICAgICBpZiAoYmxlbmRlZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKGJsZW5k
ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZiB8fCBibGVuZGVkU3R5bGUtPmhhc1RyYW5zZm9ybSgp
KSkKICAgICAgICAgICAgIGJsZW5kZWRTdHlsZS0+c2V0WkluZGV4KDApOwogICAgIH0KLQogICAg
IHJldHVybiBibGVuZGVkU3R5bGU7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3Vz
cGVuZEFuaW1hdGlvbnMoKQorYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGluZ1By
b3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdAor
eworICAgIHJldHVybiBtX2RhdGEtPmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKG9iaiwg
cHJvcGVydHkpOworfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRp
b25zKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUg
aGFzaHRhYmxlIGFuZCBjYWxsIHBhdXNlIG9uIGVhY2ggYW5pbWF0aW9uLgotICAgIC8vIEtpbGwg
b3VyIHRpbWVyLgorI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgc3VzcGVuZEFuaW1hdGlvbnMgZm9yIGRvY3VtZW50
ICVwXG4iLCB0aGlzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICBtX2RhdGEtPnN1c3BlbmRBbmlt
YXRpb25zKGRvY3VtZW50KTsKIH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVB
bmltYXRpb25zKCkKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyhE
b2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgLy8gRklYTUU6IFdhbGsgdGhlIHdob2xlIGhhc2h0
YWJsZSBhbmQgY2FsbCByZXN1bWUgb24gZWFjaCBhbmltYXRpb24uCi0gICAgLy8gU3RhcnQgb3Vy
IHRpbWVyLgorI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgcmVzdW1lQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBc
biIsIHRoaXMsIGRvY3VtZW50KTsKKyNlbmRpZgorICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9u
cyhkb2N1bWVudCk7CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRVcGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyKCkKK3sKKyAgICBtX2RhdGEtPnN0YXJ0VXBkYXRlUmVuZGVyaW5n
RGlzcGF0Y2hlcigpOworfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0eWxlQXZhaWxh
YmxlKCkKK3sKKyAgICBtX2RhdGEtPnN0eWxlQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3YWl0aW5nKQor
eworICAgIGlmICh3YWl0aW5nKQorICAgICAgICBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycysr
OworICAgIGVsc2UKKyAgICAgICAgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsKKyAgICBt
X2FuaW1hdGlvbkNvbnRyb2xsZXItPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSh3YWl0aW5n
KTsKK30KKyAgICAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9s
bGVyLmggYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4IGZkYTExNDMu
LjkwYzQ5ZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmgK
KysrIGIvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMjksOSArMjksMTIg
QEAKICNpZm5kZWYgQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAjZGVmaW5lIEFuaW1hdGlvbkNvbnRy
b2xsZXJfaAogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOworY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxl
OwpAQCAtNDIsMTQgKzQ1LDIyIEBAIHB1YmxpYzoKICAgICBBbmltYXRpb25Db250cm9sbGVyKEZy
YW1lKik7CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKICAgICAKLSAgICB2b2lkIGNhbmNl
bEltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKLSAgICBSZW5kZXJTdHlsZSogdXBk
YXRlSW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CisgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIFJlbmRl
clN0eWxlKiB1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdT
dHlsZSk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5k
ZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHN1c3Bl
bmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRp
b25zKERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigp
OwogICAgIAotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3VtZUFu
aW1hdGlvbnMoKTsKKyAgICB2b2lkIHN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOwor
ICAgIAorICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fZGF0YTsKKyAgICAKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4
IDFhZGRjNDUuLmMzZGQ2N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTQ4MCw3ICsxNDgwLDcgQEAgdm9pZCBGcmFt
ZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQpCiAgICAg
ICAgIGlmICh2aWV3LT5mcmFtZSgpKSB7CiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9j
dW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmxheWVyKCktPnN1c3BlbmRNYXJx
dWVlcygpOwotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS0+YW5pbWF0aW9uKCktPnN1c3BlbmRB
bmltYXRpb25zKCk7CisgICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb24oKS0+c3Vz
cGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwogICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPnN0b3BBdXRvc2Nyb2xsVGltZXIoKTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDE0NWU0NzYuLmM0OWUxY2IgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjE1Niw3ICsyMTU2LDcgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0aW9uQ2hhbmdlKCkKIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmICgh
aXNUZXh0KCkgJiYgbV9zdHlsZSAmJiBzdHlsZSkKLSAgICAgICAgc3R5bGUgPSBhbmltYXRpb24o
KS0+dXBkYXRlSW1wbGljaXRBbmltYXRpb25zKHRoaXMsIHN0eWxlKTsKKyAgICAgICAgc3R5bGUg
PSBhbmltYXRpb24oKS0+dXBkYXRlQW5pbWF0aW9ucyh0aGlzLCBzdHlsZSk7CiAKICAgICBzZXRT
dHlsZShzdHlsZSk7CiB9CkBAIC0yNTM1LDcgKzI1MzUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZGVzdHJveSgpCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
CiAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOwogCi0g
ICAgYW5pbWF0aW9uKCktPmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyh0aGlzKTsKKyAgICBhbmlt
YXRpb24oKS0+Y2FuY2VsQW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIC8vIEJ5IGRlZmF1bHQgbm8g
cmVmLWNvdW50aW5nLiBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKSBkb2Vzbid0IGNhbGwKICAgICAv
LyB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgbmVlZHMgdG8gZG8gcmVmLWNvdW50aW5nLiBJZiBh
bnl0aGluZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggODdkODQ0NS4uYTM3N2Fk
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQg
UmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkKICAgICAvLyBTbyB0aGUgY29kZSBiZWxvdyBpbmNsdWRl
cyBjb3BpZWQgYW5kIHBhc3RlZCBjb250ZW50cyBvZgogICAgIC8vIGJvdGggUmVuZGVyQm94Ojpk
ZXN0cm95KCkgYW5kIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpLgogICAgIC8vIEZpeCBvcmlnaW5h
bGx5IG1hZGUgZm9yIDxyZGFyOi8vcHJvYmxlbS80MjI4ODE4Pi4KLSAgICBhbmltYXRpb24oKS0+
Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1hdGlvbigpLT5jYW5jZWxB
bmltYXRpb25zKHRoaXMpOwogCiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpCiAgICAg
ICAgIHYtPnJlbW92ZVdpZGdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAppbmRleCBmYWZmN2UwLi5lMDAyMTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCkBAIC02NjQsMTExICs2NjQsODggQEAgVHJhbnNmb3JtT3BlcmF0aW9u
KiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biogZnIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRiArICht
X2YgLSBmcm9tRikgKiBwcm9ncmVzcyk7CiB9CiAKLVRyYW5zaXRpb246OlRyYW5zaXRpb24oKQot
ICAgIDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigp
KQotICAgICwgbV9yZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25SZXBl
YXRDb3VudCgpKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRy
YW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKQotICAgICwgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6
aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKQorQW5pbWF0aW9uOjpBbmltYXRpb24oKQorICAg
IDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpCisgICAgLCBtX3Rp
bWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKSkKKyAgICAs
IG1fZGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKQorICAgICwgbV9wcm9wZXJ0eShS
ZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpCiAgICAgLCBtX2R1cmF0aW9uU2V0KGZhbHNl
KQotICAgICwgbV9yZXBlYXRDb3VudFNldChmYWxzZSkKICAgICAsIG1fdGltaW5nRnVuY3Rpb25T
ZXQoZmFsc2UpCisgICAgLCBtX2RlbGF5U2V0KGZhbHNlKQogICAgICwgbV9wcm9wZXJ0eVNldChm
YWxzZSkKICAgICAsIG1fbmV4dCgwKQogewogfQogCi1UcmFuc2l0aW9uOjpUcmFuc2l0aW9uKGNv
bnN0IFRyYW5zaXRpb24mIG8pCi0gICAgOiBtX2R1cmF0aW9uKG8ubV9kdXJhdGlvbikKLSAgICAs
IG1fcmVwZWF0Q291bnQoby5tX3JlcGVhdENvdW50KQorQW5pbWF0aW9uOjpBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uJiBvKQorICAgIDogUmVmQ291bnRlZDxBbmltYXRpb24+KCkKKyAgICAsIG1f
ZHVyYXRpb24oby5tX2R1cmF0aW9uKQogICAgICwgbV90aW1pbmdGdW5jdGlvbihvLm1fdGltaW5n
RnVuY3Rpb24pCisgICAgLCBtX2RlbGF5KG8ubV9kZWxheSkKICAgICAsIG1fcHJvcGVydHkoby5t
X3Byb3BlcnR5KQogICAgICwgbV9kdXJhdGlvblNldChvLm1fZHVyYXRpb25TZXQpCi0gICAgLCBt
X3JlcGVhdENvdW50U2V0KG8ubV9yZXBlYXRDb3VudFNldCkKICAgICAsIG1fdGltaW5nRnVuY3Rp
b25TZXQoby5tX3RpbWluZ0Z1bmN0aW9uU2V0KQorICAgICwgbV9kZWxheVNldChvLm1fZGVsYXlT
ZXQpCiAgICAgLCBtX3Byb3BlcnR5U2V0KG8ubV9wcm9wZXJ0eVNldCkKLSAgICAsIG1fbmV4dChv
Lm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9uKCpvLm1fbmV4dCkgOiAwKQorICAgICwgbV9uZXh0KG8u
bV9uZXh0ID8gbmV3IEFuaW1hdGlvbigqKG8ubV9uZXh0LmdldCgpKSkgOiAwKQogewogfQogCi1U
cmFuc2l0aW9uOjp+VHJhbnNpdGlvbigpCi17Ci0gICAgZGVsZXRlIG1fbmV4dDsKLX0KLQotVHJh
bnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24mIG8pCitBbmlt
YXRpb24mIEFuaW1hdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbykKIHsKICAgICBp
ZiAobV9uZXh0ICE9IG8ubV9uZXh0KSB7Ci0gICAgICAgIGRlbGV0ZSBtX25leHQ7Ci0gICAgICAg
IG1fbmV4dCA9IG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDA7CisgICAg
ICAgIG1fbmV4dCA9IG8ubV9uZXh0ID8gbmV3IEFuaW1hdGlvbigqKG8ubV9uZXh0LmdldCgpKSkg
OiAwOwogICAgIH0KIAorICAgIG1fZGVsYXkgPSBvLm1fZGVsYXk7CiAgICAgbV9kdXJhdGlvbiA9
IG8ubV9kdXJhdGlvbjsKLSAgICBtX3JlcGVhdENvdW50ID0gby5tX3JlcGVhdENvdW50OwogICAg
IG1fdGltaW5nRnVuY3Rpb24gPSBvLm1fdGltaW5nRnVuY3Rpb247CiAgICAgbV9wcm9wZXJ0eSA9
IG8ubV9wcm9wZXJ0eTsKIAorICAgIG1fZGVsYXlTZXQgPSBvLm1fZGVsYXlTZXQ7CiAgICAgbV9k
dXJhdGlvblNldCA9IG8ubV9kdXJhdGlvblNldDsKLSAgICBtX3JlcGVhdENvdW50U2V0ID0gby5t
X3JlcGVhdENvdW50U2V0OwogICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPSBvLm1fdGltaW5nRnVu
Y3Rpb25TZXQ7CiAgICAgbV9wcm9wZXJ0eVNldCA9IG8ubV9wcm9wZXJ0eVNldDsKIAogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotYm9vbCBUcmFuc2l0aW9uOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5z
aXRpb24mIG8pIGNvbnN0Citib29sIEFuaW1hdGlvbjo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiogbykgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kdXJhdGlvbiA9PSBvLm1fZHVyYXRp
b24gJiYgbV9yZXBlYXRDb3VudCA9PSBvLm1fcmVwZWF0Q291bnQgJiYgbV90aW1pbmdGdW5jdGlv
biA9PSBvLm1fdGltaW5nRnVuY3Rpb24gJiYKLSAgICAgICAgICAgbV9wcm9wZXJ0eSA9PSBvLm1f
cHJvcGVydHkgJiYgbV9kdXJhdGlvblNldCA9PSBvLm1fZHVyYXRpb25TZXQgJiYgbV9yZXBlYXRD
b3VudFNldCA9PSBvLm1fcmVwZWF0Q291bnRTZXQgJiYKLSAgICAgICAgICAgbV90aW1pbmdGdW5j
dGlvblNldCA9PSBvLm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgbV9wcm9wZXJ0eVNldCA9PSBvLm1f
cHJvcGVydHlTZXQgJiYKLSAgICAgICAgICAgKChtX25leHQgJiYgby5tX25leHQpID8gKm1fbmV4
dCA9PSAqby5tX25leHQgOiBtX25leHQgPT0gby5tX25leHQpOwotfQotCi12b2lkIFRyYW5zaXRp
b246OmZpbGxVbnNldFByb3BlcnRpZXMoKQotewotICAgIFRyYW5zaXRpb24qIGN1cnI7Ci0gICAg
Zm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc0R1cmF0aW9uU2V0KCk7IGN1cnIgPSBj
dXJyLT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0
dGVybiBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fZHVyYXRp
b24gPSBwYXR0ZXJuLT5tX2R1cmF0aW9uOwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4t
Pm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0g
ICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYg
KCFvKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgZm9yIChjdXJyID0gdGhpczsg
Y3VyciAmJiBjdXJyLT5pc1JlcGVhdENvdW50U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsg
fQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRv
IGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQu
Ci0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fcmVwZWF0Q291bnQgPSBwYXR0ZXJu
LT5tX3JlcGVhdENvdW50OwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsK
LSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAg
ICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYm9vbCByZXN1bHQg
PSBtX2R1cmF0aW9uID09IG8tPm1fZHVyYXRpb24gJiYKKyAgICAgICAgICAgICAgICAgIG1fdGlt
aW5nRnVuY3Rpb24gPT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgorICAgICAgICAgICAgICAgICAg
bV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5ID09
IG8tPm1fcHJvcGVydHkgJiYgCisgICAgICAgICAgICAgICAgICBtX2R1cmF0aW9uU2V0ID09IG8t
Pm1fZHVyYXRpb25TZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0
ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX2RlbGF5
U2V0ID09IG8tPm1fZGVsYXlTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlTZXQg
PT0gby0+bV9wcm9wZXJ0eVNldDsKICAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYm
IGN1cnItPmlzVGltaW5nRnVuY3Rpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0g
ICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmls
bCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAg
ICAgICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHQoKSkgewotICAgICAgICAgICAgY3Vyci0+bV90aW1pbmdGdW5jdGlvbiA9IHBhdHRlcm4t
Pm1fdGltaW5nRnVuY3Rpb247Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgp
OwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAg
ICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQogCi0gICAgZm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc1Byb3BlcnR5
U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0g
dGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1
ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiog
cGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IGN1cnItPm1fcHJvcGVydHkgPSBwYXR0ZXJuLT5tX3Byb3BlcnR5OwotICAgICAgICAgICAgcGF0
dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIg
fHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0K
LSAgICB9CisjZGVmaW5lIEZJTExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcCkgXAorZm9yIChj
dXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT50ZXN0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsg
fSBcCitpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsgXAorLyogV2UgbmVlZCB0byBmaWxsIGlu
IHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLiAqLyBcCitm
b3IgKEFuaW1hdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkp
IHsgXAorY3Vyci0+cHJvcCA9IHBhdHRlcm4tPnByb3A7IFwKK3BhdHRlcm4gPSBwYXR0ZXJuLT5u
ZXh0KCk7IFwKK2lmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pIFwKK3BhdHRlcm4gPSB0
aGlzOyBcCit9IFwKK30KKwordm9pZCBBbmltYXRpb246OmZpbGxVbnNldFByb3BlcnRpZXMoKQor
eworICAgIEFuaW1hdGlvbiogY3VycjsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzRHVyYXRp
b25TZXQsIG1fZHVyYXRpb24pOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNUaW1pbmdGdW5j
dGlvblNldCwgbV90aW1pbmdGdW5jdGlvbik7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0Rl
bGF5U2V0LCBtX2RlbGF5KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzUHJvcGVydHlTZXQs
IG1fcHJvcGVydHkpOwogfQogCiBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhKCkKQEAgLTgxMSw3ICs3ODgsNyBAQCBTdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlUmFyZU5vbkluaGVy
aXRlZAogICAgICwgbV9ib3JkZXJGaXQoby5tX2JvcmRlckZpdCkKICAgICAsIG1fYm94U2hhZG93
KG8ubV9ib3hTaGFkb3cgPyBuZXcgU2hhZG93RGF0YSgqby5tX2JveFNoYWRvdykgOiAwKQogICAg
ICwgbV9ib3hSZWZsZWN0KG8ubV9ib3hSZWZsZWN0KQotICAgICwgbV90cmFuc2l0aW9uKG8ubV90
cmFuc2l0aW9uID8gbmV3IFRyYW5zaXRpb24oKm8ubV90cmFuc2l0aW9uKSA6IDApCisgICAgLCBt
X3RyYW5zaXRpb24oby5tX3RyYW5zaXRpb24gPyBuZXcgQW5pbWF0aW9uKCpvLm1fdHJhbnNpdGlv
bikgOiAwKQogICAgICwgbV9tYXNrKG8ubV9tYXNrKQogICAgICwgbV9tYXNrQm94SW1hZ2Uoby5t
X21hc2tCb3hJbWFnZSkKICNpZiBFTkFCTEUoWEJMKQpAQCAtODI1LDcgKzgwMiw2IEBAIFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGE6On5TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKICAgICBk
ZWxldGUgbV9jb250ZW50OwogICAgIGRlbGV0ZSBtX2NvdW50ZXJEaXJlY3RpdmVzOwogICAgIGRl
bGV0ZSBtX2JveFNoYWRvdzsKLSAgICBkZWxldGUgbV90cmFuc2l0aW9uOwogI2lmIEVOQUJMRShY
QkwpCiAgICAgZGVsZXRlIGJpbmRpbmdVUkk7CiAjZW5kaWYKQEAgLTE0OTQsNyArMTQ3MCw3IEBA
IFJlbmRlclN0eWxlOjpEaWZmIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBv
dGhlcikgY29uc3QKICAgICAvLyBDdXJzb3JzIGFyZSBub3QgY2hlY2tlZCwgc2luY2UgdGhleSB3
aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5IGluIHJlc3BvbnNlIHRvIG1vdXNlIGV2ZW50cywKICAg
ICAvLyBzbyB0aGV5IGRvbid0IG5lZWQgdG8gY2F1c2UgYW55IHJlcGFpbnQgb3IgbGF5b3V0Lgog
Ci0gICAgLy8gVHJhbnNpdGlvbnMgZG9uJ3QgbmVlZCB0byBiZSBjaGVja2VkIGVpdGhlci4gIFdl
IGFsd2F5cyBzZXQgdGhlIG5ldyBzdHlsZSBvbiB0aGUgUmVuZGVyT2JqZWN0LCBzbyB3ZSB3aWxs
IGdldCBhIGNoYW5jZSB0byBmaXJlIG9mZgorICAgIC8vIEFuaW1hdGlvbnMgZG9uJ3QgbmVlZCB0
byBiZSBjaGVja2VkIGVpdGhlci4gIFdlIGFsd2F5cyBzZXQgdGhlIG5ldyBzdHlsZSBvbiB0aGUg
UmVuZGVyT2JqZWN0LCBzbyB3ZSB3aWxsIGdldCBhIGNoYW5jZSB0byBmaXJlIG9mZgogICAgIC8v
IHRoZSByZXN1bHRpbmcgdHJhbnNpdGlvbiBwcm9wZXJseS4KICAgICByZXR1cm4gRXF1YWw7CiB9
CkBAIC0xODcxLDMyICsxODQ3LDU4IEBAIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lv
bj4mIFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpCiB2b2lkIFJlbmRlclN0eWxl
OjphZGp1c3RUcmFuc2l0aW9ucygpCiB7CiAgICAgaWYgKHRyYW5zaXRpb25zKCkpIHsKLSAgICAg
ICAgaWYgKHRyYW5zaXRpb25zKCktPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAodHJhbnNpdGlv
bnMoKS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNsZWFyVHJhbnNp
dGlvbnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFRyYW5z
aXRpb24qIG5leHQ7Ci0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vzc1RyYW5zaXRp
b25zKCk7IHA7IHAgPSBuZXh0KSB7Ci0gICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OworICAg
ICAgICBBbmltYXRpb24qIG5leHQ7CisgICAgICAgIGZvciAoQW5pbWF0aW9uKiBwID0gYWNjZXNz
VHJhbnNpdGlvbnMoKTsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBwLT5uZXh0
KCk7CiAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBkZWxldGUgbmV4dDsKLSAgICAgICAgICAgICAgICBwLT5tX25leHQgPSAwOworICAg
ICAgICAgICAgICAgIHAtPnNldE5leHQoMCk7IC8vIHJlbW92ZXMgdGhlIHJlZiwgc28gbmV4dCBn
ZXRzIGRlbGV0ZWQKKyAgICAgICAgICAgICAgICBuZXh0ID0gMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAorCisgICAgICAgIGlmICghdHJh
bnNpdGlvbnMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBSZXBlYXQgcGF0
dGVybnMgaW50byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNvbWUgcHJvcGVydGllcyBzZXQuCiAg
ICAgICAgIGFjY2Vzc1RyYW5zaXRpb25zKCktPmZpbGxVbnNldFByb3BlcnRpZXMoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIHByb3BlcnRp
ZXMuIFRoaXMgaXMgYW4gTyhuXjIpIGFsZ29yaXRobQorICAgICAgICAvLyBidXQgdGhlIGxpc3Rz
IHRlbmQgdG8gYmUgdmVyeSBzaG9ydCwgc28gaXQgaXMgcHJvYmFibHkgb2sKKyAgICAgICAgQW5p
bWF0aW9uKiBwcmV2aSA9IDA7CisgICAgICAgIGZvciAoQW5pbWF0aW9uKiBwaSA9IGFjY2Vzc1Ry
YW5zaXRpb25zKCk7IHBpOyApIHsKKyAgICAgICAgICAgIEFuaW1hdGlvbiogbmV4dGkgPSBwaS0+
bmV4dCgpOworICAgICAgICAgICAgZm9yIChBbmltYXRpb24qIHBqID0gbmV4dGk7IHBqOyApIHsK
KyAgICAgICAgICAgICAgICBpZiAocGktPnByb3BlcnR5KCkgPT0gcGotPnByb3BlcnR5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gdG9zcyBwaQorICAgICAgICAgICAgICAgICAgICBwaSA9
IHBpLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpLT5zZXROZXh0KHBpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fdHJhbnNpdGlvbiA9IHBpOworICAgICAgICAgICAgICAgICAgICBuZXh0aSA9IHBpLT5uZXh0
KCk7CisgICAgICAgICAgICAgICAgICAgIHBqID0gbmV4dGk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGogPSBwai0+bmV4dCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmkgPSBwaTsKKyAgICAgICAgICAgIHBp
ID0gbmV4dGk7CisgICAgICAgIH0KICAgICB9CiB9CiAKLVRyYW5zaXRpb24qIFJlbmRlclN0eWxl
OjphY2Nlc3NUcmFuc2l0aW9ucygpCitBbmltYXRpb24qIFJlbmRlclN0eWxlOjphY2Nlc3NUcmFu
c2l0aW9ucygpCiB7Ci0gICAgVHJhbnNpdGlvbiogbGF5ZXIgPSByYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uOworICAgIEFuaW1hdGlvbiogbGF5ZXIgPSByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uLmdldCgpOwogICAgIGlmICghbGF5
ZXIpCi0gICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24g
PSBuZXcgVHJhbnNpdGlvbigpOwotICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90
cmFuc2l0aW9uOworICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFu
c2l0aW9uID0gbmV3IEFuaW1hdGlvbigpOworICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV90cmFuc2l0aW9uLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAppbmRleCBlYmFiOGI2Li5iZWMyN2Q0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKQEAgLTEyNTcsNTggKzEyNTcsNjkgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV95MjsKIH07CiAKLXN0cnVjdCBUcmFuc2l0aW9uIHsKK2NsYXNzIEFuaW1hdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFuaW1hdGlvbj4gewogcHVibGljOgotICAgIFRyYW5zaXRpb24oKTsKLSAg
ICB+VHJhbnNpdGlvbigpOworICAgIEFuaW1hdGlvbigpOwogCi0gICAgVHJhbnNpdGlvbiogbmV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQotICAgIFRyYW5zaXRpb24qIG5leHQoKSB7IHJl
dHVybiBtX25leHQ7IH0KKyAgICBjb25zdCBBbmltYXRpb24qIG5leHQoKSBjb25zdCB7IHJldHVy
biBtX25leHQuZ2V0KCk7IH0KKyAgICBBbmltYXRpb24qIG5leHQoKSB7IHJldHVybiBtX25leHQu
Z2V0KCk7IH0KIAorICAgIGJvb2wgaXNEZWxheVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXlT
ZXQ7IH0KICAgICBib29sIGlzRHVyYXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9u
U2V0OyB9Ci0gICAgYm9vbCBpc1JlcGVhdENvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBl
YXRDb3VudFNldDsgfQogICAgIGJvb2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGltaW5nRnVuY3Rpb25TZXQ7IH0KICAgICBib29sIGlzUHJvcGVydHlTZXQoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5U2V0OyB9Ci0gICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gIW1fZHVyYXRpb25TZXQgJiYgIW1fcmVwZWF0Q291bnRTZXQgJiYgIW1fdGlt
aW5nRnVuY3Rpb25TZXQgJiYgIW1fcHJvcGVydHlTZXQ7IH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKCFtX2R1cmF0aW9uU2V0ICYmICFtX2RlbGF5
U2V0ICYmICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0KTsKKyAgICB9CisK
KyAgICBib29sIGlzRW1wdHlPclplcm9EdXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbXB0eSgpIHx8IChtX2R1cmF0aW9uID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNsZWFyRGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQogICAg
IHZvaWQgY2xlYXJEdXJhdGlvbigpIHsgbV9kdXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9p
ZCBjbGVhclJlcGVhdENvdW50KCkgeyBtX3JlcGVhdENvdW50U2V0ID0gZmFsc2U7IH0KICAgICB2
b2lkIGNsZWFyVGltaW5nRnVuY3Rpb24oKSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxzZTsg
fQorCiAgICAgdm9pZCBjbGVhclByb3BlcnR5KCkgeyBtX3Byb3BlcnR5U2V0ID0gZmFsc2U7IH0K
IAotICAgIGludCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBp
bnQgcmVwZWF0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdENvdW50OyB9CisgICAgZG91
YmxlIGRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheTsgfQorICAgIGRvdWJsZSBkdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICBjb25zdCBUaW1pbmdGdW5jdGlv
biYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uOyB9CiAg
ICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQotICAgIAotICAg
IHZvaWQgc2V0RHVyYXRpb24oaW50IGQpIHsgbV9kdXJhdGlvbiA9IGQ7IG1fZHVyYXRpb25TZXQg
PSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRSZXBlYXRDb3VudChpbnQgYykgeyBtX3JlcGVhdENvdW50
ID0gYzsgbV9yZXBlYXRDb3VudFNldCA9IHRydWU7IH0KKworICAgIHZvaWQgc2V0RGVsYXkoZG91
YmxlIGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRE
dXJhdGlvbihkb3VibGUgZCkgeyBBU1NFUlQoZCA+PSAwKTsgbV9kdXJhdGlvbiA9IGQ7IG1fZHVy
YXRpb25TZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1p
bmdGdW5jdGlvbiYgZikgeyBtX3RpbWluZ0Z1bmN0aW9uID0gZjsgbV90aW1pbmdGdW5jdGlvblNl
dCA9IHRydWU7IH0KICAgICB2b2lkIHNldFByb3BlcnR5KGludCB0KSB7IG1fcHJvcGVydHkgPSB0
OyBtX3Byb3BlcnR5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TmV4dChBbmltYXRpb24qIG4p
IHsgaWYgKG1fbmV4dC5nZXQoKSAhPSBuKSB7IG1fbmV4dCA9IG47IH0gfQogCi0gICAgdm9pZCBz
ZXROZXh0KFRyYW5zaXRpb24qIG4pIHsgaWYgKG1fbmV4dCAhPSBuKSB7IGRlbGV0ZSBtX25leHQ7
IG1fbmV4dCA9IG47IH0gfQorICAgIEFuaW1hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlv
biYgbyk7CisgICAgQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgbyk7CiAKLSAgICBUcmFuc2l0
aW9uJiBvcGVyYXRvcj0oY29uc3QgVHJhbnNpdGlvbiYgbyk7ICAgIAotICAgIFRyYW5zaXRpb24o
Y29uc3QgVHJhbnNpdGlvbiYgbyk7CisgICAgLy8gcmV0dXJuIHRydWUgaWYgYWxsIG1lbWJlcnMg
b2YgdGhpcyBjbGFzcyBtYXRjaCAoZXhjbHVkaW5nIG1fbmV4dCkKKyAgICBib29sIGFuaW1hdGlv
bnNNYXRjaChjb25zdCBBbmltYXRpb24qIHQpIGNvbnN0OwogCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBU
cmFuc2l0aW9uJiBvKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG8pOwotICAg
IH0KKyAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSBBbmltYXRpb24gaW4gdGhlIGNoYWluIChkZWZp
bmVkIGJ5IG1fbmV4dCkgbWF0Y2ggCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFuaW1hdGlv
biYgbykgY29uc3QgeyByZXR1cm4gYW5pbWF0aW9uc01hdGNoKCZvKSAmJiAoKG1fbmV4dCAmJiBv
Lm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQpIDogKG1fbmV4dCA9PSBvLm1fbmV4dCkp
OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvKTsgfQogCiAgICAgdm9pZCBmaWxsVW5zZXRQcm9wZXJ0aWVzKCk7CiAK
LSAgICBpbnQgbV9kdXJhdGlvbjsKLSAgICBpbnQgbV9yZXBlYXRDb3VudDsKK3ByaXZhdGU6Cisg
ICAgZG91YmxlIG1fZHVyYXRpb247CiAgICAgVGltaW5nRnVuY3Rpb24gbV90aW1pbmdGdW5jdGlv
bjsKKyAgICBkb3VibGUgbV9kZWxheTsKICAgICBpbnQgbV9wcm9wZXJ0eTsKIAotICAgIGJvb2wg
bV9kdXJhdGlvblNldDsKLSAgICBib29sIG1fcmVwZWF0Q291bnRTZXQ7Ci0gICAgYm9vbCBtX3Rp
bWluZ0Z1bmN0aW9uU2V0OwotICAgIGJvb2wgbV9wcm9wZXJ0eVNldDsKLQotICAgIFRyYW5zaXRp
b24qIG1fbmV4dDsKKyAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICAgOiAxOworICAgIGJvb2wg
bV90aW1pbmdGdW5jdGlvblNldCA6IDE7CisgICAgYm9vbCBtX2RlbGF5U2V0ICAgICAgICAgIDog
MTsKKyAgICBib29sIG1fcHJvcGVydHlTZXQgICAgICAgOiAxOworICAgIAorICAgIFJlZlB0cjxB
bmltYXRpb24+IG1fbmV4dDsKIH07CiAKIGNsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4gewpAQCAtMTM4OSw3ICsxNDAwLDcgQEAgcHVibGlj
OgogICAgIAogICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IG1fYm94UmVmbGVjdDsKIAotICAg
IFRyYW5zaXRpb24qIG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX3RyYW5z
aXRpb247CiAKICAgICBGaWxsTGF5ZXIgbV9tYXNrOwogICAgIE5pbmVQaWVjZUltYWdlIG1fbWFz
a0JveEltYWdlOwpAQCAtMjAzMCw5ICsyMDQxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YmFja2dyb3VuZC0+bV9vdXRsaW5lLl9vZmZzZXQ7CiAgICAgfQogICAgIFNoYWRvd0RhdGEqIHRl
eHRTaGFkb3coKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNoYWRvdzsg
fQotICAgIENvbG9yIHRleHRTdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U3Ryb2tlQ29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgdGV4dFN0cm9rZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsg
fQogICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT50ZXh0U3Ryb2tlV2lkdGg7IH0KLSAgICBDb2xvciB0ZXh0RmlsbENvbG9yKCkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KKyAgICBjb25z
dCBDb2xvciYgdGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRh
LT50ZXh0RmlsbENvbG9yOyB9CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5vcGFjaXR5OyB9CiAgICAgRUFwcGVhcmFuY2UgYXBwZWFyYW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVBcHBlYXJhbmNlPihyYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9hcHBlYXJhbmNlKTsgfQogICAgIEVCb3hBbGlnbm1lbnQgYm94QWxpZ24oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQm94QWxpZ25tZW50PihyYXJlTm9uSW5oZXJpdGVk
RGF0YS0+ZmxleGlibGVCb3gtPmFsaWduKTsgfQpAQCAtMjA4Nyw4ICsyMDk4LDggQEAgcHVibGlj
OgogICAgIC8vIEVuZCBDU1MzIEdldHRlcnMKIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3Bl
cnR5IGdldHRlciBtZXRob2RzCi0gICAgVHJhbnNpdGlvbiogYWNjZXNzVHJhbnNpdGlvbnMoKTsK
LSAgICBjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb247IH0KKyAgICBBbmltYXRpb24qIGFjY2Vzc1Ry
YW5zaXRpb25zKCk7CisgICAgY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb24uZ2V0KCk7IH0KICAgICBp
bnQgbGluZUNsYW1wKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPmxpbmVD
bGFtcDsgfQogICAgIGJvb2wgdGV4dFNpemVBZGp1c3QoKSBjb25zdCB7IHJldHVybiByYXJlSW5o
ZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3Q7IH0KICAgICBFVGV4dFNlY3VyaXR5IHRleHRTZWN1
cml0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0U2VjdXJpdHk+KHJhcmVJbmhl
cml0ZWREYXRhLT50ZXh0U2VjdXJpdHkpOyB9CkBAIC0yMzUyLDggKzIzNjMsOCBAQCBwdWJsaWM6
CiAgICAgLy8gRW5kIENTUzMgU2V0dGVycwogICAgCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJv
cGVydHkgc2V0dGVycwotICAgIHZvaWQgY2xlYXJUcmFuc2l0aW9ucygpIHsgZGVsZXRlIHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb247IHJhcmVOb25Jbmhlcml0ZWRE
YXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSAwOyB9Ci0gICAgdm9pZCBpbmhlcml0VHJhbnNp
dGlvbnMoY29uc3QgVHJhbnNpdGlvbiogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYg
KHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5l
dyBUcmFuc2l0aW9uKCpwYXJlbnQpOyB9CisgICAgdm9pZCBjbGVhclRyYW5zaXRpb25zKCkgeyBy
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gMDsgfQorICAgIHZv
aWQgaW5oZXJpdFRyYW5zaXRpb25zKGNvbnN0IEFuaW1hdGlvbiogcGFyZW50KSB7IGNsZWFyVHJh
bnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1f
dHJhbnNpdGlvbiA9IG5ldyBBbmltYXRpb24oKnBhcmVudCk7IH0KICAgICB2b2lkIGFkanVzdFRy
YW5zaXRpb25zKCk7CiAgICAgdm9pZCBzZXRMaW5lQ2xhbXAoaW50IGMpIHsgU0VUX1ZBUihyYXJl
Tm9uSW5oZXJpdGVkRGF0YSwgbGluZUNsYW1wLCBjKTsgfQogICAgIHZvaWQgc2V0VGV4dFNpemVB
ZGp1c3QoYm9vbCBiKSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRleHRTaXplQWRqdXN0
LCBiKTsgfQpAQCAtMjUxMSwxMCArMjUyMiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExlbmd0
aCBpbml0aWFsVHJhbnNmb3JtT3JpZ2luWSgpIHsgcmV0dXJuIExlbmd0aCg1MC4wLCBQZXJjZW50
KTsgfQogICAgIAogICAgIC8vIEtlZXAgdGhlc2UgYXQgdGhlIGVuZC4KLSAgICBzdGF0aWMgaW50
IGluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIGlu
dCBpbml0aWFsVHJhbnNpdGlvblJlcGVhdENvdW50KCkgeyByZXR1cm4gMTsgfQotICAgIHN0YXRp
YyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkgeyByZXR1
cm4gVGltaW5nRnVuY3Rpb24oKTsgfQotICAgIHN0YXRpYyBpbnQgaW5pdGlhbFRyYW5zaXRpb25Q
cm9wZXJ0eSgpIHsgcmV0dXJuIGNBbmltYXRlQWxsOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRp
YWxEZWxheSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxEdXJhdGlv
bigpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgVGltaW5nRnVuY3Rpb24gaW5pdGlhbFRpbWlu
Z0Z1bmN0aW9uKCkgeyByZXR1cm4gVGltaW5nRnVuY3Rpb24oKTsgfQorICAgIHN0YXRpYyBpbnQg
aW5pdGlhbFByb3BlcnR5KCkgeyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KICAgICBzdGF0aWMgaW50
IGluaXRpYWxMaW5lQ2xhbXAoKSB7IHJldHVybiAtMTsgfQogICAgIHN0YXRpYyBib29sIGluaXRp
YWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgRVRleHRTZWN1
cml0eSBpbml0aWFsVGV4dFNlY3VyaXR5KCkgeyByZXR1cm4gVFNOT05FOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22571</attachid>
            <date>2008-07-30 18:28:10 -0700</date>
            <delta_ts>2008-08-04 12:03:08 -0700</delta_ts>
            <desc>Patch Update 4</desc>
            <filename>patch4-new-animation-controller-update4.patch</filename>
            <type>text/plain</type>
            <size>138828</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDg1OTJm
MjEuLmIyMzZiMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTE4Nyw2ICsxODgsMTAgQEAgc3RhdGljIGNvbnN0IGludCBjb21wdXRlZFBy
b3BlcnRpZXNbXSA9IHsKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2Zvcm1PcmlnaW5ZLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5LAorICAg
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRp
bWluZ0Z1bmN0aW9uLAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwK
QEAgLTEwNTUsNiArMTA2MCw2MyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0eWxlLT50cmFuc2l0aW9u
cygpOworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHQtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgoKnQpW2ldLT5kZWxheSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShSZW5kZXJT
dHlsZTo6aW5pdGlhbERlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAgICAg
ICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246IHsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CisgICAgICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiB0ID0gc3R5bGUtPnRyYW5zaXRpb25z
KCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdC0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCgqdClbaV0tPmR1cmF0aW9uKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRl
clN0eWxlOjppbml0aWFsRHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogeworICAgICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHQgPSBzdHlsZS0+
dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSAoKnQpW2ldLT50aW1pbmdGdW5jdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZTo6
Y3JlYXRlKHRmLngxKCksIHRmLnkxKCksIHRmLngyKCksIHRmLnkyKCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1
bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogeworICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
Q29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHQgPSBz
dHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgcHJvcCA9ICgqdClbaV0tPnByb3BlcnR5KCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09IGNB
bmltYXRlTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAibm9uZSI7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0gImFsbCI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8
Q1NTUHJvcGVydHlJRD4ocHJvcCkpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZSgiYWxsIiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKQEAgLTExMTIsMTEgKzExNzQsNiBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NT
VmFsdWUoaW50IHByb3BlcgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1
cmF0aW9uOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5
OgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50Ogot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgog
ICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBhcmUgdW5pbXBsZW1lbnRlZC4KICAgICAg
ICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBkZjllNmNmLi43
NDBlZDZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTEyOTQsOCArMTI5NCw4IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EZWxheToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9u
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiB7CiAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsOwpAQCAtMTcwOSw4ICsxNzA5LDkgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRy
YW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVl
PgogCiBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0
YW50KQogewotICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uVGltaW5nRnVuY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50
IH07CisgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uUHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24gfTsKICAgICBjb25z
dCBpbnQgbnVtUHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9wZXJ0
aWVzWzBdKTsKICAgICAKICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb24pOwpAQCAtMjIwNiwyMCArMjIwNywyMCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJ
ZDIsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VEZWxheSgpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1
ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm93KQorICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlk
KTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGltZSwgbV9zdHJpY3QpKQogICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQo
KQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUR1cmF0aW9uKCkKIHsKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAgaWYgKHZhbGlkVW5p
dCh2YWx1ZSwgRkludGVnZXJ8Rk5vbk5lZywgbV9zdHJpY3QpKQorICAgIGlmICh2YWxpZFVuaXQo
dmFsdWUsIEZUaW1lfEZOb25OZWcsIG1fc3RyaWN0KSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMpdmFsdWUtPnVuaXQpOwogICAgIHJldHVybiAwOwogfQpAQCAtMjI0Miw3ICsyMjQzLDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJWYWx1
ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJlc3UKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigp
CitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rpb24oKQog
ewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAg
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
TGluZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVFYXNlT3V0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCkKQEAgLTIzMDYs
MTggKzIzMDcsMTggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGlu
dCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICAgICAgfQogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgICAgICAg
ICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgICAgICAgICAgICAg
ICAgICBjdXJyVmFsdWUgPSBwYXJzZURlbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50OgotICAgICAgICAgICAgICAgICAgICBjdXJy
VmFsdWUgPSBwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpOworICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJWYWx1ZSA9IHBhcnNlRHVyYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVM
aXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkwNyw3ICszOTA4
LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm0o
KQogCiAgICAgLy8gVGhlIHRyYW5zZm9ybSBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25hbCBwcmltaXRp
dmVzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm0gb3BlcmF0aW9ucy4KICAgICAvLyBXZSBjb2xsZWN0
IGEgbGlzdCBvZiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZXMsIHdoZXJlIGVhY2ggdmFsdWUgc3Bl
Y2lmaWVzIGEgc2luZ2xlIG9wZXJhdGlvbi4KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAg
ICAgZm9yIChDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2
YWx1ZTsgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAg
ICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgg
Yi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCA1ZGVkNTVjLi44ODA0NzFhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aApAQCAtODQsMTEgKzg0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
ZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
cnZhbCk7CiAKICAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHRyPENTU1ZhbHVl
PiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7Ci0gICAgICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIGJv
b2wgcGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3MsIGRv
dWJsZSYgcmVzdWx0KTsKKworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZURlbGF5
KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRHVyYXRpb24oKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUaW1pbmdGdW5jdGlvbigpOwogICAgICAgICBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpOworCisgICAgICAg
IGJvb2wgcGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKENTU1BhcnNlclZhbHVlTGlzdComIGFyZ3Ms
IGRvdWJsZSYgcmVzdWx0KTsKICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eShp
bnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0
aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1l
cy5pbgppbmRleCBlYzM5MjVhLi40M2E3MDIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eU5hbWVzLmluCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4KQEAg
LTE0MiwxMSArMTQyLDYgQEAgd29yZC1zcGFjaW5nCiB3b3JkLXdyYXAKIHotaW5kZXgKIHpvb20K
LS13ZWJraXQtdHJhbnNpdGlvbgotLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uCi0td2Via2l0
LXRyYW5zaXRpb24tcHJvcGVydHkKLS13ZWJraXQtdHJhbnNpdGlvbi1yZXBlYXQtY291bnQKLS13
ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24KIC13ZWJraXQtYXBwZWFyYW5jZQogLXdl
YmtpdC1iYWNrZ3JvdW5kLWNsaXAKIC13ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGUKQEAgLTIy
NSw2ICsyMjAsMTEgQEAgem9vbQogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luCiAtd2Via2l0LXRy
YW5zZm9ybS1vcmlnaW4teAogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXkKKy13ZWJraXQtdHJh
bnNpdGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5Cistd2Via2l0LXRyYW5zaXRpb24tZHVy
YXRpb24KKy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQorLXdlYmtpdC10cmFuc2l0aW9uLXRp
bWluZy1mdW5jdGlvbgogLXdlYmtpdC11c2VyLWRyYWcKIC13ZWJraXQtdXNlci1tb2RpZnkKIC13
ZWJraXQtdXNlci1zZWxlY3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggYjQ4ZGRkNS4u
MjRkNzViZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysr
IGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTE4NCw2MSArMTg0LDUyIEBA
IEhBTkRMRV9GSUxMX0xBWUVSX1ZBTFVFKG1hc2ssIE1hc2ssIHByb3AsIFByb3AsIHZhbHVlKQog
CiAjZGVmaW5lIEhBTkRMRV9UUkFOU0lUSU9OX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJv
cCkgXAogaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9z
dHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotICAgIFRyYW5zaXRpb24qIHByZXZDaGlsZCA9
IDA7IFwKLSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyUGFyZW50ID0gbV9wYXJlbnRTdHlsZS0+
dHJhbnNpdGlvbnMoKTsgXAotICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIGN1cnJQYXJlbnQtPmlz
IyNQcm9wIyNTZXQoKSkgeyBcCi0gICAgICAgIGlmICghY3VyckNoaWxkKSB7IFwKLSAgICAgICAg
ICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllci4qLyBcCi0gICAgICAgICAgICBjdXJyQ2hp
bGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCi0gICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQo
Y3VyckNoaWxkKTsgXAotICAgICAgICB9IFwKLSAgICAgICAgY3VyckNoaWxkLT5zZXQjI1Byb3Ao
Y3VyclBhcmVudC0+cHJvcCgpKTsgXAotICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7IFwK
LSAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0KCk7IFwKLSAgICAgICAgY3VyclBh
cmVudCA9IGN1cnJQYXJlbnQtPm5leHQoKTsgXAorICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBt
X3N0eWxlLT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCisgICAgY29uc3QgQW5pbWF0aW9uTGlzdCog
cGFyZW50TGlzdCA9IG1fcGFyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7IFwKKyAgICBzaXplX3Qg
aSA9IDA7IFwKKyAgICBmb3IgKCA7IGkgPCBwYXJlbnRMaXN0LT5zaXplKCkgJiYgKCpwYXJlbnRM
aXN0KVtpXS0+aXMjI1Byb3AjI1NldCgpOyArK2kpIHsgXAorICAgICAgICBpZiAobGlzdC0+c2l6
ZSgpIDw9IGkpIFwKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgp
KTsgXAorICAgICAgICAoKmxpc3QpW2ldLT5zZXQjI1Byb3AoKCpwYXJlbnRMaXN0KVtpXS0+cHJv
cCgpKTsgXAogICAgIH0gXAogICAgIFwKLSAgICB3aGlsZSAoY3VyckNoaWxkKSB7IFwKLSAgICAg
ICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5
IHNldC4gKi8gXAotICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKLSAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKLSAgICB9IFwKLX0gZWxzZSBpZiAoaXNJ
bml0aWFsKSB7IFwKLSAgICBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3NU
cmFuc2l0aW9ucygpOyBcCi0gICAgY3VyckNoaWxkLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUcmFuc2l0aW9uIyNQcm9wKCkpOyBcCi0gICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hp
bGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAot
ICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKKyAgICAvKiBSZXNldCBhbnkgcmVt
YWluaW5nIGxheWVycyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCisgICAgZm9y
ICggOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIFwKKyAgICAgICAgKCpsaXN0KVtpXS0+Y2xlYXIj
I1Byb3AoKTsgXAorfSBcCitpZiAoaXNJbml0aWFsKSB7IFwKKyAgICBBbmltYXRpb25MaXN0KiBs
aXN0ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAorICAgICgqbGlzdClbMF0tPnNl
dCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIFwKKyAgICAgICAgKCpsaXN0KVswXS0+Y2xl
YXIjI1Byb3AoKTsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3As
IFByb3AsIHZhbHVlKSB7IFwKIEhBTkRMRV9UUkFOU0lUSU9OX0lOSEVSSVRfQU5EX0lOSVRJQUwo
cHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCB8fCBpc0luaXRpYWwpIFwKICAgICByZXR1cm47
IFwKLVRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7
IFwKLVRyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKK0FuaW1hdGlvbkxpc3QqIGxpc3QgPSBt
X3N0eWxlLT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCitzaXplX3QgY2hpbGRJbmRleCA9IDA7IFwK
IGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBcCiAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFu
ZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8g
XAogICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odmFsdWUpOyBcCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Qt
Pmxlbmd0aCgpOyBpKyspIHsgXAotICAgICAgICBpZiAoIWN1cnJDaGlsZCkgeyBcCi0gICAgICAg
ICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwK
LSAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKLSAgICAgICAgICAg
IHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOyBcCi0gICAgICAgIH0gXAotICAgICAgICBt
YXBUcmFuc2l0aW9uIyNQcm9wKGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsgXAotICAgICAgICBwcmV2Q2hpbGQgPSBjdXJyQ2hpbGQ7IFwKLSAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IFwKKyAgICAgICAgaWYgKGNoaWxkSW5kZXgg
PD0gbGlzdC0+c2l6ZSgpKSBcCisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpj
cmVhdGUoKSk7IFwKKyAgICAgICAgbWFwIyNQcm9wKCgqbGlzdClbY2hpbGRJbmRleF0uZ2V0KCks
IHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKKyAgICAgICAgKytjaGls
ZEluZGV4OyBcCiAgICAgfSBcCiB9IGVsc2UgeyBcCi0gICAgbWFwVHJhbnNpdGlvbiMjUHJvcChj
dXJyQ2hpbGQsIHZhbHVlKTsgXAotICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBc
CisgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgXAorICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0
aW9uOjpjcmVhdGUoKSk7IFwKKyAgICBtYXAjI1Byb3AoKCpsaXN0KVtjaGlsZEluZGV4XS5nZXQo
KSwgdmFsdWUpOyBcCisgICAgY2hpbGRJbmRleCA9IDE7IFwKIH0gXAotd2hpbGUgKGN1cnJDaGls
ZCkgeyBcCitmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkg
eyBcCiAgICAgLyogUmVzZXQgYWxsIHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHBy
b3BlcnR5IHNldC4gKi8gXAotICAgIGN1cnJDaGlsZC0+Y2xlYXIjI1Byb3AoKTsgXAotICAgIGN1
cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCi19IH0KKyAgICAoKmxpc3QpW2NoaWxkSW5k
ZXhdLT5jbGVhciMjUHJvcCgpOyBcCit9IFwKK30KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9D
T05EKHByb3BJRCwgcHJvcCwgUHJvcCkgXAogaWYgKGlkID09IHByb3BJRCkgeyBcCkBAIC00NzU4
LDE4ICs0NzQ5LDE4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQg
aWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQogICAgICAg
ICAgICAgbV9zdHlsZS0+aW5oZXJpdFRyYW5zaXRpb25zKG1fcGFyZW50U3R5bGUtPnRyYW5zaXRp
b25zKCkpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EZWxheToKKyAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUoZGVsYXksIERlbGF5
LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uRHVyYXRpb246CiAgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKGR1cmF0aW9u
LCBEdXJhdGlvbiwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50OgotICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9W
QUxVRShyZXBlYXRDb3VudCwgUmVwZWF0Q291bnQsIHZhbHVlKQorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZB
TFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICBIQU5E
TEVfVFJBTlNJVElPTl9WQUxVRSh0aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVl
KQogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Q
cm9wZXJ0eToKLSAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcGVydHksIFByb3Bl
cnR5LCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlk
OgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgpAQCAt
NTAxMCwxMCArNTAwMSwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9zaXRp
b24oRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGxheWVyLT5zZXRZUG9z
aXRpb24obCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvbkR1cmF0
aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwRHVyYXRpb24oQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSog
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NT
X0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldER1
cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRpb24oKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTUwMjIsMzUgKzUwMTMsMzYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHYK
IAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0
aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAgdHJhbnNpdGlv
bi0+c2V0RHVyYXRpb24oaW50KDEwMDAqcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkp
OworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1
cmF0aW9uKGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgICAgIHRy
YW5zaXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAw
MC4wZik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblJlcGVhdENv
dW50KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwRGVsYXkoQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lO
SVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoUmVuZGVyU3R5bGU6
OmluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNl
dERlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXRSZXBl
YXRDb3VudCgtMSk7Ci0gICAgZWxzZQotICAgICAgICB0cmFuc2l0aW9uLT5zZXRSZXBlYXRDb3Vu
dChpbnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgdHJhbnNpdGlvbi0+
c2V0RGVsYXkoMCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKKyAgICAgICAgICAgIHRy
YW5zaXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShwcmltaXRpdmVWYWx1
ZS0+Z2V0RmxvYXRWYWx1ZSgpLzEwMDAuMGYpOworICAgIH0KIH0KIAotdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlv
biwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5j
dGlvbihBbmltYXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAo
dmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAg
ICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQorICAgIAogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7
CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpKSB7CkBAIC01MDcyLDE3ICs1MDY0LDE3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRp
b24sIENTU1ZhCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmICh2
YWx1ZS0+aXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CisgICAgCisgICAgaWYg
KHZhbHVlLT5pc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewogICAgICAgICBDU1NUaW1pbmdGdW5j
dGlvblZhbHVlKiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRp
bWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIHRpbWluZ0Z1bmN0aW9uLT54
MSgpLCB0aW1pbmdGdW5jdGlvbi0+eTEoKSwgdGltaW5nRnVuY3Rpb24tPngyKCksIHRpbWluZ0Z1
bmN0aW9uLT55MigpKSk7CiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRy
YW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUp
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFByb3BlcnR5KEFuaW1hdGlvbiogdHJhbnNpdGlv
biwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0g
Q1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5
KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpOworICAgICAgICB0cmFu
c2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MDkwLDcgKzUwODIsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBD
U1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAg
ICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCBlMTZmMmU3Li5iOTE2NzE4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCkBAIC0yMDUsMTAgKzIwNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgbWFw
RmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZp
bGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1hcFRy
YW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBt
YXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAg
IHZvaWQgbWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSop
OwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFs
dWUqKTsKKyAgICAgICAgdm9pZCBtYXBEZWxheShBbmltYXRpb24qLCBDU1NWYWx1ZSopOworICAg
ICAgICB2b2lkIG1hcER1cmF0aW9uKEFuaW1hdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZv
aWQgbWFwVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9p
ZCBtYXBQcm9wZXJ0eShBbmltYXRpb24qLCBDU1NWYWx1ZSopOwogCiAgICAgICAgIHZvaWQgbWFw
TmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggYi9XZWJDb3JlL2Nzcy9DU1NU
aW1pbmdGdW5jdGlvblZhbHVlLmgKaW5kZXggM2NiM2ViZC4uZmZhNDU1YyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCisrKyBiL1dlYkNvcmUvY3NzL0NT
U1RpbWluZ0Z1bmN0aW9uVmFsdWUuaApAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1
ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUaW1pbmdGdW5jdGlvblZh
bHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAogICAgIGRvdWJsZSBtX3gxOwogICAgIGRvdWJs
ZSBtX3kxOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaCBiL1dlYkNvcmUvY3Nz
L0NTU1ZhbHVlLmgKaW5kZXggYmY1YzM2MS4uZmZkZjQyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUHJpbWl0aXZlVmFsdWUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zaXRpb25U
aW1pbmdGdW5jdGlvblZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNUaW1pbmdGdW5jdGlvblZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKFNWRykKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4gYi9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUtleXdvcmRzLmluCmluZGV4IDNjYmZiODUuLmIzOWUxNTEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KKysrIGIvV2ViQ29yZS9jc3MvQ1NTVmFsdWVL
ZXl3b3Jkcy5pbgpAQCAtNTYzLDYgKzU2MywxMSBAQCB2aXN1YWwKIGxpbmVzCiAKICMKKyMgQ1NT
X1BST1BfX1dFQktJVF9UUkFOU0lUSU9OX0RFTEFZCisjCitub3cKKworIwogIyBDU1NfUFJPUF9f
V0VCS0lUX1RSQU5TSVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBlYXNlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgYi9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKaW5kZXggNTc2NDk2YS4uYTZlNzFjZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCisrKyBiL1dlYkNvcmUv
Y3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcApAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUoVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSBvcCkKLSAgICA6IENTU1ZhbHVlTGlzdChm
YWxzZSkKKyAgICA6IENTU1ZhbHVlTGlzdCh0cnVlKQogICAgICwgbV90eXBlKG9wKQogewogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDFlZjZhNWUuLjMxYzMxYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI0LDYgKzI0LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogCisjaW5jbHVk
ZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJDREFUQVNlY3Rpb24uaCIKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKQEAgLTExNjYs
NiArMTE2NywxMCBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVSZW5kZXJpbmcoKQogewogICAgIGlm
IChoYXNDaGFuZ2VkQ2hpbGQoKSkKICAgICAgICAgcmVjYWxjU3R5bGUoTm9DaGFuZ2UpOworICAg
IAorICAgIC8vIHRlbGwgdGhlIGFuaW1hdGlvbiBjb250cm9sbGVyIHRoYXQgdGhlIHN0eWxlIGlz
IGF2YWlsYWJsZSBhbmQgaXQgY2FuIHN0YXJ0IGFuaW1hdGlvbnMKKyAgICBpZiAobV9mcmFtZSkK
KyAgICAgICAgbV9mcmFtZS0+YW5pbWF0aW9uKCktPnN0eWxlQXZhaWxhYmxlKCk7CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwMzRjMTFh
Li42M2ViNzc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTc1MCw3ICs3NTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24oKTsKICAgICB2b2lkIGNhbmNlbEZvY3VzQXBwZWFy
YW5jZVVwZGF0ZSgpOwotICAgIAorICAgICAgICAKICAgICAvLyBGRiBtZXRob2QgZm9yIGFjY2Vz
c2luZyB0aGUgc2VsZWN0aW9uIGFkZGVkIGZvciBjb21wYXRhYmlsaXR5LgogICAgIERPTVNlbGVj
dGlvbiogZ2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgCkBAIC0xMDQ2LDYgKzEwNDYsNyBAQCBw
cml2YXRlOgogI2lmIFVTRShMT1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgYm9vbCBtX2luTG93
QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCiB9OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudDo6
aGFzRWxlbWVudFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXgg
N2Q1ZjNmNi4uOTcwYzNlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTc4NSw5ICs3ODUsOSBAQCB2b2lkIEVsZW1l
bnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKICAgICAgICAgICAgICAgICBuZXdT
dHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlKQorICAgICAgICBpZiAoY2ggIT0gTm9D
aGFuZ2UpIHsKICAgICAgICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAg
ZWxzZSBpZiAoY2hhbmdlZCgpICYmIChkb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwg
ZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgeworICAgICAgICB9IGVsc2UgaWYg
KGNoYW5nZWQoKSAmJiAoc3R5bGVDaGFuZ2VUeXBlKCkgIT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2Up
ICYmIChkb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rl
c2NlbmRhbnRSdWxlcygpKSkgewogICAgICAgICAgICAgLy8gQWx0aG91Z2ggbm8gY2hhbmdlIG9j
Y3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRoZSBjb3VzaW4gc3R5bGUgc2hh
cmluZyBjb2RlIHdvbid0IGdldAogICAgICAgICAgICAgLy8gZm9vbGVkIGludG8gYmVsaWV2aW5n
IHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZSBk
b2N1bWVudCBhY3R1YWxseSB1c2VzCiAgICAgICAgICAgICAvLyBzaWJsaW5nL2Rlc2NlbmRhbnQg
cnVsZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJsZSBmb3IgYW5jZXN0b3Igc3R5
bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9mCkBAIC03OTYsMTIgKzc5NiwxMyBAQCB2b2lkIEVsZW1l
bnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKICAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLT5zZXRTdHlsZUludGVybmFsKG5ld1N0eWxlKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBBbmltYXRpb25TdHlsZUNoYW5nZSkK
KyAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAKICAgICAgICAgbmV3U3R5
bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogCiAgICAgICAgIGlmIChjaGFu
Z2UgIT0gRm9yY2UpIHsKLSAgICAgICAgICAgIGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRh
bnRSdWxlcygpIHx8IGhhc1Bvc2l0aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPT0g
RnVsbFN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgaWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2Vu
ZGFudFJ1bGVzKCkgfHwgaGFzUG9zaXRpb25hbFJ1bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA+
PSBGdWxsU3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAgICAgY2hhbmdlID0gRm9yY2U7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlID0gY2g7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKaW5kZXgg
ODcyYzZjZi4uZDI4OTgyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCisr
KyBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAtMTE5LDYgKzExOSwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVudE5hbWVzIHsKICAgICBtYWNybyhwcm9ncmVzcykg
XAogICAgIG1hY3JvKHN0YWxsZWQpIFwKICAgICBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9u
RW5kKSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uU3RhcnQpIFwKKyAgICBtYWNybyh3ZWJr
aXRBbmltYXRpb25JdGVyYXRpb24pIFwKKyAgICBcCisgICAgbWFjcm8od2Via2l0VHJhbnNpdGlv
bkVuZCkgXAorICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0gKIAogI2lm
bmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9CQUxTCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGUxMWE2ZDguLjkyNDQ3NDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCkBAIC00MTYsNyArNDE2LDcgQEAgdm9pZCBOb2RlOjpzZXRDaGFuZ2VkKFN0eWxlQ2hhbmdl
VHlwZSBjaGFuZ2VUeXBlKQogICAgIGlmICgoY2hhbmdlVHlwZSAhPSBOb1N0eWxlQ2hhbmdlKSAm
JiAhYXR0YWNoZWQoKSkgLy8gY2hhbmdlZCBjb21wYXJlZCB0byB3aGF0PwogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIShjaGFuZ2VUeXBlID09IElubGluZVN0eWxlQ2hhbmdlICYmIG1fc3R5
bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlKSkKKyAgICBpZiAoIShjaGFuZ2VUeXBlID09IElu
bGluZVN0eWxlQ2hhbmdlICYmIChtX3N0eWxlQ2hhbmdlID09IEZ1bGxTdHlsZUNoYW5nZSB8fCBt
X3N0eWxlQ2hhbmdlID09IEFuaW1hdGlvblN0eWxlQ2hhbmdlKSkpCiAgICAgICAgIG1fc3R5bGVD
aGFuZ2UgPSBjaGFuZ2VUeXBlOwogCiAgICAgaWYgKG1fc3R5bGVDaGFuZ2UgIT0gTm9TdHlsZUNo
YW5nZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5oIGIvV2ViQ29yZS9kb20vTm9k
ZS5oCmluZGV4IGE1Mzk0ODMuLmM0YTExYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUu
aAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTYxLDcgKzYxLDcgQEAgc3RydWN0IE5vZGVM
aXN0c05vZGVEYXRhOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1lbnVtIFN0eWxl
Q2hhbmdlVHlwZSB7IE5vU3R5bGVDaGFuZ2UsIElubGluZVN0eWxlQ2hhbmdlLCBGdWxsU3R5bGVD
aGFuZ2UgfTsKK2VudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNoYW5nZSwgSW5saW5lU3R5
bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSwgQW5pbWF0aW9uU3R5bGVDaGFuZ2UgfTsKIAogY29u
c3QgdW5zaWduZWQgc2hvcnQgRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVCA9IDB4MDA7CiBj
b25zdCB1bnNpZ25lZCBzaG9ydCBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgPSAweDAx
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIvV2ViQ29yZS9o
aXN0b3J5L0NhY2hlZFBhZ2UuY3BwCmluZGV4IGU1YmQzYzEuLjk4ZjM5MjMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAorKysgYi9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkUGFnZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIENhY2hlZFBhZ2U6OnJlc3RvcmUo
UGFnZSogcGFnZSkKICAgICAgICAgbV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT51
bnBhdXNlQW5pbWF0aW9ucygpOwogI2VuZGlmCiAKLSAgICBtYWluRnJhbWUtPmFuaW1hdGlvbigp
LT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgbWFpbkZyYW1lLT5hbmltYXRpb24oKS0+cmVzdW1l
QW5pbWF0aW9ucyhtX2RvY3VtZW50LmdldCgpKTsKIAogICAgIG1haW5GcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNldE1vdXNlUHJlc3NOb2RlKG1vdXNlUHJlc3NOb2RlKCkpOwogICAgICAgICAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1dlYkNvcmUv
cGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCAxNjc3ZmIyLi43ZThlOTNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVk
ZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNDMsNiArNDUsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIGNBbmltYXRpb25UaW1lckRl
bGF5ID0gMC4wMjU7CiAKK3N0YXRpYyB2b2lkIHNldENoYW5nZWQoTm9kZSogbm9kZSkKK3sKKyAg
ICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50KCkt
PmluUGFnZUNhY2hlKCkpKTsKKyAgICBub2RlLT5zZXRDaGFuZ2VkKEFuaW1hdGlvblN0eWxlQ2hh
bmdlKTsKK30KKwogLy8gVGhlIGVwc2lsb24gdmFsdWUgd2UgcGFzcyB0byBVbml0QmV6aWVyOjpz
b2x2ZSBnaXZlbiB0aGF0IHRoZSBhbmltYXRpb24gaXMgZ29pbmcgdG8gcnVuIG92ZXIgfGR1cnwg
c2Vjb25kcy4gVGhlIGxvbmdlciB0aGUKIC8vIGFuaW1hdGlvbiwgdGhlIG1vcmUgcHJlY2lzaW9u
IHdlIG5lZWQgaW4gdGhlIHRpbWluZyBmdW5jdGlvbiByZXN1bHQgdG8gYXZvaWQgdWdseSBkaXNj
b250aW51aXRpZXMuCiBzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1
cmF0aW9uKSB7IHJldHVybiAxLiAvICgyMDAuICogZHVyYXRpb24pOyB9CkBAIC01NSwxMzUgKzYz
LDczMSBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oZG91
YmxlIHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeAogICAgIHJldHVybiBiZXppZXIuc29sdmUo
dCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7CiB9CiAKLWNsYXNzIENvbXBvc2l0ZUltcGxpY2l0
QW5pbWF0aW9uOworY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOworY2xhc3MgQW5pbWF0aW9uQmFz
ZTsKIAotY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFibGUgeworY2xh
c3MgQW5pbWF0aW9uVGltZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBUcmFuc2l0aW9uKik7Ci0gICAgfkltcGxpY2l0QW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lk
IGFuaW1hdGUoQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0
eWxlKiYgYW5pbWF0ZWRTdHlsZSk7Ci0KLSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiBmcm9tLCBSZW5kZXJTdHlsZSogdG8pOworICAgIEFuaW1hdGlvblRpbWVyQmFz
ZShBbmltYXRpb25CYXNlKiBhbmltKQorICAgIDogbV90aW1lcih0aGlzLCAmQW5pbWF0aW9uVGlt
ZXJCYXNlOjp0aW1lckZpcmVkKQorICAgICwgbV9hbmltKGFuaW0pCisgICAgeworICAgICAgICBt
X3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uVGlt
ZXJCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRUaW1lcihkb3VibGUg
dGltZW91dD0wKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QodGltZW91dCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2FuY2VsVGltZXIoKQorICAgIHsKKyAgICAgICAgbV90
aW1lci5zdG9wKCk7CisgICAgfQogICAgIAotICAgIGRvdWJsZSBwcm9ncmVzcygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKSA9
IDA7CisgICAgCitwcml2YXRlOgorICAgIFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4gbV90aW1l
cjsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBBbmltYXRpb25CYXNlKiBtX2FuaW07Cit9OwogCi0g
ICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQorY2xhc3MgQW5p
bWF0aW9uRXZlbnREaXNwYXRjaGVyIDogcHVibGljIEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJs
aWM6CisgICAgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAor
ICAgIDogQW5pbWF0aW9uVGltZXJCYXNlKGFuaW0pCisgICAgLCBtX3Byb3BlcnR5KENTU1Byb3Bl
cnR5SW52YWxpZCkKKyAgICAsIG1fcmVzZXQoZmFsc2UpCisgICAgLCBtX2VsYXBzZWRUaW1lKC0x
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+QW5pbWF0aW9uRXZlbnREaXNwYXRj
aGVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRUaW1lcihFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9wZXJ0eSwgYm9vbCByZXNl
dCwgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBk
b3VibGUgZWxhcHNlZFRpbWUpCisgICAgeworICAgICAgICBtX2VsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICBtX3Byb3BlcnR5ID0gcHJvcGVydHk7Cisg
ICAgICAgIG1fcmVzZXQgPSByZXNldDsKKyAgICAgICAgbV9ldmVudFR5cGUgPSBldmVudFR5cGU7
CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsKKyAgICAgICAgQW5pbWF0aW9u
VGltZXJCYXNlOjpzdGFydFRpbWVyKCk7CisgICAgfQogICAgIAotICAgIGJvb2wgZmluaXNoZWQo
KSBjb25zdCB7IHJldHVybiBtX2ZpbmlzaGVkOyB9Ci0gICAgdm9pZCBzZXRGaW5pc2hlZChib29s
IGYpIHsgbV9maW5pc2hlZCA9IGY7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1l
cjxBbmltYXRpb25UaW1lckJhc2U+Kik7CiAgICAgCi0gICAgYm9vbCBzdGFsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhbGU7IH0KLSAgICB2b2lkIHNldFN0YWxlKCkgeyBtX3N0YWxlID0gdHJ1ZTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIEF0b21pY1N0
cmluZyBtX25hbWU7CisgICAgaW50IG1fcHJvcGVydHk7CisgICAgYm9vbCBtX3Jlc2V0OworICAg
IEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKKyAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsKK307
CiAKK2NsYXNzIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2sgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJC
YXNlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25UaW1lckNhbGxiYWNrKEFuaW1hdGlvbkJhc2Uq
IGFuaW0pIAorICAgIDogQW5pbWF0aW9uVGltZXJCYXNlKGFuaW0pCisgICAgLCBtX2VsYXBzZWRU
aW1lKDApCisgICAgeyB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZXJDYWxsYmFjaygpIHsg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVy
QmFzZT4qKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCisgICAgeworICAg
ICAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKyAgICAgICAgbV9lbGFwc2VkVGltZSA9IGVs
YXBzZWRUaW1lOworICAgICAgICBBbmltYXRpb25UaW1lckJhc2U6OnN0YXJ0VGltZXIodGltZW91
dCk7CisgICAgfQorICAgIAogcHJpdmF0ZToKLSAgICAvLyBUaGUgdHdvIHN0eWxlcyB0aGF0IHdl
IGFyZSBibGVuZGluZy4KLSAgICBSZW5kZXJTdHlsZSogbV9mcm9tU3R5bGU7Ci0gICAgUmVuZGVy
U3R5bGUqIG1fdG9TdHlsZTsKKyAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7CisgICAgZG91
YmxlIG1fZWxhcHNlZFRpbWU7Cit9OwogCi0gICAgaW50IG1fcHJvcGVydHk7Ci0gICAgVGltaW5n
RnVuY3Rpb24gbV9mdW5jdGlvbjsKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKK2NsYXNzIEltcGxp
Y2l0QW5pbWF0aW9uOworY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CiAKLSAgICBp
bnQgbV9yZXBlYXRDb3VudDsKKy8vIEEgQ29tcG9zaXRlQW5pbWF0aW9uIHJlcHJlc2VudHMgYSBj
b2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMgdGhhdAorLy8gYXJlIHJ1bm5pbmcsIHN1Y2ggYXMgYSBu
dW1iZXIgb2YgcHJvcGVydGllcyB0cmFuc2l0aW9uaW5nIGF0IG9uY2UuCisKK2NsYXNzIENvbXBv
c2l0ZUFuaW1hdGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29tcG9z
aXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBhbmltYXRpb25Db250cm9s
bGVyKQorICAgIDogbV9zdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAsIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJz
KDApCisgICAgeyB9CisgICAgCisgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpCisgICAgeworICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV90cmFuc2l0aW9ucyk7CisgICAgfQorICAgIAorICAgIFJl
bmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRp
bmcoYm9vbCBpbkFuaW1hdGluZyk7CisgICAgYm9vbCBhbmltYXRpbmcoKTsKKyAgICAKKyAgICBi
b29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zaXRpb25zLmNvbnRhaW5zKHByb3ApOyB9CisgICAgCisgICAgdm9pZCBzZXRUcmFuc2l0aW9u
U3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOworICAgIAorICAgIHZvaWQgcmVzZXRU
cmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHJlc2V0QW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqKTsKKyAgICAKKyAgICB2b2lkIGNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoUmVu
ZGVyT2JqZWN0Kik7CisgICAgCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOworICAgIHZv
aWQgcmVzdW1lQW5pbWF0aW9ucygpOworICAgIGJvb2wgc3VzcGVuZGVkKCkgY29uc3QgICAgICB7
IHJldHVybiBtX3N1c3BlbmRlZDsgfQorICAgIAorICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFu
aW1hdGlvbnMoaW50IHByb3BlcnR5KTsKKyAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5JbXBsaWNp
dEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKKyAgICAKKyAgICB2b2lkIHN0eWxlQXZhaWxhYmxl
KCk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29u
c3Q7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3YWl0
aW5nKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSk7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEltcGxp
Y2l0QW5pbWF0aW9uKj4gQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDsKKyAgICAKKyAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwICAgbV90cmFuc2l0aW9uczsKKyAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zdXNwZW5kZWQ7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAg
ICAgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnM7Cit9OworCitjbGFzcyBBbmltYXRpb25CYXNl
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBBbmltYXRpb25CYXNlKGNvbnN0
IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRl
QW5pbWF0aW9uKiBjb21wQW5pbSk7ICAgIAorICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVf
QVZBSUxBQkxFKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZh
aWxhYmxlKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgIHsg
cmV0dXJuIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOyB9CisgICAgCisgICAgdm9pZCBjYW5jZWxU
aW1lcnMoKQorICAgIHsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLmNhbmNlbFRp
bWVyKCk7CisgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLmNhbmNlbFRpbWVyKCk7
CisgICAgfQorICAgIAorICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5zaXRpb25zIGdvIHRocm91
Z2ggdGhlIHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RBUlRFRCBzdGF0ZQorICAg
IC8vIHRoZSBhbmltYXRpb24gaXMgc3RhcnRlZC4gVGhpcyBtYXkgb3IgbWF5IG5vdCByZXF1aXJl
IGRlZmVycmVkIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdG9yLgorICAgIC8vIElmIHNvLCB3ZSBz
dGF5IGluIHRoaXMgc3RhdGUgdW50aWwgdGhhdCByZXNwb25zZSBpcyByZWNlaXZlZCAoYW5kIGl0
IHJldHVybnMgdGhlIHN0YXJ0IHRpbWUpLgorICAgIC8vIE90aGVyd2lzZSwgd2UgdXNlIHRoZSBj
dXJyZW50IHRpbWUgYXMgdGhlIHN0YXJ0IHRpbWUgYW5kIGdvIGltbWVkaWF0ZWx5IHRvIHRoZSBM
T09QSU5HIG9yCisgICAgLy8gRU5ESU5HIHN0YXRlLgorICAgIGVudW0gQW5pbVN0YXRlIHsgCisg
ICAgICAgIFNUQVRFX05FVywgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3Qg
Y3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBydW5uaW5nIHlldAorICAgICAgICBTVEFURV9TVEFSVF9X
QUlUX1RJTUVSLCAgICAgICAgIC8vIHN0YXJ0IHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZp
cmUKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9BVkFJTEFCTEUsICAgLy8gd2FpdGlu
ZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFuaW1hdGlvbnMKKyAgICAgICAgU1RB
VEVfU1RBUlRfV0FJVF9SRVNQT05TRSwgICAgICAvLyBhbmltYXRpb24gc3RhcnRlZCwgd2FpdGlu
ZyBmb3IgcmVzcG9uc2UKKyAgICAgICAgU1RBVEVfTE9PUElORywgICAgICAgICAgICAgICAgICAv
LyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGxvb3AgdGltZXIgcnVubmlu
Zywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9FTkRJTkcsICAgICAgICAgICAgICAg
ICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1
bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAgU1RBVEVfUEFVU0VEX1dBSVRfVElNRVIs
ICAgICAgICAvLyBhbmltYXRpb24gaW4gcGF1c2UgbW9kZSB3aGVuIGFuaW1hdGlvbiBzdGFydGVk
CisgICAgICAgIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFLCAgICAgLy8gYW5pbWF0aW9uIHBh
dXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCisgICAgICAgIFNUQVRFX1BBVVNFRF9SVU4sICAg
ICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIExPT1BJTkcgb3IgRU5ESU5H
IHN0YXRlCisgICAgICAgIFNUQVRFX0RPTkUgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIHRp
bWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5kIHJlbW92ZWQKKyAgICB9OworICAgIAor
ICAgIGVudW0gQW5pbVN0YXRlSW5wdXQgeworICAgICAgICBTVEFURV9JTlBVVF9NQUtFX05FVywg
ICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3IGZyb20gYW55IHN0YXRlCisgICAgICAgIFNU
QVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3Rh
cnQKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04sICAvLyBmb3JjZSBhIHJl
c3RhcnQgZnJvbSBhbnkgc3RhdGUKKyAgICAgICAgU1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklS
RUQsICAvLyBzdGFydCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9TVFlMRV9BVkFJ
TEFCTEUsICAgICAgICAvLyBzdHlsZSBpcyBzZXR1cCwgcmVhZHkgdG8gc3RhcnQgYW5pbWF0aW5n
CisgICAgICAgIFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCAgICAgLy8gbV9zdGFydFRpbWUg
d2FzIHNldAorICAgICAgICBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVELCAgIC8vIGxvb3Ag
dGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVELCAgICAvLyBl
bmQgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5QVVRfUEFVU0VfT1ZFUlJJREUsICAgICAv
LyBwYXVzZSBhbiBhbmltYXRpb24gZHVlIHRvIG92ZXJyaWRlCisgICAgICAgIFNUQVRFX0lOUFVU
X1JFU1VNRV9PVkVSUklERSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9uCisg
ICAgICAgIFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORywgLy8gcGxheSBzdGF0ZSBwYXVz
ZWQgLT4gcnVubmluZworICAgICAgICBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCwgIC8v
IHBsYXkgc3RhdGUgcnVubmluZyAtPiBwYXVzZWQKKyAgICAgICAgU1RBVEVfSU5QVVRfRU5EX0FO
SU1BVElPTiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkgc3RhdGUKKyAgICB9OworICAg
IAorICAgIC8vIENhbGxlZCB3aGVuIGFuaW1hdGlvbiBpcyBpbiBORVcgc3RhdGUgdG8gc3RhcnQg
YW5pbWF0aW9uCisgICAgdm9pZCB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5w
dXQsIGRvdWJsZSBwYXJhbSk7CisgICAgCisgICAgLy8gQW5pbWF0aW9uIGhhcyBhY3R1YWxseSBz
dGFydGVkLCBhdCBwYXNzZWQgdGltZQorICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFjayBhbmQgaXMg
b25seSByZWNlaXZlZCB3aGVuIFJlbmRlck9iamVjdDo6c3RhcnRBbmltYXRpb24oKSBvciBSZW5k
ZXJPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbigpIAorICAgIC8vIHJldHVybnMgdHJ1ZS4gSWYgUmVu
ZGVyT2JqZWN0OjoKKyAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZShkb3VibGUgc3Rh
cnRUaW1lKTsKKyAgICAKKyAgICAvLyBDYWxsZWQgdG8gY2hhbmdlIHRvIG9yIGZyb20gcGF1c2Vk
IHN0YXRlCisgICAgdm9pZCB1cGRhdGVQbGF5U3RhdGUoYm9vbCBydW5uaW5nKTsKKyAgICBib29s
IHBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQorICAgIAor
ICAgIGJvb2wgd2FpdGluZ1RvU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBT
VEFURV9ORVcgfHwgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9USU1FUjsgfQorICAg
IGJvb2wgcHJlYWN0aXZlKCkgY29uc3QKKyAgICB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFU
RV9ORVcgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1RJ
TUVSIHx8CisgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlM
RV9BVkFJTEFCTEUgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9X
QUlUX1JFU1BPTlNFOworICAgIH0KKyAgICBib29sIHBvc3RhY3RpdmUoKSBjb25zdCB7IHJldHVy
biBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ET05FOyB9CisgICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7
IHJldHVybiAhcG9zdGFjdGl2ZSgpICYmICFwcmVhY3RpdmUoKTsgfQorICAgIGJvb2wgcnVubmlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc25ldygpICYmICFwb3N0YWN0aXZlKCk7IH0KKyAgICBib29s
IHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lID49IDA7IH0KKyAgICBib29sIGlz
bmV3KCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXOyB9CisgICAgYm9v
bCB3YWl0aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RB
VEVfU1RBUlRfV0FJVF9SRVNQT05TRTsgfQorICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlM
RV9BVkFJTEFCTEU7IH0KKyAgICBib29sIHdhaXRpbmdGb3JFbmRFdmVudCgpIGNvbnN0ICB7IHJl
dHVybiBtX3dhaXRpbmdGb3JFbmRFdmVudDsgfQorICAgIAorICAgIC8vICJhbmltYXRpbmciIG1l
YW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyBhIHRpbWVyIHRvIGtl
ZXAgZmlyaW5nCisgICAgLy8gKGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCisgICAgdm9pZCBz
ZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZyA9IHRydWUpIHsgbV9hbmltYXRpbmcgPSBpbkFu
aW1hdGluZzsgfQorICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
bmc7IH0KKyAgICAKKyAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zm
c2V0KSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUs
IFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20gPSAwLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgdm9pZCBh
bmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgdm9pZCBhbmltYXRpb25FdmVudERpc3BhdGNoZXJG
aXJlZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9w
ZXJ0eSwgYm9vbCByZXNldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKTsKKyAg
ICAKKyAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIGFuaW0pIGNvbnN0
IHsgcmV0dXJuIG1fYW5pbWF0aW9uLT5hbmltYXRpb25zTWF0Y2goYW5pbSk7IH0KKyAgICAKKyAg
ICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW0pIHsgbV9hbmltYXRpb24g
PSBjb25zdF9jYXN0PEFuaW1hdGlvbio+KGFuaW0pOyB9CisgICAgCisgICAgLy8gUmV0dXJuIHRy
dWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3aWxsIG9ubHkgYmUgdGhl
IGNhc2UgZm9yCisgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBpcyB1c2VkIHRvIGRldGVy
bWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKKyAgICAvLyBzZXQgdGhlIHN0YXJ0
IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3aWxsIHByb2JhYmx5IG5v
dCBnZXQKKyAgICAvLyBiYWNrIHRoZSBTVEFSVF9USU1FIGV2ZW50LgorICAgIHZpcnR1YWwgYm9v
bCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICAvLyBEb2Vz
IHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/Cisg
ICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoIXdhaXRpbmdUb1N0YXJ0KCkgJiYgIXBvc3Rh
Y3RpdmUoKSkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KTsKKyAgICB9CisgICAgICAgIAor
cHJvdGVjdGVkOgorICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JFdmVudERpc3BhdGNoKCkKKyAgICB7
CisgICAgICAgIGlmIChtX29iamVjdC0+bm9kZSgpICYmIG1fb2JqZWN0LT5ub2RlKCktPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9v
YmplY3QtPm5vZGUoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9CisgICAgCisgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wb3NpdGVBbmltYXRpb24oKSB7IHJldHVybiBtX2NvbXBBbmltOyB9CisgICAgCisgICAg
Ly8gVGhlc2UgYXJlIGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNv
IHN1YmNsYXNzZXMgY2FuIGRvIGFueSBleHRyYSB3b3JrCisgICAgdmlydHVhbCB2b2lkIG9uQW5p
bWF0aW9uU3RhcnQoZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25B
bmltYXRpb25JdGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpIHsgfQorICAgIAorICAgIHZv
aWQgcHJpbWVFdmVudFRpbWVycygpOworICAgIAorcHJvdGVjdGVkOgorICAgIEFuaW1TdGF0ZSBt
X2FuaW1TdGF0ZTsKICAgICBpbnQgbV9pdGVyYXRpb247CiAgICAgCi0gICAgYm9vbCBtX2Zpbmlz
aGVkOyAgICAKKyAgICBib29sIG1fYW5pbWF0aW5nOyAgICAgICAvLyB0cmFuc2l0aW9uL2FuaW1h
dGlvbiByZXF1aXJlcyBjb250aW51YWwgdGltZXIgZmlyaW5nCisgICAgYm9vbCBtX3dhaXRlZEZv
clJlc3BvbnNlOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICBib29sIG1fcGF1c2VkOwog
ICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBSZW5kZXJPYmplY3QqICAgbV9vYmplY3Q7CiAg
ICAgCi0gICAgYm9vbCBtX3N0YWxlOworICAgIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2sgbV9hbmlt
YXRpb25UaW1lckNhbGxiYWNrOworICAgIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlciBtX2FuaW1h
dGlvbkV2ZW50RGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcEFuaW07CisgICAgYm9vbCBtX3dhaXRpbmdG
b3JFbmRFdmVudDsKIH07CiAKLWNsYXNzIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1h
dGlvbkJhc2UgewogcHVibGljOgotICAgIH5Db21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbigpIHsg
ZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7IH0KLQotICAgIFJlbmRlclN0eWxlKiBhbmlt
YXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSk7Ci0KLSAgICBib29sIGFuaW1hdGluZygpIGNvbnN0OwotCi0gICAgdm9p
ZCByZXNldChSZW5kZXJPYmplY3QqKTsKKyAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0pCisgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVy
LCBjb21wQW5pbSkKKyAgICAsIG1fcHJvcGVydHkodHJhbnNpdGlvbi0+cHJvcGVydHkoKSkKKyAg
ICAsIG1fb3ZlcnJpZGRlbihmYWxzZSkKKyAgICAsIG1fZnJvbVN0eWxlKDApCisgICAgLCBtX3Rv
U3R5bGUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0
aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9mcm9tU3R5bGUgJiYgIW1fdG9TdHlsZSk7
CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGFuIGVuZCBldmVu
dCwgd2UgbmVlZCB0byBmaW5pc2ggdGhlIGFuaW1hdGlvbiB0byBtYWtlIHN1cmUgbm8gb2xkCisg
ICAgICAgIC8vIGFuaW1hdGlvbnMgc3RpY2sgYXJvdW5kIGluIHRoZSBsb3dlciBsZXZlbHMKKyAg
ICAgICAgaWYgKHdhaXRpbmdGb3JFbmRFdmVudCgpICYmIG1fb2JqZWN0KQorICAgICAgICAgICAg
QVNTRVJUKDApOworICAgICAgICAKKyAgICAgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0
ZWFkIG9mIGluIHRoZSBiYXNlIGNsYXNzIHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBj
YWxsZWQKKyAgICAgICAgaWYgKCFwb3N0YWN0aXZlKCkpCisgICAgICAgICAgICB1cGRhdGVTdGF0
ZU1hY2hpbmUoU1RBVEVfSU5QVVRfRU5EX0FOSU1BVElPTiwgLTEpOyAgICAgCisgICAgfQorICAg
IAorICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUp
OworICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbSA9IDAsIGNvbnN0IFJlbmRlclN0eWxlKiB0byA9IDApOworICAgIAor
ICAgIHZvaWQgc2V0T3ZlcnJpZGRlbihib29sIGIpOworICAgIHZpcnR1YWwgYm9vbCBvdmVycmlk
ZGVuKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlkZGVuOyB9CisgICAgCisgICAgdmlydHVhbCBi
b29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAg
dmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAor
ICAgIGJvb2wgaGFzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb21TdHlsZSAmJiBtX3RvU3R5
bGU7IH0KKyAgICAKKyAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlFcXVhbChpbnQgcHJvcCwgUmVu
ZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKIAorICAgIHZvaWQgYmxlbmRQcm9wZXJ0eVZhbHVlSW5T
dHlsZShpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSk7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVu
ZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5k
b2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOworICAgIH0KKyAgICAK
KyAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBpbkV2ZW50
VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpOworICAgIAogcHJpdmF0ZToKLSAgICBIYXNoTWFw
PGludCwgSW1wbGljaXRBbmltYXRpb24qPiBtX2FuaW1hdGlvbnM7CisgICAgaW50IG1fcHJvcGVy
dHk7CisgICAgYm9vbCBtX292ZXJyaWRkZW47CisgICAgCisgICAgLy8gVGhlIHR3byBzdHlsZXMg
dGhhdCB3ZSBhcmUgYmxlbmRpbmcuCisgICAgUmVuZGVyU3R5bGUqIG1fZnJvbVN0eWxlOworICAg
IFJlbmRlclN0eWxlKiBtX3RvU3R5bGU7CiB9OwogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGlj
aXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbikKLTogbV9mcm9tU3R5bGUo
MCkKLSwgbV90b1N0eWxlKDApCi0sIG1fcHJvcGVydHkodHJhbnNpdGlvbi0+cHJvcGVydHkoKSkK
LSwgbV9mdW5jdGlvbih0cmFuc2l0aW9uLT50aW1pbmdGdW5jdGlvbigpKQotLCBtX2R1cmF0aW9u
KHRyYW5zaXRpb24tPmR1cmF0aW9uKCkgLyAxMDAwLjApCi0sIG1fcmVwZWF0Q291bnQodHJhbnNp
dGlvbi0+cmVwZWF0Q291bnQoKSkKLSwgbV9pdGVyYXRpb24oMCkKLSwgbV9maW5pc2hlZChmYWxz
ZSkKLSwgbV9zdGFydFRpbWUoY3VycmVudFRpbWUoKSkKLSwgbV9wYXVzZWQoZmFsc2UpCi0sIG1f
cGF1c2VUaW1lKG1fc3RhcnRUaW1lKQotLCBtX3N0YWxlKGZhbHNlKQordm9pZCBBbmltYXRpb25U
aW1lckNhbGxiYWNrOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKQogewor
ICAgIG1fYW5pbS0+YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKG1fZXZlbnRUeXBlLCBtX2Vs
YXBzZWRUaW1lKTsKIH0KIAotSW1wbGljaXRBbmltYXRpb246On5JbXBsaWNpdEFuaW1hdGlvbigp
Cit2b2lkIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcjo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRp
b25UaW1lckJhc2U+KikKIHsKLSAgICBBU1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUp
OworICAgIG1fYW5pbS0+YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQobV9lbGVtZW50Lmdl
dCgpLCBtX25hbWUsIG1fcHJvcGVydHksIG1fcmVzZXQsIG1fZXZlbnRUeXBlLCBtX2VsYXBzZWRU
aW1lKTsKIH0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgUmVuZGVyU3R5bGUqIGZyb20sIFJlbmRlclN0eWxlKiB0bykKKyAgICAKK0FuaW1h
dGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltKQorOiBtX2Fu
aW1TdGF0ZShTVEFURV9ORVcpCissIG1faXRlcmF0aW9uKDApCissIG1fYW5pbWF0aW5nKGZhbHNl
KQorLCBtX3dhaXRlZEZvclJlc3BvbnNlKGZhbHNlKQorLCBtX3N0YXJ0VGltZSgwKQorLCBtX3Bh
dXNlVGltZSgtMSkKKywgbV9vYmplY3QocmVuZGVyZXIpCissIG1fYW5pbWF0aW9uVGltZXJDYWxs
YmFjayhjb25zdF9jYXN0PEFuaW1hdGlvbkJhc2UqPih0aGlzKSkKKywgbV9hbmltYXRpb25FdmVu
dERpc3BhdGNoZXIoY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0
aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4odHJhbnNpdGlvbikpCissIG1fY29tcEFuaW0oY29t
cEFuaW0pCissIG1fd2FpdGluZ0ZvckVuZEV2ZW50KGZhbHNlKQogewotICAgIHNldEZpbmlzaGVk
KGZhbHNlKTsKK30KIAotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUt
PmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBpZiAobV90b1N0eWxlKQotICAg
ICAgICBtX3RvU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBtX2Zy
b21TdHlsZSA9IGZyb207Ci0gICAgaWYgKG1fZnJvbVN0eWxlKQotICAgICAgICBtX2Zyb21TdHls
ZS0+cmVmKCk7Ci0gICAgbV90b1N0eWxlID0gdG87Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAg
ICAgbV90b1N0eWxlLT5yZWYoKTsKLSAgICBpZiAoZnJvbSB8fCB0bykKLSAgICAgICAgbV9zdGFy
dFRpbWUgPSBjdXJyZW50VGltZSgpOwordm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKK3sKKyAgICAvLyBpZiB3
ZSBnZXQgYSBSRVNUQVJUIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRsZXNz
IG9mIHN0YXRlCisgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX01BS0VfTkVXKSB7CisgICAg
ICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRSkK
KyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxz
ZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTkVXOworICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7CisgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgIG1fd2FpdGVkRm9yUmVz
cG9uc2UgPSBmYWxzZTsKKyAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9SRVNUQVJUX0FO
SU1BVElPTikgeworICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgaWYgKG1fYW5pbVN0
YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFKQorICAgICAgICAgICAgbV9j
b21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGZhbHNlKTsKKyAgICAgICAgbV9h
bmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAg
bV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsKICAgICAgICAg
Ci0gICAgLy8gSWYgd2UgYXJlIHN0YWxlLCBhdHRlbXB0IHRvIHVwZGF0ZSB0byBhIG5ldyB0cmFu
c2l0aW9uIHVzaW5nIHRoZSBuZXcgfHRvfCBzdHlsZS4gIElmIHdlIGFyZSBhYmxlIHRvIGZpbmQg
YSBuZXcgdHJhbnNpdGlvbiwKLSAgICAvLyB0aGVuIHdlIHdpbGwgdW5tYXJrIG91cnNlbHZlcyBm
b3IgZGVhdGguCi0gICAgaWYgKHN0YWxlKCkgJiYgZnJvbSAmJiB0bykgewotICAgICAgICAgZm9y
IChjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gdG8tPnRyYW5zaXRpb25zKCk7IHRyYW5z
aXRpb247IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChtX3Byb3BlcnR5ICE9IHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpbnQgZHVyYXRpb24gPSB0cmFuc2l0aW9uLT5kdXJhdGlv
bigpOwotICAgICAgICAgICAgaW50IHJlcGVhdENvdW50ID0gdHJhbnNpdGlvbi0+cmVwZWF0Q291
bnQoKTsKLSAgICAgICAgICAgIGlmIChkdXJhdGlvbiAmJiByZXBlYXRDb3VudCkgewotICAgICAg
ICAgICAgICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbiAvIDEwMDAuMDsKLSAgICAgICAgICAgICAg
ICBtX3JlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7Ci0gICAgICAgICAgICAgICAgbV9zdGFsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBp
ZiAoIXBhdXNlZCgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVU
X1NUQVJUX0FOSU1BVElPTiwgLTEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2Ug
aWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9BTklNQVRJT04pIHsKKyAgICAgICAgY2FuY2Vs
VGltZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NU
WUxFX0FWQUlMQUJMRSkKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHls
ZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfRE9ORTsKKyAg
ICAgICAgZW5kQW5pbWF0aW9uKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVs
c2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFKSB7CisgICAgICAgIGlm
IChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFKSB7CisgICAgICAgICAg
ICAvLyBJZiB3ZSBhcmUgaW4gdGhlIFdBSVRfUkVTUE9OU0Ugc3RhdGUsIHRoZSBhbmltYXRpb24g
d2lsbCBnZXQgY2FuY2VsZWQgYmVmb3JlIAorICAgICAgICAgICAgLy8gd2UgZ2V0IGEgcmVzcG9u
c2UsIHNvIG1vdmUgdG8gdGhlIG5leHQgc3RhdGUKKyAgICAgICAgICAgIGVuZEFuaW1hdGlvbihm
YWxzZSk7CisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRf
VElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZWxzZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFKSB7
CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9MT09QSU5HIHx8IG1fYW5pbVN0YXRl
ID09IFNUQVRFX0VORElORykgeworICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgor
ICAgICAgICAgICAgc3RhcnRBbmltYXRpb24obV9zdGFydFRpbWUpOwogICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIGEgbmV3
IHRyYW5zaXRpb24sIHRoZW4gbWFyayBvdXJzZWx2ZXMgYXMgYmVpbmcgZmluaXNoZWQgc28gdGhh
dCB3ZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICBpZiAoc3RhbGUoKSkKLSAgICAgICAgc2V0RmluaXNo
ZWQodHJ1ZSk7CisgICAgLy8gZXhlY3V0ZSBzdGF0ZSBtYWNoaW5lCisgICAgc3dpdGNoKG1fYW5p
bVN0YXRlKSB7CisgICAgICAgIGNhc2UgU1RBVEVfTkVXOgorICAgICAgICAgICAgQVNTRVJUKGlu
cHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiB8fCBpbnB1dCA9PSBTVEFURV9JTlBV
VF9QTEFZX1NUQVRFX1JVTk5JTkcgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9Q
QVVTRUQpOworICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1B
VElPTiB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcpIHsKKyAgICAg
ICAgICAgICAgICAvLyBTZXQgdGhlIHN0YXJ0IHRpbWVyIHRvIHRoZSBpbml0aWFsIGRlbGF5ICgw
IGlmIG5vIGRlbGF5KQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfVElNRVI7
CisgICAgICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIobV9h
bmltYXRpb24tPmRlbGF5KCksIEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQs
IG1fYW5pbWF0aW9uLT5kZWxheSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNUQVRFX1NUQVJUX1dBSVRfVElNRVI6CisgICAgICAgICAgICBBU1NF
UlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklSRUQgfHwgaW5wdXQgPT0gU1RB
VEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklSRUQpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIg
aGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRv
IHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9TVEFSVF9XQUlUX1NUWUxFX0FWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICBtX2NvbXBB
bmltLT5zZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUodHJ1ZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhl
IGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQo
KSk7CisgICAgICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1hdGlvbigpLT5zdGFydFVwZGF0ZVJl
bmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVChydW5uaW5nKCkpOworICAgICAgICAgICAgICAgIC8vIFdl
J3JlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlIGFuZCB3ZSBnb3QgYSBwYXVz
ZS4gQ2FuY2VsIHRoZSB0aW1lciwgcGF1c2UgYW5kIHdhaXQKKyAgICAgICAgICAgICAgICBtX3Bh
dXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7
CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9QQVVTRURfV0FJVF9USU1FUjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1NU
QVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxFOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNU
QVRFX0lOUFVUX1NUWUxFX0FWQUlMQUJMRSB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NU
QVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdh
aXRpbmdGb3JTdHlsZUF2YWlsYWJsZShmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVFlMRV9BVkFJTEFCTEUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFy
dCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAgICAg
ICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gU2VuZCBzdGFydCBldmVudCwgaWYgbmVlZGVkCisg
ICAgICAgICAgICAgICAgb25BbmltYXRpb25TdGFydCgwLjBmKTsgLy8gdGhlIGVsYXBzZWRUaW1l
IGlzIGFsd2F5cyAwIGhlcmUKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBT
dGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSB8fCAh
c3RhcnRBbmltYXRpb24oMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdv
aW5nIHRvIGdldCBhIHN0YXJ0VGltZSBjYWxsYmFjaywgc28gZmlyZSB0aGUgc3RhcnQgdGltZSBo
ZXJlCisgICAgICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9S
RVNQT05TRTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lO
UFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3Bv
bnNlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChydW5uaW5nKCkpOworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRp
bmcgZm9yIHRoZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzdHlsZSBoYXMgYmVlbiBzZXR1cC4g
SWYgd2UncmUgYXNrZWQgdG8gd2FpdAorICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQs
IHRoZSBzdHlsZSBtdXN0IGhhdmUgYmVlbiBwcm9jZXNzZWQsIHNvIHdlIGNhbiBkZWFsIHdpdGgg
dGhpcyBsaWtlIHdlIHdvdWxkCisgICAgICAgICAgICAgICAgLy8gZm9yIFdBSVRfUkVTUE9OU0Us
IGV4Y2VwdCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZG8gYW4gZW5kQW5pbWF0aW9uKCkuCisgICAg
ICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAwOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRl
ID0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U6CisgICAgICAg
ICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQgfHwgaW5wdXQg
PT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBh
IHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxyZWFkeSBzZXQK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGFydFRpbWUgPD0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGFydFRpbWUgPSBwYXJhbTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5kIG9yIGxvb3AgZXZlbnQgbmVlZHMgdG8gZmlyZQorICAg
ICAgICAgICAgICAgIHByaW1lRXZlbnRUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0
aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAg
ICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5n
RGlzcGF0Y2hlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgd2FpdGluZyBmb3IgYSBzdGFydCByZXNw
b25zZS4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQuIFdoZW4gCisgICAgICAgICAgICAg
ICAgLy8gd2UgdW5wYXVzZSwgd2Ugd2lsbCBhY3QgYXMgdGhvdWdoIHRoZSBzdGFydCB0aW1lciBq
dXN0IGZpcmVkCisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAwOworICAgICAgICAgICAg
ICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9QQVVTRURfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNUQVRFX0xPT1BJTkc6CisgICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCB8fCBpbnB1dCA9PSBTVEFURV9JTlBV
VF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIExvb3AgdGltZXIgZmlyZWQsIGxv
b3AgYWdhaW4gb3IgZW5kLgorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uKHBh
cmFtKTsKKyAgICAgICAgICAgICAgICBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3
aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdAorICAgICAgICAgICAg
ICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxU
aW1lcnMoKTsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAg
ICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1JVTjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX0VORElORzoKKyAgICAgICAgICAg
IEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfVElNRVJfRklSRUQgfHwgaW5wdXQgPT0g
U1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBm
aXJlZCwgZmluaXNoIHVwCisgICAgICAgICAgICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRp
b25zKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyZSBvZmYgYW5v
dGhlciBzdHlsZSBjaGFuZ2Ugc28gd2UgY2FuIHNldCB0aGUgZmluYWwgdmFsdWUKKyAgICAgICAg
ICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAg
IG1fYW5pbVN0YXRlID0gU1RBVEVfRE9ORTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5p
bWF0aW9uKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgICAgICAgICAg
ICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIHdoZW4gd2UndmUgYmVlbiBjYWxsZWQg
ZnJvbSB0aW1lckZpcmVkKCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUg
YW5pbWF0aW9uIGFuZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICAgICAgICAg
IGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFU
RV9QQVVTRURfUlVOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gfHRoaXN8IG1heSBi
ZSBkZWxldGVkIGhlcmUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1BB
VVNFRF9XQUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVU
X1BMQVlfU1RBVEVfUlVOTklORyk7CisgICAgICAgICAgICBBU1NFUlQoIXJ1bm5pbmcoKSk7Cisg
ICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVzCisgICAgICAgICAgICBtX3N0YXJ0VGltZSAr
PSBjdXJyZW50VGltZSgpIC0gbV9wYXVzZVRpbWU7CisgICAgICAgICAgICBtX3BhdXNlVGltZSA9
IC0xOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRo
ZSBzdGFydCB0aW1lciB0byBmaXJlLCBnbyBiYWNrIGFuZCB3YWl0IGFnYWluCisgICAgICAgICAg
ICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGlu
ZShTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0U6CisgICAgICAgIGNhc2UgU1RB
VEVfUEFVU0VEX1JVTjoKKyAgICAgICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHR3byBjYXNlcyB0
aGUgc2FtZS4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0LCB3aGVuIHdlIGFyZSBpbiB0aGUg
V0FJVF9SRVNQT05TRQorICAgICAgICAgICAgLy8gc3RhdGUsIHdlIGRvbid0IHlldCBoYXZlIGEg
dmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5kIDAgdG8gc3RhcnRBbmltYXRpb24uIFdoZW4gdGhl
IFNUQVJUX1RJTUUKKyAgICAgICAgICAgIC8vIGV2ZW50IGNvbWVzIGluIHFuZCB3ZSB3ZXJlIGlu
IHRoZSBSVU4gc3RhdGUsIHdlIHdpbGwgbm90aWNlIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHNldCB0
aGUgCisgICAgICAgICAgICAvLyBzdGFydFRpbWUgYW5kIHdpbGwgaWdub3JlIGl0LgorICAgICAg
ICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXJ1bm5pbmcoKSk7CisgICAgICAgICAgICAvLyBVcGRhdGUgdGhl
IHRpbWVzCisgICAgICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfUEFVU0VEX1JVTikK
KyAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSArPSBjdXJyZW50VGltZSgpIC0gbV9wYXVzZVRp
bWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwor
ICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gV2Ugd2VyZSB3YWl0aW5nIGZvciBhIGJlZ2luIHRpbWUgcmVzcG9uc2UgZnJvbSB0aGUgYW5p
bWF0aW9uLCBnbyBiYWNrIGFuZCB3YWl0IGFnYWluCisgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9
IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkgfHwgIXN0
YXJ0QW5pbWF0aW9uKG1fc3RhcnRUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG5v
dCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ssIHNvIGZpcmUgdGhlIHN0YXJ0IHRp
bWUgaGVyZQorICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9T
VEFSVF9USU1FX1NFVCwgY3VycmVudFRpbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JSZXNwb25zZSA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9ET05FOgorICAgICAgICAgICAgLy8g
V2UncmUgZG9uZS4gU3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHdlIGFyZSBkZWxldGVkCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gfHRoaXN8IG1heSBiZSBkZWxldGVkIGhlcmUg
aWYgd2UgY2FtZSBvdXQgb2YgU1RBVEVfRU5ESU5HIHdoZW4gd2UndmUgYmVlbiBjYWxsZWQgZnJv
bSB0aW1lckZpcmVkKCkKK30KKyAgICAKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uVGlt
ZXJDYWxsYmFja0ZpcmVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxh
cHNlZFRpbWUpCit7CisgICAgQVNTRVJUKG1fb2JqZWN0LT5kb2N1bWVudCgpICYmICFtX29iamVj
dC0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSk7CisgICAgCisgICAgLy8gRklYTUU6IHVzZSBh
biBlbnVtCisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25T
dGFydEV2ZW50KQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRf
VElNRVJfRklSRUQsIGVsYXBzZWRUaW1lKTsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRXZl
bnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQpCisgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2
ZW50KSB7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9FTkRfVElNRVJf
RklSRUQsIGVsYXBzZWRUaW1lKTsKKyAgICAgICAgLy8gfHRoaXN8IG1heSBiZSBkZWxldGVkIGhl
cmUKKyAgICB9CiB9CiAKLWRvdWJsZSBJbXBsaWNpdEFuaW1hdGlvbjo6cHJvZ3Jlc3MoKSBjb25z
dAordm9pZCBBbmltYXRpb25CYXNlOjphbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJlZChFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9wZXJ0eSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
ZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCiB7
Ci0gICAgZG91YmxlIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUoKSAtIG1fc3RhcnRUaW1lOwor
ICAgIG1fd2FpdGluZ0ZvckVuZEV2ZW50ID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fZmluaXNo
ZWQgfHwgIW1fZHVyYXRpb24gfHwgZWxhcHNlZFRpbWUgPj0gbV9kdXJhdGlvbikKLSAgICAgICAg
cmV0dXJuIDEuMDsKKyAgICAvLyBLZWVwIGFuIGF0b21pYyBzdHJpbmcgb24gdGhlIHN0YWNrIHRv
IGtlZXAgaXQgYWxpdmUgdW50aWwgd2UgZXhpdCB0aGlzIG1ldGhvZAorICAgIC8vIChzaW5jZSBk
aXNwYXRjaGluZyB0aGUgZXZlbnQgbWF5IGNhdXNlIHx0aGlzfCB0byBiZSBkZWxldGVkLCB0aGVy
ZWZvcmUgcmVtb3ZpbmcKKyAgICAvLyB0aGUgbGFzdCByZWYgdG8gdGhlIGF0b21pYyBzdHJpbmcp
LgorICAgIEF0b21pY1N0cmluZyBhbmltTmFtZShuYW1lKTsKKyAgICBBdG9taWNTdHJpbmcgYW5p
bUV2ZW50VHlwZShldmVudFR5cGUpOworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBzdGlj
a3MgYXJvdW5kIHRvbworICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50UmV0YWluZXIoZWxlbWVu
dCk7CisgICAgCisgICAgQVNTRVJUKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpICYm
ICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxheVN0
YXRlKGJvb2wgcnVuKQoreworICAgIGlmIChwYXVzZWQoKSA9PSBydW4gfHwgaXNuZXcoKSkKKyAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKHJ1biA/IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVO
TklORyA6IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VELCAtMSk7Cit9CiAKLSAgICBpZiAo
bV9mdW5jdGlvbi50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHJldHVy
biBlbGFwc2VkVGltZSAvIG1fZHVyYXRpb247Citkb3VibGUgQW5pbWF0aW9uQmFzZTo6cHJvZ3Jl
c3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0KSBjb25zdAoreworICAgIGlmIChwcmVhY3Rp
dmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZG91YmxlIGVsYXBzZWRUaW1lID0g
cnVubmluZygpID8gKGN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZSkgOiAobV9wYXVzZVRpbWUg
LSBtX3N0YXJ0VGltZSk7CisgICAgaWYgKHJ1bm5pbmcoKSAmJiBlbGFwc2VkVGltZSA8IDApCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIGRvdWJsZSBkdXIgPSBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKTsKKyAgICAKKyAgICBpZiAocG9zdGFjdGl2ZSgpIHx8ICFtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSB8fCBlbGFwc2VkVGltZSA+PSBkdXIpCisgICAgICAgIHJldHVybiAxLjA7CisgICAg
CisgICAgLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCB0aW1lLCB0YWtpbmcgaW50byBhY2NvdW50
IGRpcmVjdGlvbi4KKyAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0ZXJh
dGlvbnMsIHdlIGFzc3VtZSB0aGF0IHdlIHdvdWxkIGhhdmUgCisgICAgLy8gc2hvcnQgY2lyY3Vp
dGVkIGFib3ZlIGlmIHdlIHdlcmUgZG9uZQorICAgIGRvdWJsZSB0ID0gZWxhcHNlZFRpbWUgLyBt
X2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsKKyAgICBpbnQgaSA9IChpbnQpIHQ7CisgICAgdCAtPSBp
OworICAgIAorICAgIGlmIChzY2FsZSAhPSAxIHx8IG9mZnNldCAhPSAwKQorICAgICAgICB0ID0g
KHQgLSBvZmZzZXQpICogc2NhbGU7CisgICAgCisgICAgaWYgKG1fYW5pbWF0aW9uLT50aW1pbmdG
dW5jdGlvbigpLnR5cGUoKSA9PSBMaW5lYXJUaW1pbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJu
IHQ7CiAgICAgCiAgICAgLy8gQ3ViaWMgYmV6aWVyLgotICAgIHJldHVybiBzb2x2ZUN1YmljQmV6
aWVyRnVuY3Rpb24obV9mdW5jdGlvbi54MSgpLCBtX2Z1bmN0aW9uLnkxKCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jdGlvbi54MigpLCBtX2Z1bmN0aW9uLnky
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkVGltZSAvIG1f
ZHVyYXRpb24sIG1fZHVyYXRpb24pOworICAgIGRvdWJsZSB0dCA9IHNvbHZlQ3ViaWNCZXppZXJG
dW5jdGlvbihtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54MSgpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9u
KCkueTEoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5p
bWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLngyKCksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS55MigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LCBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSk7CisgICAgcmV0dXJuIHR0OworfQorCit2b2lkIEFuaW1hdGlvbkJhc2U6OnByaW1l
RXZlbnRUaW1lcnMoKQoreworICAgIC8vIERlY2lkZSB3aGVuIHRoZSBlbmQgb3IgbG9vcCBldmVu
dCBuZWVkcyB0byBmaXJlCisgICAgZG91YmxlIGN0ID0gY3VycmVudFRpbWUoKTsKKyAgICBjb25z
dCBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gY3QgLSBtX3N0YXJ0VGltZTsKKyAgICBBU1NFUlQo
ZWxhcHNlZER1cmF0aW9uID49IDApOworICAgIAorICAgIGRvdWJsZSB0b3RhbER1cmF0aW9uID0g
bV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IDA7Cisg
ICAgZG91YmxlIG5leHRJdGVyYXRpb25UaW1lID0gdG90YWxEdXJhdGlvbjsKKyAgICBpZiAodG90
YWxEdXJhdGlvbiA8IDAgfHwgZWxhcHNlZER1cmF0aW9uIDwgdG90YWxEdXJhdGlvbikgeworICAg
ICAgICBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNl
ZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIG5leHRJdGVyYXRp
b25UaW1lID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OworICAgIH0KKyAgICAKKyAg
ICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSAwIGR1cmF0aW9uTGVmdCwgaWYgd2UndmUg
Z290dGVuIHRoZSBldmVudCBsYXRlIGFuZCB3ZSBhcmUgYWxyZWFkeQorICAgIC8vIHBhc3QgdG90
YWxEdXJhdGlvbi4gSW4gdGhpcyBjYXNlIHdlIHN0aWxsIGZpcmUgYW4gZW5kIHRpbWVyIGJlZm9y
ZSBwcm9jZXNzaW5nIHRoZSBlbmQuIAorICAgIC8vIFRoaXMgZGVmZXJzIHRoZSBjYWxsIHRvIHNl
bmRBbmltYXRpb25FdmVudHMgdG8gYXZvaWQgcmUtZW50cmFudCBjYWxscyB0aGF0IGRlc3Ryb3kK
KyAgICAvLyB0aGUgUmVuZGVyT2JqZWN0LCBhbmQgdGhlcmVmb3JlIHx0aGlzfCBiZWZvcmUgd2Un
cmUgZG9uZSB3aXRoIGl0LgorICAgIGlmICh0b3RhbER1cmF0aW9uIDwgMCB8fCBuZXh0SXRlcmF0
aW9uVGltZSA8IHRvdGFsRHVyYXRpb24pIHsKKyAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUg
ZW5kIHlldCwgc2VuZCBhIGxvb3AgZXZlbnQKKyAgICAgICAgQVNTRVJUKG5leHRJdGVyYXRpb25U
aW1lID4gMCk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfTE9PUElORzsKKyAgICAgICAg
bV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBFdmVudE5h
bWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQsIHNlbmQgYW4g
ZW5kIGV2ZW50CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfRU5ESU5HOworICAgICAgICBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIEV2ZW50TmFt
ZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAgfQog
fQogCiBzdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMoaW50IGZyb20sIGludCB0bywgZG91Ymxl
IHByb2dyZXNzKQpAQCAtMjIzLDcgKzgyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSW50U2l6ZSBibGVu
ZEZ1bmMoY29uc3QgSW50U2l6ZSYgZnJvbSwgY29uc3QgSW50U2l6ZSYgdG8sIGRvdWJsZSBwCiBz
dGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJsZW5kRnVuYyhjb25zdCBTaGFkb3dEYXRhKiBmcm9t
LCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgQVNTRVJU
KGZyb20gJiYgdG8pOwotICAgIHJldHVybiBuZXcgU2hhZG93RGF0YShibGVuZEZ1bmMoZnJvbS0+
eCwgdG8tPngsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPnksIHRvLT55LCBwcm9ncmVzcyks
IGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJv
bS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gbmV3IFNoYWRvd0Rh
dGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT55
LCB0by0+eSwgcHJvZ3Jlc3MpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5j
KGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5jb2xvciwg
dG8tPmNvbG9yLCBwcm9ncmVzcykpOwogfQogCiBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJh
dGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0yMzcsNyArODQyLDgg
QEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBm
cm9tT3AgPSBpIDwgZnJvbVNpemUgPyBmcm9tW2ldLmdldCgpIDogMDsKICAgICAgICAgVHJhbnNm
b3JtT3BlcmF0aW9uKiB0b09wID0gaSA8IHRvU2l6ZSA/IHRvW2ldLmdldCgpIDogMDsKICAgICAg
ICAgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZGVkT3AgPSB0b09wID8gdG9PcC0+YmxlbmQoZnJv
bU9wLCBwcm9ncmVzcykgOiBmcm9tT3AtPmJsZW5kKDAsIHByb2dyZXNzLCB0cnVlKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOworICAgICAgICBpZiAoYmxlbmRlZE9wKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMjU0LDMxMSArODYwLDgyOSBAQCBzdGF0aWMgaW5saW5lIEVWaXNpYmlsaXR5
IGJsZW5kRnVuYyhFVmlzaWJpbGl0eSBmcm9tLCBFVmlzaWJpbGl0eSB0bywgZG91YmxlIHBybwog
ICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJU0lCTEUgOiAodG8gIT0gVklTSUJMRSA/IHRvIDog
ZnJvbSk7CiB9CiAKLSNkZWZpbmUgQkxFTkQocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpIFwKLSAgICBp
ZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+Z2V0dGVyKCkgIT0gdGFyZ2V0U3R5
bGUtPmdldHRlcigpKSB7XAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0
YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVy
bjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJv
cGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIGlmIChtX2Zyb21TdHlsZS0+Z2V0dGVyKCkgIT0g
bV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgICAgIHNldEZpbmlzaGVkKGZhbHNlKTsg
XAotICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0
YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUtPnNldHRlcihibGVuZEZ1
bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBtX3RvU3R5bGUtPmdldHRlcigpLCBwcm9ncmVzcygp
KSk7XAotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCkgXAotICAgICAgICAgICAg
ICAgIHJldHVybjsgXAotICAgICAgICB9XAotICAgIH1cCi0KLSNkZWZpbmUgQkxFTkRfTUFZQkVf
SU5WQUxJRF9DT0xPUihwcm9wLCBnZXR0ZXIsIHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5
ID09IHByb3AgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAhPSB0YXJnZXRTdHlsZS0+Z2V0dGVyKCkp
IHsgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7
IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgIH0g
XAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsIHx8IG1fcHJvcGVydHkgPT0gcHJv
cCkgeyBcCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IG1fZnJvbVN0eWxlLT5nZXR0ZXIoKTsg
XAotICAgICAgICBDb2xvciB0b0NvbG9yID0gbV90b1N0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAg
ICBpZiAoZnJvbUNvbG9yLmlzVmFsaWQoKSB8fCB0b0NvbG9yLmlzVmFsaWQoKSkgeyBcCi0gICAg
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpIFwKLSAgICAgICAgICAgICAgICBmcm9t
Q29sb3IgPSBtX2Zyb21TdHlsZS0+Y29sb3IoKTsgXAotICAgICAgICAgICAgaWYgKCF0b0NvbG9y
LmlzVmFsaWQoKSkgXAotICAgICAgICAgICAgICAgIHRvQ29sb3IgPSBtX3RvU3R5bGUtPmNvbG9y
KCk7IFwKLSAgICAgICAgICAgIGlmIChmcm9tQ29sb3IgIT0gdG9Db2xvcikge1wKLSAgICAgICAg
ICAgICAgICBzZXRGaW5pc2hlZChmYWxzZSk7IFwKLSAgICAgICAgICAgICAgICBpZiAoIWFuaW1h
dGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVu
ZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAg
ICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9D
b2xvciwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSA9PSBw
cm9wKSBcCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICAgICAgfVwKLSAg
ICAgICAgfVwKLSAgICB9XAotCi0jZGVmaW5lIEJMRU5EX1NIQURPVyhwcm9wLCBnZXR0ZXIsIHNl
dHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgKCFtX3RvU3R5bGUtPmdldHRl
cigpIHx8ICF0YXJnZXRTdHlsZS0+Z2V0dGVyKCkgfHwgKm1fdG9TdHlsZS0+Z2V0dGVyKCkgIT0g
KnRhcmdldFN0eWxlLT5nZXR0ZXIoKSkpIHsgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgaWYgKHN0YWxlKCkpIFwKLSAgICAg
ICAgICAgIHJldHVybjsgXAotICAgIH0gXAotICAgIGlmIChtX3Byb3BlcnR5ID09IGNBbmltYXRl
QWxsIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIGlmIChtX2Zyb21TdHlsZS0+
Z2V0dGVyKCkgJiYgbV90b1N0eWxlLT5nZXR0ZXIoKSAmJiAqbV9mcm9tU3R5bGUtPmdldHRlcigp
ICE9ICptX3RvU3R5bGUtPmdldHRlcigpKSB7XAotICAgICAgICAgICAgc2V0RmluaXNoZWQoZmFs
c2UpOyBcCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAg
ICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5
bGUoKnRhcmdldFN0eWxlKTsgXAotICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0dGVyKGJs
ZW5kRnVuYyhtX2Zyb21TdHlsZS0+Z2V0dGVyKCksIG1fdG9TdHlsZS0+Z2V0dGVyKCksIHByb2dy
ZXNzKCkpKTtcCi0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAgIH1cCi0gICAgfQotCi12b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24sIFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKQotewotICAgIC8v
IEZJWE1FOiBJZiB3ZSBoYXZlIG5vIHRyYW5zaXRpb24tcHJvcGVydHksIHRoZW4gdGhlIG9ubHkg
d2F5IHRvIHRlbGwgaWYgb3VyIGdvYWwgc3RhdGUgY2hhbmdlZCBpcyB0byBjaGVjawotICAgIC8v
IGV2ZXJ5IHNpbmdsZSBhbmltYXRhYmxlIHByb3BlcnR5LiAgRm9yIG5vdyB3ZSdsbCBqdXN0IGRp
ZmYgdGhlIHN0eWxlcyB0byBhc2sgdGhhdCBxdWVzdGlvbiwKLSAgICAvLyBidXQgd2Ugc2hvdWxk
IHJlYWxseSBleGNsdWRlIG5vbi1hbmltYXRhYmxlIHByb3BlcnRpZXMuCi0gICAgaWYgKCFtX3Rv
U3R5bGUgfHwgKG1fcHJvcGVydHkgPT0gY0FuaW1hdGVBbGwgJiYgdGFyZ2V0U3R5bGUtPmRpZmYo
bV90b1N0eWxlKSkpIHsKLSAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFy
Z2V0U3R5bGUpOwotICAgICAgICBpZiAoc3RhbGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogQmxvdyB1cCBzaG9ydGhhbmRzIHNvIHRoYXQgdGhleSBjYW4g
YmUgaG9ub3JlZC4KLSAgICBzZXRGaW5pc2hlZCh0cnVlKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eUxlZnQsIGxlZnQsIHNldExlZnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UmlnaHQsIHJpZ2h0
LCBzZXRSaWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlUb3AsIHRvcCwgc2V0VG9wKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBzZXRCb3R0b20pOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBzZXRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlIZWlnaHQsIGhlaWdodCwgc2V0SGVpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRXaWR0aCwgYm9yZGVyTGVmdFdpZHRoLCBzZXRCb3JkZXJMZWZ0V2lkdGgpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9yZGVyUmlnaHRXaWR0aCwgc2V0Qm9y
ZGVyUmlnaHRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9y
ZGVyVG9wV2lkdGgsIHNldEJvcmRlclRvcFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwgc2V0Qm9yZGVyQm90dG9tV2lkdGgp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgbWFyZ2luTGVmdCwgc2V0TWFyZ2lu
TGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgbWFyZ2luUmlnaHQsIHNl
dE1hcmdpblJpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU1hcmdpblRvcCwgbWFyZ2luVG9w
LCBzZXRNYXJnaW5Ub3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBtYXJn
aW5Cb3R0b20sIHNldE1hcmdpbkJvdHRvbSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5n
TGVmdCwgcGFkZGluZ0xlZnQsIHNldFBhZGRpbmdMZWZ0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eVBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0LCBzZXRQYWRkaW5nUmlnaHQpOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcGFkZGluZ1RvcCwgc2V0UGFkZGluZ1RvcCk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRkaW5nQm90dG9tLCBzZXRQYWRkaW5n
Qm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU9wYWNpdHksIG9wYWNpdHksIHNldE9wYWNp
dHkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLCBzZXRDb2xvcik7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJhY2tncm91bmRDb2xvciwgc2V0QmFj
a2dyb3VuZENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBjb2x1bW5SdWxlQ29sb3IsIHNldENvbHVtblJ1bGVDb2xv
cik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsIGNvbHVtblJ1
bGVXaWR0aCwgc2V0Q29sdW1uUnVsZVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkdhcCwgY29sdW1uR2FwLCBzZXRDb2x1bW5HYXApOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQ291bnQsIGNvbHVtbkNvdW50LCBzZXRDb2x1bW5Db3VudCk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgY29sdW1uV2lkdGgsIHNldENvbHVt
bldpZHRoKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHNldFRleHRTdHJva2VDb2xvcik7Ci0g
ICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3IsIHRleHRGaWxsQ29sb3IsIHNldFRleHRGaWxsQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGhvcml6b250YWxCb3JkZXJTcGFjaW5n
LCBzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZlcnRpY2FsQm9yZGVyU3BhY2luZywgc2V0VmVydGlj
YWxCb3JkZXJTcGFjaW5nKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIHNldEJvcmRlckxlZnRDb2xvcik7
Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29s
b3IsIGJvcmRlclJpZ2h0Q29sb3IsIHNldEJvcmRlclJpZ2h0Q29sb3IpOwotICAgIEJMRU5EX01B
WUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgYm9yZGVyVG9wQ29s
b3IsIHNldEJvcmRlclRvcENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBzZXRCb3JkZXJC
b3R0b21Db2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlaSW5kZXgsIHpJbmRleCwgc2V0Wklu
ZGV4KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIGxpbmVIZWlnaHQsIHNldExp
bmVIZWlnaHQpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlPdXRs
aW5lQ29sb3IsIG91dGxpbmVDb2xvciwgc2V0T3V0bGluZUNvbG9yKTsKLSAgICBCTEVORChDU1NQ
cm9wZXJ0eU91dGxpbmVPZmZzZXQsIG91dGxpbmVPZmZzZXQsIHNldE91dGxpbmVPZmZzZXQpOwot
ICAgIEJMRU5EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgsIHNldE91dGxp
bmVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCBsZXR0ZXJTcGFj
aW5nLCBzZXRMZXR0ZXJTcGFjaW5nKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdvcmRTcGFjaW5n
LCB3b3JkU3BhY2luZywgc2V0V29yZFNwYWNpbmcpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9w
ZXJ0eVdlYmtpdEJveFNoYWRvdywgYm94U2hhZG93LCBzZXRCb3hTaGFkb3cpOwotICAgIEJMRU5E
X1NIQURPVyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHRleHRTaGFkb3csIHNldFRleHRTaGFkb3cp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCB0cmFuc2Zvcm0sIHNldFRy
YW5zZm9ybSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCB0
cmFuc2Zvcm1PcmlnaW5YLCBzZXRUcmFuc2Zvcm1PcmlnaW5YKTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksIHRyYW5zZm9ybU9yaWdpblksIHNldFRyYW5zZm9y
bU9yaWdpblkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1
cywgYm9yZGVyVG9wTGVmdFJhZGl1cywgc2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgYm9yZGVyVG9wUmlnaHRS
YWRpdXMsIHNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIHNldEJv
cmRlckJvdHRvbUxlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMsIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJCb3R0
b21SaWdodFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCB2aXNpYmls
aXR5LCBzZXRWaXNpYmlsaXR5KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVpvb20sIHpvb20sIHNl
dFpvb20pOwotfQotCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb246OmFu
aW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIGNvbnN0IFRyYW5zaXRpb24qIGN1cnJl
bnRUcmFuc2l0aW9ucyA9IGN1cnJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBjb25zdCBU
cmFuc2l0aW9uKiB0YXJnZXRUcmFuc2l0aW9ucyA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygp
OwotICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFuZ2VkID0gbV9hbmltYXRpb25zLmlzRW1wdHkoKSB8
fCAoY3VycmVudFRyYW5zaXRpb25zICE9IHRhcmdldFRyYW5zaXRpb25zICYmICEoY3VycmVudFRy
YW5zaXRpb25zICYmIHRhcmdldFRyYW5zaXRpb25zICYmICpjdXJyZW50VHJhbnNpdGlvbnMgPT0g
KnRhcmdldFRyYW5zaXRpb25zKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbnNDaGFuZ2VkKSB7Ci0g
ICAgICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBt
X2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgICAKLSAgICAgICAgZm9yIChIYXNoTWFwPGludCwg
SW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgLy8gTWFyayBhbnkgcnVubmluZyBhbmltYXRp
b25zIGFzIHN0YWxlIGlmIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgY2hhbmdlZC4gIFN0YWxlIGFu
aW1hdGlvbnMgY29udGludWUKLSAgICAgICAgICAgIC8vIHRvIGJsZW5kIG9uIGEgdGltZXIsIGFu
ZCB0aGVuIHJlbW92ZSB0aGVtc2VsdmVzIHdoZW4gZmluaXNoZWQuCi0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRTdGFsZSgpOwotCi0gICAgICAgIC8vIElmIG91ciB0cmFuc2l0aW9ucyBjaGFu
Z2VkIHdlIG5lZWQgdG8gYWRkIG5ldyBhbmltYXRpb25zIGZvciBhbnkgdHJhbnNpdGlvbnMgdGhh
dAotICAgICAgICAvLyBkb24ndCBleGlzdCB5ZXQuICBJZiBhIG5ldyB0cmFuc2l0aW9uIGNvbmZs
aWN0cyB3aXRoIGEgY3VycmVudGx5IHJ1bm5pbmcgc3RhbGUgdHJhbnNpdGlvbiwgdGhlbiB3ZSB3
aWxsIG5vdCBhZGQgaXQuCi0gICAgICAgIC8vIFRoZSBzdGFsZSB0cmFuc2l0aW9uIGlzIHJlc3Bv
bnNpYmxlIGZvciB1cGRhdGluZyBpdHNlbGYgdG8gdGhlIG5ldyB0cmFuc2l0aW9uIGlmIGl0IGV2
ZXIgZ2V0cyByZXNldCBvciBmaW5pc2hlcy4KLSAgICAgICAgZm9yIChjb25zdCBUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uID0gdGFyZ2V0VHJhbnNpdGlvbnM7IHRyYW5zaXRpb247IHRyYW5zaXRpb24g
PSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBwcm9wZXJ0eSA9IHRyYW5z
aXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQgZHVyYXRpb24gPSB0cmFuc2l0aW9u
LT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVhdENvdW50ID0gdHJhbnNpdGlvbi0+
cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAmJiBkdXJhdGlvbiAmJiBy
ZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5zKHByb3BlcnR5KSkgewotICAgICAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGljaXRBbmlt
YXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25zLnNldChwcm9w
ZXJ0eSwgYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorY2xhc3MgUHJvcGVy
dHlXcmFwcGVyQmFzZSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyQmFzZShpbnQgcHJv
cCkKKyAgICA6IG1fcHJvcChwcm9wKQorICAgIHsgfQorICAgIHZpcnR1YWwgflByb3BlcnR5V3Jh
cHBlckJhc2UoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Q9MDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxl
bmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3Q9MDsKKyAgICAKKyAgICBpbnQgcHJvcGVydHkoKSBj
b25zdCB7IHJldHVybiBtX3Byb3A7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50IG1fcHJvcDsK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJvcGVydHlXcmFwcGVyR2V0dGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlckdldHRlcihpbnQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCisg
ICAgOiBQcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisg
ICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGEt
PiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwogICAgIH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKIAotICAgIC8v
IE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cg
YWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBp
biBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgUmVuZGVyU3R5bGUqIHJlc3Vs
dCA9IDA7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBWZWN0b3I8aW50PiBvYnNvbGV0ZVRyYW5zaXRp
b25zOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXIgOiBwdWJs
aWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBw
ZXIoaW50IHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJv
cCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsgfQogICAgIAotICAgIC8v
IExvb2sgYXQgdGhlICJhbGwiIGFuaW1hdGlvbiBmaXJzdC4KLSAgICBJbXBsaWNpdEFuaW1hdGlv
biogYWxsQW5pbWF0aW9uID0gbV9hbmltYXRpb25zLmdldChjQW5pbWF0ZUFsbCk7Ci0gICAgaWYg
KGFsbEFuaW1hdGlvbikgewotICAgICAgICBhbGxBbmltYXRpb24tPmFuaW1hdGUodGhpcywgcmVu
ZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdCk7CisgICAgdmlydHVhbCB2
b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYygoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0
ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwgcHJvZykp
OworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0
dGVyKShUKTsKK307CiAKLSAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBkb25lIGFuZCB3
ZSBhcmUgbWFya2VkIGFzIHN0YWxlLCB0aGVuIHdlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHRoZQot
ICAgICAgICAvLyBpdGVyYXRpb24gb2YgdGhlIGhhc2htYXAgaXMgZmluaXNoZWQuCi0gICAgICAg
IGlmIChhbGxBbmltYXRpb24tPmZpbmlzaGVkKCkgJiYgYWxsQW5pbWF0aW9uLT5zdGFsZSgpKQot
ICAgICAgICAgICAgb2Jzb2xldGVUcmFuc2l0aW9ucy5hcHBlbmQoY0FuaW1hdGVBbGwpOworY2xh
c3MgUHJvcGVydHlXcmFwcGVyU2hhZG93IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxT
aGFkb3dEYXRhKj4geworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhpbnQgcHJv
cCwgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoU2hhZG93RGF0YSosIGJvb2wpKQorICAgIDogUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFNoYWRvd0RhdGEqPihwcm9wLCBnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBTaGFk
b3dEYXRhKiBzaGFkb3dhID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSog
c2hhZG93YiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNoYWRv
d2EgJiYgc2hhZG93YiB8fCBzaGFkb3dhICYmICFzaGFkb3diKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoc2hhZG93YSAmJiBzaGFkb3diICYmICgqc2hhZG93YSAhPSAq
c2hhZG93YikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKLSAgICAvLyBOb3cgbG9vayBhdCB0aGUgc3BlY2lhbGl6ZWQgYW5pbWF0
aW9ucy4KLSAgICBmb3IgKEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRv
ciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Ly8gU2tpcCBvdmVyIHRoZSAiYWxsIiBhbmltYXRpb24sIHNpbmNlIHdlIGFuaW1hdGVkIGl0IGFs
cmVhZHkuCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5wcm9wZXJ0eSgpID09IGNBbmltYXRlQWxs
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91
YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dhID0gKGEt
PiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgIFNoYWRvd0RhdGEgZGVmYXVsdFNoYWRvd0RhdGEoMCwgMCwgMCwgQ29s
b3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAgCi0gICAgICAgIGl0LT5zZWNvbmQtPmFuaW1hdGUo
dGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdCk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBpcyBkb25lIGFuZCB3ZSBhcmUgbWFya2VkIGFzIHN0
YWxlLCB0aGVuIHdlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHRoZQotICAgICAgICAvLyBpdGVyYXRp
b24gb2YgdGhlIGhhc2htYXAgaXMgZmluaXNoZWQuCi0gICAgICAgIGlmIChpdC0+c2Vjb25kLT5m
aW5pc2hlZCgpICYmIGl0LT5zZWNvbmQtPnN0YWxlKCkpCi0gICAgICAgICAgICBvYnNvbGV0ZVRy
YW5zaXRpb25zLmFwcGVuZChpdC0+c2Vjb25kLT5wcm9wZXJ0eSgpKTsKKyAgICAgICAgaWYgKCFz
aGFkb3dhKQorICAgICAgICAgICAgc2hhZG93YSA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAg
ICAgaWYgKCFzaGFkb3diKQorICAgICAgICAgICAgc2hhZG93YiA9ICZkZWZhdWx0U2hhZG93RGF0
YTsKKyAgICAgICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKHNoYWRvd2Es
IHNoYWRvd2IsIHByb2cpLCBmYWxzZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9vbCk7Cit9OwogCitjbGFz
cyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxJ
bnRTaXplPiB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVySW50U2l6ZShpbnQgcHJvcCwg
SW50U2l6ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
Ojoqc2V0dGVyKShjb25zdCBJbnRTaXplJikpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
SW50U2l6ZT4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsgfQor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAgICAgICAgSW50U2l6ZSBzaXplYSA9IChh
LT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6ZWIgPSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChzaXplYSA9PSBzaXplYik7CiAgICAgfQogICAg
IAotICAgIC8vIE5vdyBjdWxsIG91dCBhbnkgc3RhbGUgYW5pbWF0aW9ucyB0aGF0IGFyZSBmaW5p
c2hlZC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2Jzb2xldGVUcmFuc2l0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9h
bmltYXRpb25zLnRha2Uob2Jzb2xldGVUcmFuc2l0aW9uc1tpXSk7Ci0gICAgICAgIGFuaW1hdGlv
bi0+cmVzZXQocmVuZGVyZXIsIDAsIDApOwotICAgICAgICBkZWxldGUgYW5pbWF0aW9uOworICAg
IHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAg
ICAgSW50U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6
ZWIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhzaXplYSwgc2l6ZWIsIHByb2cpKTsKICAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IEludFNpemUm
KTsKK307CiAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAg
cmV0dXJuIHRhcmdldFN0eWxlOwotfQotCi1ib29sIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9u
OjphbmltYXRpbmcoKSBjb25zdAotewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlv
bio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChI
YXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Fu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoIWl0LT5zZWNv
bmQtPmZpbmlzaGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCi17Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnJlc2V0
KHJlbmRlcmVyLCAwLCAwKTsKLX0KK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlck1heWJlSW52YWxpZENvbG9yKGludCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3Qg
Q29sb3ImKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAsIG1fZ2V0dGVy
KGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIp
KCk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xv
cigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xv
ciA9IGItPmNvbG9yKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRv
Q29sb3I7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRl
cikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAg
IGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNv
bG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICB0b0Nv
bG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoZnJv
bUNvbG9yLCB0b0NvbG9yLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25z
dCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVu
ZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKK307CiAKIGNsYXNzIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZShGcmFtZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgpOwotCi0gICAg
Q29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGdldChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHls
ZSopOworICAgIAorICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYWNjZXNzQ29tcG9zaXRlQW5pbWF0
aW9uKFJlbmRlck9iamVjdCopOwogICAgIGJvb2wgY2xlYXIoUmVuZGVyT2JqZWN0Kik7CiAgICAg
Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiop
OwotICAgIHZvaWQgdXBkYXRlVGltZXIoKTsKLQotICAgIGJvb2wgaGFzSW1wbGljaXRBbmltYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQorICAgIHZv
aWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4q
KTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisgICAgdm9pZCB1cGRh
dGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU+Kik7CisgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAK
KyAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV9jb21wb3NpdGVBbmlt
YXRpb25zLmlzRW1wdHkoKTsgfQorICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRG9j
dW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRv
Y3VtZW50KTsKKyAgICAKKyAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7CisgICAgCisgICAgYm9v
bCBpc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHBy
b3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoaW50
IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAg
c3RhdGljIGludCBnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGkpOworICAgIHN0YXRpYyBpbnQgZ2V0
TnVtUHJvcGVydGllcygpIHsgcmV0dXJuIGdQcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7IH0KKyAg
ICAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1h
dGlvbiB0aW1lcnMKKyAgICBzdGF0aWMgYm9vbCBibGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2cpOworICAgIAorICAgIHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxh
YmxlKGJvb2wgd2FpdGluZykgeyBpZiAod2FpdGluZykgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRl
cnMrKzsgZWxzZSBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycy0tOyB9CisgICAgCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24q
PiBtX2FuaW1hdGlvbnM7Ci0gICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+IG1f
dGltZXI7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKTsKKyAgICAKKyAgICB0
eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0aW9uKj4gUmVuZGVy
T2JqZWN0QW5pbWF0aW9uTWFwOworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnM7CisgICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU+IG1fYW5pbWF0aW9uVGltZXI7CisgICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU+IG1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcjsKICAgICBGcmFtZSogbV9mcmFtZTsKKyAg
ICB1aW50MzJfdCBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVyczsKKyAgICAKKyAgICBzdGF0aWMg
VmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogZ1Byb3BlcnR5V3JhcHBlcnM7CisgICAgc3Rh
dGljIGludCBnUHJvcGVydHlXcmFwcGVyTWFwW251bUNTU1Byb3BlcnRpZXNdOwogfTsKIAorVmVj
dG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmdQ
cm9wZXJ0eVdyYXBwZXJzID0gMDsKK2ludCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z1By
b3BlcnR5V3JhcHBlck1hcFtdOworCiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqIGZyYW1lKQotICAgIDogbV90aW1lcih0aGlzLCAm
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2ZyYW1lKGZy
YW1lKQorOiBtX2FuaW1hdGlvblRpbWVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCkKKywgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKHRo
aXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hl
ckZpcmVkKQorLCBtX2ZyYW1lKGZyYW1lKQorLCBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycygw
KQogeworICAgIGVuc3VyZVByb3BlcnR5TWFwKCk7CiB9CiAKIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjp+QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoKQogewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2FuaW1hdGlvbnMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmVuc3VyZVByb3BlcnR5TWFwKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVy
IGRlc3Ryb3llZC4gTWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVu
IHRoZSBsYXN0IEFuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgIGlmIChnUHJv
cGVydHlXcmFwcGVycyA9PSAwKSB7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzID0gbmV3IFZl
Y3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIGJ1aWxk
IHRoZSBsaXN0IG9mIHByb3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBhbmQg
YmxlbmRzCisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TGVmdCwgJlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVy
U3R5bGU6OnNldExlZnQpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlSaWdodCwgJlJlbmRlclN0eWxlOjpy
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVRvcCwgJlJl
bmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSk7CisgICAgICAgIGdQcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRCb3R0b20pKTsK
KyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlXaWR0aCwgJlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxl
OjpzZXRXaWR0aCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0eWxlOjpoZWln
aHQsICZSZW5kZXJTdHlsZTo6c2V0SGVpZ2h0KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckxlZnRXaWR0aCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlclJpZ2h0V2lkdGgpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlclRv
cFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclRvcFdpZHRoKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0
aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJCb3R0b21XaWR0aCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHls
ZTo6bWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSk7CisgICAgICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1By
b3BlcnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZSZW5kZXJTdHls
ZTo6c2V0TWFyZ2luUmlnaHQpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJT
dHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCkpOworICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0TWFyZ2luQm90dG9tKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZS
ZW5kZXJTdHlsZTo6cGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpKTsK
KyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1JpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCkpOworICAgICAgICBnUHJvcGVydHlXcmFw
cGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRp
bmdUb3AsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5n
VG9wKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpwYWRk
aW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20pKTsKKyAgICAgICAgZ1By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eU9wYWNpdHksICZSZW5kZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFj
aXR5KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJhY2tncm91bmRDb2xvcikpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
UnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5SdWxlV2lkdGgpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwgJlJl
bmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSk7CisgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5Db3VudCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCkpOworICAgICAgICBnUHJvcGVy
dHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q29sdW1uV2lkdGgpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKSk7CisgICAgICAgIGdQcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFj
aW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZykpOworICAgICAgICBn
UHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9w
ZXJ0eVpJbmRleCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4
KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxMZW5ndGg+KENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpsaW5lSGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlPdXRsaW5lT2Zm
c2V0LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZU9mZnNldCkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgpKTsKKyAg
ICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4o
Q1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZykpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVdvcmRTcGFjaW5n
LCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5n
KSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0s
ICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkpOwor
ICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJh
bnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSk7CisgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+
KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zv
cm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblkpKTsKKyAgICAgICAg
Z1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQ
cm9wZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
TGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKSk7CisgICAg
ICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUo
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1cykp
OworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJ
bnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRv
bUxlZnRSYWRpdXMpKTsKKyAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxFVmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJp
bGl0eSkpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVy
U3R5bGU6OnNldFpvb20pKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGVzZSBtaWdo
dCBiZSBpbnZhbGlkIGNvbG9ycywgbmVlZCB0byBjaGVjayBmb3IgdGhhdAorICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yKSk7CisgICAgICAgIGdQ
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRT
dHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IpKTsKKyAgICAgICAg
Z1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlk
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRG
aWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvcikpOworICAgICAgICBnUHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0Q29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yKSk7CisgICAgICAgIGdQcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IpKTsKKyAgICAgICAgZ1Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvcikpOworICAgICAgICBnUHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNvbG9yKSk7CisgICAgICAgIGdQcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3Bl
cnR5T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lQ29sb3IpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGFyZSBmb3Ig
c2hhZG93cworICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXJTaGFkb3coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csICZSZW5kZXJTdHlsZTo6Ym94
U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdykpOworICAgICAgICBnUHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlUZXh0
U2hhZG93LCAmUmVuZGVyU3R5bGU6OnRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNo
YWRvdykpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZl
IGEgdmFsdWUKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAodW5zaWduZWQg
aW50KSBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgICAgICBnUHJvcGVydHlXcmFwcGVy
TWFwW2ldID0gQ1NTUHJvcGVydHlJbnZhbGlkOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IG4g
PSBnUHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKCgqZ1Byb3BlcnR5V3JhcHBl
cnMpW2ldLT5wcm9wZXJ0eSgpIC0gZmlyc3RDU1NQcm9wZXJ0eSA8IG51bUNTU1Byb3BlcnRpZXMp
OworICAgICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlck1hcFsoKmdQcm9wZXJ0eVdyYXBwZXJzKVtp
XS0+cHJvcGVydHkoKSAtIGZpcnN0Q1NTUHJvcGVydHldID0gaTsKKyAgICAgICAgfQorICAgIH0K
IH0KIAotQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpnZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQorLy8gc3RhdGljCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVz
RXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikKIHsKLSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9hbmlt
YXRpb25zLmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmltYXRpb24gJiYgdGFyZ2V0U3R5bGUt
PnRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uID0gbmV3IENvbXBvc2l0ZUltcGxp
Y2l0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1h
dGlvbik7CisgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAgICAgc2l6ZV90IG4g
PSBnUHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgaWYgKCEoKmdQcm9wZXJ0eVdyYXBwZXJz
KVtpXS0+ZXF1YWxzKGEsIGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IHByb3BJbmRleCA9IHByb3AgLSBm
aXJzdENTU1Byb3BlcnR5OworICAgICAgICAKKyAgICAgICAgaWYgKHByb3BJbmRleCA+PSAwICYm
IHByb3BJbmRleCA8IG51bUNTU1Byb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGludCBpID0gZ1By
b3BlcnR5V3JhcHBlck1hcFtwcm9wSW5kZXhdOworICAgICAgICAgICAgcmV0dXJuIChpID49IDAp
ID8gKCpnUHJvcGVydHlXcmFwcGVycylbaV0tPmVxdWFscyhhLCBiKSA6IHRydWU7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHN0YXRpYworaW50IEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGkpCit7CisgICAgaWYg
KGkgPCAwIHx8IGkgPj0gKGludCkgZ1Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKyAgICAgICAgCisgICAgcmV0dXJuICgqZ1Byb3Bl
cnR5V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpOworfQorICAgIAorLy8gc3RhdGljIC0gcmV0dXJu
IHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCitib29s
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpibGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2cpCit7CisgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAg
ICAgYm9vbCBuZWVkc1RpbWVyID0gZmFsc2U7CisgICAgCisgICAgICAgIHNpemVfdCBuID0gZ1By
b3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1
YWxzKGEsIGIpKSB7CisgICAgICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBw
cm9nKTsKKyAgICAgICAgICAgICAgICBuZWVkc1RpbWVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmVlZHNUaW1lcjsKKyAgICB9CisgICAgCisgICAg
aW50IHByb3BJbmRleCA9IHByb3AgLSBmaXJzdENTU1Byb3BlcnR5OworICAgIGlmIChwcm9wSW5k
ZXggPj0gMCAmJiBwcm9wSW5kZXggPCBudW1DU1NQcm9wZXJ0aWVzKSB7CisgICAgICAgIGludCBp
ID0gZ1Byb3BlcnR5V3JhcHBlck1hcFtwcm9wSW5kZXhdOworICAgICAgICBpZiAoaSA+PSAwKSB7
CisgICAgICAgICAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnUHJvcGVydHlX
cmFwcGVycylbaV07CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkc3QsIGEsIGIsIHByb2cp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitDb21wb3NpdGVBbmltYXRpb24qIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphY2Nlc3NDb21wb3NpdGVBbmltYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKK3sKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5nZXQocmVuZGVyZXIpOworICAgIGlmICghYW5pbWF0aW9uKSB7CisgICAgICAgIGFu
aW1hdGlvbiA9IG5ldyBDb21wb3NpdGVBbmltYXRpb24odGhpcyk7CisgICAgICAgIG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CiAgICAgfQogICAgIHJldHVy
biBhbmltYXRpb247CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFy
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRp
b24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKHJlbmRlcmVyKTsKKyAgICAvLyBSZXR1
cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9SIHdlIGFyZSBzdXNwZW5kZWQgKHNv
IHdlIGRvbid0IHRyeSB0bworICAgIC8vIGRvIGEgc2V0Q2hhbmdlZCgpIHdoZW4gc3VzcGVuZGVk
CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMudGFrZShyZW5kZXJlcik7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICBhbmltYXRpb24tPnJl
c2V0VHJhbnNpdGlvbnMocmVuZGVyZXIpOworICAgIGJvb2wgd2FzU3VzcGVuZGVkID0gYW5pbWF0
aW9uLT5zdXNwZW5kZWQoKTsKICAgICBkZWxldGUgYW5pbWF0aW9uOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiAhd2FzU3VzcGVuZGVkOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjp1cGRhdGVUaW1lcigpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdHlsZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJz
ID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgeworICAgICAgICBpdC0+c2Vjb25kLT5zdHlsZUF2YWlsYWJsZSgp
OworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5p
bWF0aW9uVGltZXIoKQogewogICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgSGFzaE1h
cDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJlbmRlck9iamVjdCos
IENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+YW5p
bWF0aW5nKCkpIHsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0
ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAg
Zm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsg
KytpdCkgeworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmFuaW1h
dGluZygpKSB7CiAgICAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGFuaW1hdGluZykgewotICAgICAg
ICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBl
YXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOwotICAgIH0gZWxzZSBpZiAobV90aW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGlv
blRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVw
ZWF0aW5nKGNBbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0aW9u
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiB9CiAK
LXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZT4qKQoreworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50
KCkpIHsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7Cisg
ICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFVwZGF0ZVJl
bmRlcmluZ0Rpc3BhdGNoZXIoKQoreworICAgIGlmICghbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRj
aGVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyLnN0
YXJ0T25lU2hvdCgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+
KiB0aW1lcikKIHsKICAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNh
bGwgc2V0Q2hhbmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFu
ZCB0aGVuIGRvIGFuIGltbWVkaWF0ZQogICAgIC8vIHVwZGF0ZVJlbmRlcmluZy4gIEl0IHdpbGwg
dGhlbiBjYWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCiAgICAgYm9vbCBhbmlt
YXRpbmcgPSBmYWxzZTsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxp
Y2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6
aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+c2Vjb25kLT5hbmltYXRpbmcoKSkgeworICAgIFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBp
dC0+c2Vjb25kOworICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5p
bS0+YW5pbWF0aW5nKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7Ci0gICAgICAg
ICAgICBpdC0+Zmlyc3QtPmVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgY29t
cEFuaW0tPnNldEFuaW1hdGluZyhmYWxzZSk7CisgICAgICAgICAgICBzZXRDaGFuZ2VkKHJlbmRl
cmVyLT5lbGVtZW50KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwogICAgIAotICAgIHVwZGF0ZVRpbWVyKCk7Cisg
ICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKIH0KIAotQW5pbWF0aW9uQ29udHJvbGxlcjo6QW5p
bWF0aW9uQ29udHJvbGxlcihGcmFtZSogZnJhbWUpCi06bV9kYXRhKG5ldyBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZShmcmFtZSkpCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpp
c0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3Bl
cnR5KSBjb25zdAogeworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmdldChvYmopOworICAgIGlmICghYW5pbWF0aW9uKSByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGFuaW1hdGlvbi0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9w
ZXJ0eSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQt
PmZpcnN0OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQorICAgICAg
ICAgICAgY29tcEFuaW0tPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgfQorICAgIAorICAgIHVw
ZGF0ZUFuaW1hdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFJlbmRlck9i
amVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAg
ICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9j
dW1lbnQpCisgICAgICAgICAgICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIH0K
KyAgICAKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOworfQorCit2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIC8v
IElmIGN1cnJlbnRTdHlsZSBpcyBudWxsLCB3ZSBkb24ndCBkbyB0cmFuc2l0aW9ucworICAgIGlm
ICghY3VycmVudFN0eWxlIHx8ICF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFy
Z2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEFu
aW1hdGlvbiogYW5pbSA9ICgqdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpW2ldLmdldCgpOwor
ICAgICAgICBkb3VibGUgZHVyYXRpb24gPSBhbmltLT5kdXJhdGlvbigpOworICAgICAgICBkb3Vi
bGUgZGVsYXkgPSBhbmltLT5kZWxheSgpOworCisgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gZW1w
dHkgdHJhbnNpdGlvbiwgc2tpcCBpdAorICAgICAgICBpZiAoZHVyYXRpb24gPT0gMCAmJiBkZWxh
eSA8PSAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAKKyAgICAgICAgaW50IHBy
b3AgPSBhbmltLT5wcm9wZXJ0eSgpOworICAgICAgICBib29sIGFsbCA9IHByb3AgPT0gY0FuaW1h
dGVBbGw7CisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGUgYm90aCB0aGUgJ2FsbCcgYW5kIHNp
bmdsZSBwcm9wZXJ0eSBjYXNlcy4gRm9yIHRoZSBzaW5nbGUgcHJvcCBjYXNlLCB3ZSBtYWtlIG9u
bHkgb25lIHBhc3MKKyAgICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcAorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhbGwpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0TnVtUHJvcGVydGllcygp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBnZXQgdGhl
IG5leHQgcHJvcAorICAgICAgICAgICAgICAgIHByb3AgPSBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6Z2V0UHJvcGVydHlBdEluZGV4KGkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJvcAor
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0gbV90cmFuc2l0aW9ucy5n
ZXQocHJvcCk7CisgICAgICAgICAgICBib29sIGVxdWFsID0gdHJ1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGltcGxBbmltKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMg
b25lLCBoYXMgb3VyIHRhcmdldCBjaGFuZ2VkPworICAgICAgICAgICAgICAgIGlmICghaW1wbEFu
aW0tPmlzVGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCB0YXJnZXRTdHlsZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSXQgaGFzIGNoYW5nZWQgLSB0b3NzIGl0IGFuZCBzdGFydCBvdmVyCisg
ICAgICAgICAgICAgICAgICAgIC8vIE9wYWNpdHkgaXMgc3BlY2lhbCBzaW5jZSBpdCBjYW4gcG9w
IGluIGFuZCBvdXQgb2YgUmVuZGVyTGF5ZXJzLiBXZSBuZWVkIHRvIGNvbXB1dGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGJsZW5kZWQgb3BhY2l0eSB2YWx1ZSBiZXR3ZWVuIHRoZSBwcmV2
aW91cyBmcm9tIGFuZCB0byBzdHlsZXMgYW5kIHB1dCB0aGF0IGluIHRoZSBjdXJyZW50U3R5bGUs
IHdoaWNoCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmVjb21lIHRoZSBuZXcgZnJvbVN0
eWxlLiBUaGlzIGlzIGNoYW5naW5nIGEgY29uc3QgUmVuZGVyU3R5bGUsIGJ1dCB3ZSBrbm93IHdo
YXQgd2UgYXJlIGRvaW5nLCByZWFsbHkgOi0pCisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9w
ID09IENTU1Byb3BlcnR5T3BhY2l0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0
IHRoZSBibGVuZGVkIHZhbHVlIG9mIG9wYWNpdHkgaW50byB0aGUgY3VycmVudFN0eWxlICh3aGlj
aCB3aWxsIGJlIHRoZSBuZXcgZnJvbVN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW1w
bEFuaW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoQ1NTUHJvcGVydHlPcGFjaXR5LCBjdXJy
ZW50U3R5bGUpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
aW1wbEFuaW0tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGlt
cGxBbmltOworICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsK
KyAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgLy8gU2VlIGlm
IHdlIG5lZWQgdG8gc3RhcnQgYSBuZXcgdHJhbnNpdGlvbgorICAgICAgICAgICAgICAgIGVxdWFs
ID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnByb3BlcnRpZXNFcXVhbChwcm9wLCBjdXJy
ZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFl
cXVhbCkgeworICAgICAgICAgICAgICAgIC8vIEFBZGQgdGhlIG5ldyB0cmFuc2l0aW9uCisgICAg
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG5ldyBJbXBsaWNpdEFu
aW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbio+KGFuaW0pLCByZW5kZXJlciwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcCwgYW5pbWF0aW9uKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBw
YXNzIGZvciB0aGUgc2luZ2xlIHByb3AgY2FzZQorICAgICAgICAgICAgaWYgKCFhbGwpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlbmRlclN0eWxlKiBD
b21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIFJl
bmRlclN0eWxlKiByZXN1bHRTdHlsZSA9IDA7CisgICAgCisgICAgLy8gV2UgZG9uJ3QgZG8gYW55
IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXAp
CisgICAgdXBkYXRlVHJhbnNpdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5
bGUpOworICAgIAorICAgIGlmIChjdXJyZW50U3R5bGUpIHsKKyAgICAgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSB0cmFuc2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhl
IG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCisgICAgICAgIC8vIHRvIGZpbGwgaW4gYSBS
ZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgorICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgICAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiAgYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoYW5pbSkg
eworICAgICAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKHJlbmRlcmVyKTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0U3R5bGUgPyByZXN1bHRTdHlsZSA6IHRhcmdldFN0eWxl
OworfQorCisvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBydW5uaW5nIHRo
YXQgcmVxdWlyZXMgdGhlIHRpbWVyIHRvIGtlZXAgZmlyaW5nCisvLyAoZS5nLiBhIHRyYW5zaXRp
b24pCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRp
bmcpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5nKGluQW5pbWF0aW5nKTsKKyAg
ICB9Cit9CiAKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRpbmcoKQoreworICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAg
IGlmICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPmFuaW1hdGluZygpICYmIHRyYW5zaXRpb24t
PnJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXNldFRyYW5zaXRpb25zKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0
cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgdHJhbnNpdGlvbi0+cmVzZXQocmVuZGVy
ZXIpOworICAgICAgICBkZWxldGUgdHJhbnNpdGlvbjsKKyAgICB9CisgICAgbV90cmFuc2l0aW9u
cy5jbGVhcigpOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYW51cEZpbmlzaGVk
QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmIChzdXNwZW5kZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE1ha2UgYSBsaXN0IG9mIHRyYW5zaXRp
b25zIHRvIGJlIGRlbGV0ZWQKKyAgICBWZWN0b3I8aW50PiBmaW5pc2hlZFRyYW5zaXRpb25zOwor
ICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJh
bnNpdGlvbnMuZW5kKCk7CisKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAoIWFuaW0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGFuaW0tPnBv
c3RhY3RpdmUoKSAmJiAhYW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpCisgICAgICAgICAgICBm
aW5pc2hlZFRyYW5zaXRpb25zLmFwcGVuZChhbmltLT5wcm9wZXJ0eSgpKTsKKyAgICB9CisgICAg
CisgICAgLy8gRGVsZXRlIHRoZW0KKyAgICBmb3IgKFZlY3RvcjxpbnQ+OjppdGVyYXRvciBpdCA9
IGZpbmlzaGVkVHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZmluaXNoZWRUcmFuc2l0aW9ucy5l
bmQoKTsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IG1fdHJhbnNp
dGlvbnMuZ2V0KCppdCk7CisgICAgICAgIGlmIChhbmltKSB7CisgICAgICAgICAgICBhbmltLT5y
ZXNldChyZW5kZXJlcik7CisgICAgICAgICAgICBkZWxldGUgYW5pbTsKKyAgICAgICAgfQorICAg
ICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZSgqaXQpOworICAgIH0KK30KKwordm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnNldFRyYW5zaXRpb25TdGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUg
dCkKK3sKKyAgICAvLyBTZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIGdpdmVuIHByb3BlcnR5IHRyYW5z
aXRpb24KKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdGFydFRpbWUoKSAmJiAKKyAgICAg
ICAgICAgICAgICAgICAgKGFuaW0tPnByb3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+cHJv
cGVydHkoKSA9PSBjQW5pbWF0ZUFsbCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIHQpOworICAg
IH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKK3sK
KyAgICBpZiAobV9zdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N1c3Bl
bmRlZCA9IHRydWU7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpIHsKKyAgICAgICAg
ICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKK3sKKyAgICBpZiAo
IW1fc3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNwZW5kZWQgPSBm
YWxzZTsKKworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5p
bS0+dXBkYXRlUGxheVN0YXRlKHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5
KQoreworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKGFuaW0gJiYgKGFuaW0tPnByb3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+
cHJvcGVydHkoKSA9PSBjQW5pbWF0ZUFsbCkpCisgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlk
ZGVuKHRydWUpOworICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92
ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KQoreworICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYg
KGFuaW0tPnByb3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+cHJvcGVydHkoKSA9PSBjQW5p
bWF0ZUFsbCkpCisgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdHlsZUF2YWlsYWJsZSgpCit7CisgICAg
aWYgKG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzID09IDApCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKQorICAgICAg
ICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvbkJhc2U6OlNUQVRFX0lOUFVU
X1NUWUxFX0FWQUlMQUJMRSwgLTEpOworICAgIH0KK30KKworYm9vbCBDb21wb3NpdGVBbmltYXRp
b246OmlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0g
JiYgYW5pbS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBS
ZW5kZXJTdHlsZSomIGlvQW5pbWF0ZWRTdHlsZSkKK3sKKyAgICBpZiAocGF1c2VkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRoZSBhbmlt
YXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBmaW5pc2hl
ZCBhbmltYXRpb24uCisgICAgLy8gSWYgc28sIHNlbmQgYmFjayB0aGUgdGFyZ2V0U3R5bGUgKGl0
IHdpbGwgZ2V0IHRvc3NlZCBsYXRlcikKKyAgICBpZiAocG9zdGFjdGl2ZSgpKSB7CisgICAgICAg
IGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICAgICAgaW9BbmltYXRlZFN0eWxlID0gY29u
c3RfY2FzdDxSZW5kZXJTdHlsZSo+KHRhcmdldFN0eWxlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdlIGFyZSBuZXcK
KyAgICBpZiAoaXNuZXcoKSkKKyAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwg
dGFyZ2V0U3R5bGUpOworICAgIAorICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4KKyAg
ICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ugb25l
IGlmIG5lZWRlZAorICAgIGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICBpb0FuaW1hdGVk
U3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0
U3R5bGUpOworICAgIAorICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3MoMSwgMCk7CisgICAgYm9v
bCBuZWVkc0FuaW0gPSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQcm9wZXJ0aWVz
KG1fcHJvcGVydHksIGlvQW5pbWF0ZWRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJv
Zyk7CisgICAgaWYgKG5lZWRzQW5pbSkKKyAgICAgICAgc2V0QW5pbWF0aW5nKCk7Cit9CisKK2Jv
b2wgSW1wbGljaXRBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmlt
YXRpb24oYm9vbCByZXNldCkKK3sKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25Bbmlt
YXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgLy8gd2UncmUgY29udmVydGlu
ZyB0aGUgYW5pbWF0aW9uIGludG8gYSB0cmFuc2l0aW9uIGhlcmUKKyAgICBpZiAoIXNlbmRUcmFu
c2l0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBpbkVsYXBz
ZWRUaW1lKSkgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQsIHdoaWNo
IHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xsIGp1c3QgZW5kCisgICAgICAgIC8v
IGl0IGhlcmUuCisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAgICB9Cit9CisKK2Jvb2wg
SW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgcmV0dXJuIGZhbHNl
OyAvLyBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlv
bjo6cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20g
LyogPSAwICovLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gLyogPSAwICovKQoreworICAgIEFTU0VS
VCgoIW1fdG9TdHlsZSAmJiAhdG8pIHx8IG1fdG9TdHlsZSAhPSB0byk7CisgICAgQVNTRVJUKCgh
bV9mcm9tU3R5bGUgJiYgIWZyb20pIHx8IG1fZnJvbVN0eWxlICE9IGZyb20pOworICAgIGlmICht
X2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJB
cmVuYSgpKTsKKyAgICBpZiAobV90b1N0eWxlKQorICAgICAgICBtX3RvU3R5bGUtPmRlcmVmKHJl
bmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAgICAKKyAgICBtX2Zyb21TdHlsZSA9IGNvbnN0X2Nh
c3Q8UmVuZGVyU3R5bGUqPihmcm9tKTsgICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4g
dGhlIHJlZgorICAgIGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigp
OworICAgIAorICAgIG1fdG9TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0byk7ICAg
ICAgIC8vIGl0IGlzIHJlYWQtb25seSwgb3RoZXIgdGhhbiB0aGUgcmVmCisgICAgaWYgKG1fdG9T
dHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5yZWYoKTsKKyAgICAKKyAgICAvLyByZXN0YXJ0IHRo
ZSB0cmFuc2l0aW9uCisgICAgaWYgKGZyb20gJiYgdG8pCisgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgLTEpOworfQorCit2b2lkIEltcGxp
Y2l0QW5pbWF0aW9uOjpzZXRPdmVycmlkZGVuKGJvb2wgYikKK3sKKyAgICBpZiAoYiAhPSBtX292
ZXJyaWRkZW4pIHsKKyAgICAgICAgbV9vdmVycmlkZGVuID0gYjsKKyAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKG1fb3ZlcnJpZGRlbiA/IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFIDogU1RB
VEVfSU5QVVRfUkVTVU1FX09WRVJSSURFLCAtMSk7CisgICAgfQorfQorCitib29sIEltcGxpY2l0
QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIHJl
dHVybiBtX3Byb3BlcnR5ID09IHByb3BlcnR5IHx8CisgICAgKG1fcHJvcGVydHkgPT0gY0FuaW1h
dGVBbGwgJiYgIUFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwocHJv
cGVydHksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUpKTsKK30KKworYm9vbCBJbXBsaWNpdEFuaW1h
dGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKGludCBwcm9wLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpCit7CisgICAgcmV0dXJuIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0
aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLCB0YXJnZXRTdHlsZSk7Cit9CisKK3ZvaWQgSW1wbGlj
aXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50IHByb3AsIFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUpCit7CisgICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsK
KyAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQcm9wZXJ0aWVzKHByb3AsIGN1
cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7Cit9ICAgIAorCitBbmlt
YXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKzogbV9k
YXRhKG5ldyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShmcmFtZSkpCit7CisgICAgCiB9CiAK
IEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRpb25Db250cm9sbGVyKCkKQEAgLTU2Niw1MCAr
MTY5MCw4NyBAQCBBbmltYXRpb25Db250cm9sbGVyOjp+QW5pbWF0aW9uQ29udHJvbGxlcigpCiAg
ICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxJ
bXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3ZvaWQgQW5pbWF0aW9u
Q29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewot
ICAgIGlmICghbV9kYXRhLT5oYXNJbXBsaWNpdEFuaW1hdGlvbnMoKSkKKyAgICBpZiAoIW1fZGF0
YS0+aGFzQW5pbWF0aW9ucygpKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBpZiAobV9k
YXRhLT5jbGVhcihyZW5kZXJlcikpCi0gICAgICAgIHJlbmRlcmVyLT5lbGVtZW50KCktPnNldENo
YW5nZWQoKTsKKyAgICAgICAgc2V0Q2hhbmdlZChyZW5kZXJlci0+ZWxlbWVudCgpKTsKIH0KIAot
UmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUltcGxpY2l0QW5pbWF0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCi17CitSZW5k
ZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit7ICAgIAorICAgIC8vIGRvbid0
IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBjYWNoZQorICAgIGlmICghcmVuZGVyZXItPmRv
Y3VtZW50KCkgfHwgcmVuZGVyZXItPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpCisgICAgICAg
IHJldHVybiBuZXdTdHlsZTsKKyAgICAKKyAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICAKKyAgICBpZiAoKCFvbGRTdHlsZSB8fCAhb2xkU3R5bGUtPnRy
YW5zaXRpb25zKCkpICYmICFuZXdTdHlsZS0+dHJhbnNpdGlvbnMoKSkKKyAgICAgICAgcmV0dXJu
IG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxlKiBibGVuZGVkU3R5bGUgPSBuZXdTdHls
ZTsKKyAgICAKICAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0
aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiAgV2UgdGhlbiBjb21wYXJlIHRoZW0KICAgICAvLyBhZ2Fp
bnN0IHRoZSBhbmltYXRpb25zIGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGluIHN5
bmMuICBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdlIHJlc2V0
IHRoZSBhbmltYXRpb24uICBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5k
IHdlIHJldHVybgogICAgIC8vIGEgbmV3IHN0eWxlLgogICAgIEFTU0VSVChyZW5kZXJlci0+ZWxl
bWVudCgpKTsgLy8gRklYTUU6IFdlIGRvIG5vdCBhbmltYXRlIGdlbmVyYXRlZCBjb250ZW50IHll
dC4KLQotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2RhdGEt
PmdldChyZW5kZXJlciwgbmV3U3R5bGUpOwotICAgIGlmICghYW5pbWF0aW9uICYmICFuZXdTdHls
ZS0+dHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIG5ld1N0eWxlOwotCi0gICAgUmVuZGVy
U3R5bGUqIGJsZW5kZWRTdHlsZSA9IGFuaW1hdGlvbi0+YW5pbWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXItPnN0eWxlKCksIG5ld1N0eWxlKTsKLSAgICBtX2RhdGEtPnVwZGF0ZVRpbWVyKCk7Ci0KKyAg
ICAKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+
YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKHJlbmRlcmVyKTsKKyAgICBibGVuZGVkU3R5bGUgPSBy
ZW5kZXJlckFuaW1hdGlvbnMtPmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7
CisgICAgCisgICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIAogICAgIGlm
IChibGVuZGVkU3R5bGUgIT0gbmV3U3R5bGUpIHsKLSAgICAgICAgLy8gRG8gc29tZSBvZiB0aGUg
d29yayB0aGF0IENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKCkgZG9lcywgdG8g
aW1wb3NlIHJ1bGVzCi0gICAgICAgIC8vIGxpa2Ugb3BhY2l0eSBjcmVhdGluZyBzdGFja2luZyBj
b250ZXh0LgorICAgICAgICAvLyBJZiB0aGUgYW5pbWF0aW9ucy90cmFuc2l0aW9ucyBjaGFuZ2Ug
b3BhY2l0eSBvciB0cmFuc2Zvcm0sIHdlIG5lZWVkIHRvIHVwZGF0ZQorICAgICAgICAvLyB0aGUg
c3R5bGUgdG8gaW1wb3NlIHRoZSBzdGFja2luZyBydWxlcy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxz
bworICAgICAgICAvLyBkb25lIGluIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxl
KCkuCiAgICAgICAgIGlmIChibGVuZGVkU3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAoYmxlbmRl
ZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IGJsZW5kZWRTdHlsZS0+aGFzVHJhbnNmb3JtKCkp
KQogICAgICAgICAgICAgYmxlbmRlZFN0eWxlLT5zZXRaSW5kZXgoMCk7CiAgICAgfQotCiAgICAg
cmV0dXJuIGJsZW5kZWRTdHlsZTsKIH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNw
ZW5kQW5pbWF0aW9ucygpCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmlzQW5pbWF0aW5nUHJv
cGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YS0+aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIob2JqLCBw
cm9wZXJ0eSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIC8vIEZJWE1FOiBXYWxrIHRoZSB3aG9sZSBo
YXNodGFibGUgYW5kIGNhbGwgcGF1c2Ugb24gZWFjaCBhbmltYXRpb24uCi0gICAgLy8gS2lsbCBv
dXIgdGltZXIuCisjaWZkZWYgREVCVUdfU1RBVEVfTUFDSElORQorICAgIGZwcmludGYoc3RkZXJy
LCAiQW5pbWF0aW9uQ29udHJvbGxlciAlcCBzdXNwZW5kQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQg
JXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNlbmRpZgorICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1h
dGlvbnMoZG9jdW1lbnQpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFu
aW1hdGlvbnMoKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRh
YmxlIGFuZCBjYWxsIHJlc3VtZSBvbiBlYWNoIGFuaW1hdGlvbi4KLSAgICAvLyBTdGFydCBvdXIg
dGltZXIuCisjaWZkZWYgREVCVUdfU1RBVEVfTUFDSElORQorICAgIGZwcmludGYoc3RkZXJyLCAi
QW5pbWF0aW9uQ29udHJvbGxlciAlcCByZXN1bWVBbmltYXRpb25zIGZvciBkb2N1bWVudCAlcFxu
IiwgdGhpcywgZG9jdW1lbnQpOworI2VuZGlmCisgICAgbV9kYXRhLT5yZXN1bWVBbmltYXRpb25z
KGRvY3VtZW50KTsKIH0KIAordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdGFydFVwZGF0ZVJl
bmRlcmluZ0Rpc3BhdGNoZXIoKQoreworICAgIG1fZGF0YS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdE
aXNwYXRjaGVyKCk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3R5bGVBdmFpbGFi
bGUoKQoreworICAgIG1fZGF0YS0+c3R5bGVBdmFpbGFibGUoKTsKK30KKwordm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRpbmcpCit7
CisgICAgaWYgKHdhaXRpbmcpCisgICAgICAgIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzKys7
CisgICAgZWxzZQorICAgICAgICBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycy0tOworICAgIG1f
YW5pbWF0aW9uQ29udHJvbGxlci0+c2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKHdhaXRpbmcp
OworfQorICAgIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmgKaW5kZXggZmRhMTE0My4u
OTBjNDlkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAor
KysgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5oCkBAIC0yOSw5ICsyOSwxMiBA
QAogI2lmbmRlZiBBbmltYXRpb25Db250cm9sbGVyX2gKICNkZWZpbmUgQW5pbWF0aW9uQ29udHJv
bGxlcl9oCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CitjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7
CkBAIC00MiwxNCArNDUsMjIgQEAgcHVibGljOgogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIoRnJh
bWUqKTsKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlcigpOwogICAgIAotICAgIHZvaWQgY2FuY2Vs
SW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCopOwotICAgIFJlbmRlclN0eWxlKiB1cGRh
dGVJbXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgUmVuZGVy
U3R5bGUqIHVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0
eWxlKTsKKyAgICAKKyAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRl
ck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorICAgIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlv
bnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7
CiAgICAgCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5p
bWF0aW9ucygpOworICAgIHZvaWQgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7Cisg
ICAgCisgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOwogICAgIAogcHJpdmF0ZToKICAgICBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSogbV9kYXRhOworICAgIAogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXgg
NTYxMTgzMi4uNzU5OTdhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysg
Yi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xNDkwLDcgKzE0OTAsNyBAQCB2b2lkIEZyYW1l
OjpjbGVhclRpbWVycyhGcmFtZVZpZXcgKnZpZXcsIERvY3VtZW50ICpkb2N1bWVudCkKICAgICAg
ICAgaWYgKHZpZXctPmZyYW1lKCkpIHsKICAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1
bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAg
ICAgICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+c3VzcGVuZE1hcnF1
ZWVzKCk7Ci0gICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb24oKS0+c3VzcGVuZEFu
aW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHZpZXctPmZyYW1lKCktPmFuaW1hdGlvbigpLT5zdXNw
ZW5kQW5pbWF0aW9ucyhkb2N1bWVudCk7CiAgICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+c3RvcEF1dG9zY3JvbGxUaW1lcigpOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggN2JjNTAyYS4uYzM3ZDEzYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMTU2LDcgKzIxNTYsNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UoKQogdm9pZCBSZW5kZXJPYmpl
Y3Q6OnNldEFuaW1hdGFibGVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKCFp
c1RleHQoKSAmJiBtX3N0eWxlICYmIHN0eWxlKQotICAgICAgICBzdHlsZSA9IGFuaW1hdGlvbigp
LT51cGRhdGVJbXBsaWNpdEFuaW1hdGlvbnModGhpcywgc3R5bGUpOworICAgICAgICBzdHlsZSA9
IGFuaW1hdGlvbigpLT51cGRhdGVBbmltYXRpb25zKHRoaXMsIHN0eWxlKTsKIAogICAgIHNldFN0
eWxlKHN0eWxlKTsKIH0KQEAgLTI1MzUsNyArMjUzNSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
ZXN0cm95KCkKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkK
ICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAKLSAg
ICBhbmltYXRpb24oKS0+Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1h
dGlvbigpLT5jYW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgLy8gQnkgZGVmYXVsdCBubyBy
ZWYtY291bnRpbmcuIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGRvZXNuJ3QgY2FsbAogICAgIC8v
IHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBkbyByZWYtY291bnRpbmcuIElmIGFu
eXRoaW5nCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA4N2Q4NDQ1Li5hMzc3YWQx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBS
ZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKQogICAgIC8vIFNvIHRoZSBjb2RlIGJlbG93IGluY2x1ZGVz
IGNvcGllZCBhbmQgcGFzdGVkIGNvbnRlbnRzIG9mCiAgICAgLy8gYm90aCBSZW5kZXJCb3g6OmRl
c3Ryb3koKSBhbmQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkuCiAgICAgLy8gRml4IG9yaWdpbmFs
bHkgbWFkZSBmb3IgPHJkYXI6Ly9wcm9ibGVtLzQyMjg4MTg+LgotICAgIGFuaW1hdGlvbigpLT5j
YW5jZWxJbXBsaWNpdEFuaW1hdGlvbnModGhpcyk7CisgICAgYW5pbWF0aW9uKCktPmNhbmNlbEFu
aW1hdGlvbnModGhpcyk7CiAKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkKICAgICAg
ICAgdi0+cmVtb3ZlV2lkZ2V0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCmluZGV4IGZhZmY3ZTAuLmU4ZmNkMmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5jcHAKQEAgLTY2NCwxMTEgKzY2NCw4NyBAQCBUcmFuc2Zvcm1PcGVyYXRpb24q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiBmcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21GICsgKG1f
ZiAtIGZyb21GKSAqIHByb2dyZXNzKTsKIH0KIAotVHJhbnNpdGlvbjo6VHJhbnNpdGlvbigpCi0g
ICAgOiBtX2R1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvbkR1cmF0aW9uKCkp
Ci0gICAgLCBtX3JlcGVhdENvdW50KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblJlcGVh
dENvdW50KCkpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVHJh
bnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgLCBtX3Byb3BlcnR5KFJlbmRlclN0eWxlOjpp
bml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpCitBbmltYXRpb246OkFuaW1hdGlvbigpCisgICAg
OiBtX2R1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRpb24oKSkKKyAgICAsIG1fdGlt
aW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKQorICAgICwg
bV9kZWxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERlbGF5KCkpCisgICAgLCBtX3Byb3BlcnR5KFJl
bmRlclN0eWxlOjppbml0aWFsUHJvcGVydHkoKSkKICAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2Up
Ci0gICAgLCBtX3JlcGVhdENvdW50U2V0KGZhbHNlKQogICAgICwgbV90aW1pbmdGdW5jdGlvblNl
dChmYWxzZSkKKyAgICAsIG1fZGVsYXlTZXQoZmFsc2UpCiAgICAgLCBtX3Byb3BlcnR5U2V0KGZh
bHNlKQotICAgICwgbV9uZXh0KDApCiB7CiB9CiAKLVRyYW5zaXRpb246OlRyYW5zaXRpb24oY29u
c3QgVHJhbnNpdGlvbiYgbykKLSAgICA6IG1fZHVyYXRpb24oby5tX2R1cmF0aW9uKQotICAgICwg
bV9yZXBlYXRDb3VudChvLm1fcmVwZWF0Q291bnQpCitBbmltYXRpb246OkFuaW1hdGlvbihjb25z
dCBBbmltYXRpb24mIG8pCisgICAgOiBSZWZDb3VudGVkPEFuaW1hdGlvbj4oKQorICAgICwgbV9k
dXJhdGlvbihvLm1fZHVyYXRpb24pCiAgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90aW1pbmdG
dW5jdGlvbikKKyAgICAsIG1fZGVsYXkoby5tX2RlbGF5KQogICAgICwgbV9wcm9wZXJ0eShvLm1f
cHJvcGVydHkpCiAgICAgLCBtX2R1cmF0aW9uU2V0KG8ubV9kdXJhdGlvblNldCkKLSAgICAsIG1f
cmVwZWF0Q291bnRTZXQoby5tX3JlcGVhdENvdW50U2V0KQogICAgICwgbV90aW1pbmdGdW5jdGlv
blNldChvLm1fdGltaW5nRnVuY3Rpb25TZXQpCisgICAgLCBtX2RlbGF5U2V0KG8ubV9kZWxheVNl
dCkKICAgICAsIG1fcHJvcGVydHlTZXQoby5tX3Byb3BlcnR5U2V0KQotICAgICwgbV9uZXh0KG8u
bV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDApCi17Ci19Ci0KLVRyYW5zaXRp
b246On5UcmFuc2l0aW9uKCkKIHsKLSAgICBkZWxldGUgbV9uZXh0OwogfQogCi1UcmFuc2l0aW9u
JiBUcmFuc2l0aW9uOjpvcGVyYXRvcj0oY29uc3QgVHJhbnNpdGlvbiYgbykKK0FuaW1hdGlvbiYg
QW5pbWF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQW5pbWF0aW9uJiBvKQogewotICAgIGlmIChtX25l
eHQgIT0gby5tX25leHQpIHsKLSAgICAgICAgZGVsZXRlIG1fbmV4dDsKLSAgICAgICAgbV9uZXh0
ID0gby5tX25leHQgPyBuZXcgVHJhbnNpdGlvbigqby5tX25leHQpIDogMDsKLSAgICB9Ci0KKyAg
ICBtX2RlbGF5ID0gby5tX2RlbGF5OwogICAgIG1fZHVyYXRpb24gPSBvLm1fZHVyYXRpb247Ci0g
ICAgbV9yZXBlYXRDb3VudCA9IG8ubV9yZXBlYXRDb3VudDsKICAgICBtX3RpbWluZ0Z1bmN0aW9u
ID0gby5tX3RpbWluZ0Z1bmN0aW9uOwogICAgIG1fcHJvcGVydHkgPSBvLm1fcHJvcGVydHk7CiAK
KyAgICBtX2RlbGF5U2V0ID0gby5tX2RlbGF5U2V0OwogICAgIG1fZHVyYXRpb25TZXQgPSBvLm1f
ZHVyYXRpb25TZXQ7Ci0gICAgbV9yZXBlYXRDb3VudFNldCA9IG8ubV9yZXBlYXRDb3VudFNldDsK
ICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0OwogICAgIG1f
cHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
LWJvb2wgVHJhbnNpdGlvbjo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdAor
Ym9vbCBBbmltYXRpb246OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIG8pIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb24gPT0gby5tX2R1cmF0aW9uICYmIG1fcmVwZWF0Q291
bnQgPT0gby5tX3JlcGVhdENvdW50ICYmIG1fdGltaW5nRnVuY3Rpb24gPT0gby5tX3RpbWluZ0Z1
bmN0aW9uICYmCi0gICAgICAgICAgIG1fcHJvcGVydHkgPT0gby5tX3Byb3BlcnR5ICYmIG1fZHVy
YXRpb25TZXQgPT0gby5tX2R1cmF0aW9uU2V0ICYmIG1fcmVwZWF0Q291bnRTZXQgPT0gby5tX3Jl
cGVhdENvdW50U2V0ICYmCi0gICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby5tX3Rp
bWluZ0Z1bmN0aW9uU2V0ICYmIG1fcHJvcGVydHlTZXQgPT0gby5tX3Byb3BlcnR5U2V0ICYmCi0g
ICAgICAgICAgICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICptX25leHQgPT0gKm8ubV9uZXh0IDog
bV9uZXh0ID09IG8ubV9uZXh0KTsKKyAgICBpZiAoIW8pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBib29sIHJlc3VsdCA9IG1fZHVyYXRpb24gPT0gby0+bV9kdXJhdGlvbiAmJgor
ICAgICAgICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvbiA9PSBvLT5tX3RpbWluZ0Z1bmN0aW9u
ICYmCisgICAgICAgICAgICAgICAgICBtX2RlbGF5ID09IG8tPm1fZGVsYXkgJiYKKyAgICAgICAg
ICAgICAgICAgIG1fcHJvcGVydHkgPT0gby0+bV9wcm9wZXJ0eSAmJiAKKyAgICAgICAgICAgICAg
ICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlvblNldCAmJiAKKyAgICAgICAgICAgICAg
ICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1pbmdGdW5jdGlvblNldCAmJiAKKyAg
ICAgICAgICAgICAgICAgIG1fZGVsYXlTZXQgPT0gby0+bV9kZWxheVNldCAmJgorICAgICAgICAg
ICAgICAgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5U2V0OworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgRklMTF9VTlNFVF9QUk9QRVJUWSh0ZXN0LCBwcm9w
R2V0LCBwcm9wU2V0KSBcCitmb3IgKGkgPSAwOyBpIDwgc2l6ZSgpICYmICgqdGhpcylbaV0tPnRl
c3QoKTsgKytpKSB7IH0gXAoraWYgKGkgPCBzaXplKCkgJiYgaSAhPSAwKSB7IFwKKyAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaSA8IHNpemUoKTsgKytpLCArK2opIFwKKyAgICAgICAgKCp0aGlzKVtp
XS0+cHJvcFNldCgoKnRoaXMpW2pdLT5wcm9wR2V0KCkpOyBcCiB9CiAKLXZvaWQgVHJhbnNpdGlv
bjo6ZmlsbFVuc2V0UHJvcGVydGllcygpCit2b2lkIEFuaW1hdGlvbkxpc3Q6OmZpbGxVbnNldFBy
b3BlcnRpZXMoKQogewotICAgIFRyYW5zaXRpb24qIGN1cnI7Ci0gICAgZm9yIChjdXJyID0gdGhp
czsgY3VyciAmJiBjdXJyLT5pc0R1cmF0aW9uU2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsg
fQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRv
IGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQu
Ci0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fZHVyYXRpb24gPSBwYXR0ZXJuLT5t
X2R1cmF0aW9uOwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAg
ICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAg
cGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgZm9yIChjdXJyID0g
dGhpczsgY3VyciAmJiBjdXJyLT5pc1JlcGVhdENvdW50U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0
KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVj
aWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fcmVwZWF0Q291bnQgPSBw
YXR0ZXJuLT5tX3JlcGVhdENvdW50OwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5l
eHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAg
ICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Zm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc1RpbWluZ0Z1bmN0aW9uU2V0KCk7IGN1
cnIgPSBjdXJyLT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewot
ICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0
aGUgcGF0dGVybiBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9
IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1f
dGltaW5nRnVuY3Rpb24gPSBwYXR0ZXJuLT5tX3RpbWluZ0Z1bmN0aW9uOwotICAgICAgICAgICAg
cGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1
cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgc2l6ZV90IGk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0RlbGF5
U2V0LCBkZWxheSwgc2V0RGVsYXkpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlv
blNldCwgZHVyYXRpb24sIHNldER1cmF0aW9uKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlz
VGltaW5nRnVuY3Rpb25TZXQsIHRpbWluZ0Z1bmN0aW9uLCBzZXRUaW1pbmdGdW5jdGlvbik7Cisg
ICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5U2V0LCBwcm9wZXJ0eSwgc2V0UHJvcGVy
dHkpOworfQogCi0gICAgZm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc1Byb3BlcnR5
U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0g
dGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1
ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiog
cGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAg
IGN1cnItPm1fcHJvcGVydHkgPSBwYXR0ZXJuLT5tX3Byb3BlcnR5OwotICAgICAgICAgICAgcGF0
dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIg
fHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0K
LSAgICB9Citib29sIEFuaW1hdGlvbkxpc3Q6Om9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uTGlz
dCYgbykgY29uc3QKK3sKKyAgICBpZiAoc2l6ZSgpICE9IG8uc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKKyAgICAg
ICAgaWYgKCphdChpKSAhPSAqby5hdChpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YSgpCkBAIC03ODQsNyArNzYwLDcgQEAgU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpCiAgICAgLCBtX2FwcGVhcmFuY2Uo
UmVuZGVyU3R5bGU6OmluaXRpYWxBcHBlYXJhbmNlKCkpCiAgICAgLCBtX2JvcmRlckZpdChSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlckZpdCgpKQogICAgICwgbV9ib3hTaGFkb3coMCkKLSAgICAs
IG1fdHJhbnNpdGlvbigwKQorICAgICwgbV90cmFuc2l0aW9ucygwKQogICAgICwgbV9tYXNrKEZp
bGxMYXllcihNYXNrRmlsbExheWVyKSkKICNpZiBFTkFCTEUoWEJMKQogICAgICwgYmluZGluZ1VS
SSgwKQpAQCAtODExLDcgKzc4Nyw3IEBAIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkCiAgICAgLCBt
X2JvcmRlckZpdChvLm1fYm9yZGVyRml0KQogICAgICwgbV9ib3hTaGFkb3coby5tX2JveFNoYWRv
dyA/IG5ldyBTaGFkb3dEYXRhKCpvLm1fYm94U2hhZG93KSA6IDApCiAgICAgLCBtX2JveFJlZmxl
Y3Qoby5tX2JveFJlZmxlY3QpCi0gICAgLCBtX3RyYW5zaXRpb24oby5tX3RyYW5zaXRpb24gPyBu
ZXcgVHJhbnNpdGlvbigqby5tX3RyYW5zaXRpb24pIDogMCkKKyAgICAsIG1fdHJhbnNpdGlvbnMo
by5tX3RyYW5zaXRpb25zID8gbmV3IEFuaW1hdGlvbkxpc3QoKm8ubV90cmFuc2l0aW9ucykgOiAw
KQogICAgICwgbV9tYXNrKG8ubV9tYXNrKQogICAgICwgbV9tYXNrQm94SW1hZ2Uoby5tX21hc2tC
b3hJbWFnZSkKICNpZiBFTkFCTEUoWEJMKQpAQCAtODI1LDcgKzgwMSw2IEBAIFN0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGE6On5TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKICAgICBkZWxldGUg
bV9jb250ZW50OwogICAgIGRlbGV0ZSBtX2NvdW50ZXJEaXJlY3RpdmVzOwogICAgIGRlbGV0ZSBt
X2JveFNoYWRvdzsKLSAgICBkZWxldGUgbV90cmFuc2l0aW9uOwogI2lmIEVOQUJMRShYQkwpCiAg
ICAgZGVsZXRlIGJpbmRpbmdVUkk7CiAjZW5kaWYKQEAgLTg5Niw5ICs4NzEsOSBAQCBib29sIFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChjb25zdCBT
dHlsZVJhcmVOb25JbmhlcgogCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OnRyYW5z
aXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBj
b25zdAogewotICAgIGlmICghbV90cmFuc2l0aW9uICYmIG8ubV90cmFuc2l0aW9uIHx8IG1fdHJh
bnNpdGlvbiAmJiAhby5tX3RyYW5zaXRpb24pCisgICAgaWYgKCFtX3RyYW5zaXRpb25zICYmIG8u
bV90cmFuc2l0aW9ucyB8fCBtX3RyYW5zaXRpb25zICYmICFvLm1fdHJhbnNpdGlvbnMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV90cmFuc2l0aW9uICYmIG8ubV90cmFuc2l0aW9u
ICYmICgqbV90cmFuc2l0aW9uICE9ICpvLm1fdHJhbnNpdGlvbikpCisgICAgaWYgKG1fdHJhbnNp
dGlvbnMgJiYgby5tX3RyYW5zaXRpb25zICYmICgqbV90cmFuc2l0aW9ucyAhPSAqby5tX3RyYW5z
aXRpb25zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTQ5NCw3ICsxNDY5LDcgQEAgUmVuZGVyU3R5bGU6OkRpZmYgUmVuZGVyU3R5bGU6OmRpZmYoY29u
c3QgUmVuZGVyU3R5bGUqIG90aGVyKSBjb25zdAogICAgIC8vIEN1cnNvcnMgYXJlIG5vdCBjaGVj
a2VkLCBzaW5jZSB0aGV5IHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgaW4gcmVzcG9uc2UgdG8g
bW91c2UgZXZlbnRzLAogICAgIC8vIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBjYXVzZSBhbnkgcmVw
YWludCBvciBsYXlvdXQuCiAKLSAgICAvLyBUcmFuc2l0aW9ucyBkb24ndCBuZWVkIHRvIGJlIGNo
ZWNrZWQgZWl0aGVyLiAgV2UgYWx3YXlzIHNldCB0aGUgbmV3IHN0eWxlIG9uIHRoZSBSZW5kZXJP
YmplY3QsIHNvIHdlIHdpbGwgZ2V0IGEgY2hhbmNlIHRvIGZpcmUgb2ZmCisgICAgLy8gQW5pbWF0
aW9ucyBkb24ndCBuZWVkIHRvIGJlIGNoZWNrZWQgZWl0aGVyLiAgV2UgYWx3YXlzIHNldCB0aGUg
bmV3IHN0eWxlIG9uIHRoZSBSZW5kZXJPYmplY3QsIHNvIHdlIHdpbGwgZ2V0IGEgY2hhbmNlIHRv
IGZpcmUgb2ZmCiAgICAgLy8gdGhlIHJlc3VsdGluZyB0cmFuc2l0aW9uIHByb3Blcmx5LgogICAg
IHJldHVybiBFcXVhbDsKIH0KQEAgLTE4NzAsMzMgKzE4NDUsNTAgQEAgY29uc3QgVmVjdG9yPFN0
eWxlRGFzaGJvYXJkUmVnaW9uPiYgUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkK
IAogdm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlvbnMoKQogewotICAgIGlmICh0cmFu
c2l0aW9ucygpKSB7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9ucygpLT5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGNsZWFyVHJhbnNpdGlvbnMoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBB
bmltYXRpb25MaXN0KiB0cmFuc2l0aW9uTGlzdCA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Ry
YW5zaXRpb25zOworICAgIGlmICghdHJhbnNpdGlvbkxpc3QpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAodHJhbnNpdGlvbkxpc3QtPnNpemUoKSA9PSAwKSB7CisgICAgICAgIGNsZWFy
VHJhbnNpdGlvbnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdldCByaWQg
b2YgZW1wdHkgdHJhbnNpdGlvbnMgYW5kIGFueXRoaW5nIGJleW9uZCB0aGVtCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB0cmFuc2l0aW9uTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCgqdHJhbnNpdGlvbkxpc3QpW2ldLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRyYW5z
aXRpb25MaXN0LT5yZXNpemUoaSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
IH0KIAotICAgICAgICBUcmFuc2l0aW9uKiBuZXh0OwotICAgICAgICBmb3IgKFRyYW5zaXRpb24q
IHAgPSBhY2Nlc3NUcmFuc2l0aW9ucygpOyBwOyBwID0gbmV4dCkgewotICAgICAgICAgICAgbmV4
dCA9IHAtPm1fbmV4dDsKLSAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXh0OwotICAgICAgICAgICAgICAgIHAtPm1fbmV4
dCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgaWYgKHRyYW5zaXRpb25MaXN0LT5z
aXplKCkgPT0gMCkgeworICAgICAgICBjbGVhclRyYW5zaXRpb25zKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50byBsYXllcnMgdGhhdCBkb24n
dCBoYXZlIHNvbWUgcHJvcGVydGllcyBzZXQuCisgICAgdHJhbnNpdGlvbkxpc3QtPmZpbGxVbnNl
dFByb3BlcnRpZXMoKTsKKyAgICAgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBk
dXBsaWNhdGUgcHJvcGVydGllcy4gVGhpcyBpcyBhbiBPKG5eMikgYWxnb3JpdGhtCisgICAgLy8g
YnV0IHRoZSBsaXN0cyB0ZW5kIHRvIGJlIHZlcnkgc2hvcnQsIHNvIGl0IGlzIHByb2JhYmx5IG9r
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2l0aW9uTGlzdC0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkrMTsgaiA8IHRyYW5zaXRpb25MaXN0LT5zaXpl
KCk7ICsraikgeworICAgICAgICAgICAgaWYgKCgqdHJhbnNpdGlvbkxpc3QpW2ldLT5wcm9wZXJ0
eSgpID09ICgqdHJhbnNpdGlvbkxpc3QpW2pdLT5wcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gdG9zcyBpCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkxpc3QtPnJlbW92ZShpKTsK
KyAgICAgICAgICAgICAgICBqID0gaTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAot
ICAgICAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNv
bWUgcHJvcGVydGllcyBzZXQuCi0gICAgICAgIGFjY2Vzc1RyYW5zaXRpb25zKCktPmZpbGxVbnNl
dFByb3BlcnRpZXMoKTsKICAgICB9CiB9CiAKLVRyYW5zaXRpb24qIFJlbmRlclN0eWxlOjphY2Nl
c3NUcmFuc2l0aW9ucygpCitBbmltYXRpb25MaXN0KiBSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNp
dGlvbnMoKQogewotICAgIFRyYW5zaXRpb24qIGxheWVyID0gcmFyZU5vbkluaGVyaXRlZERhdGEu
YWNjZXNzKCktPm1fdHJhbnNpdGlvbjsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gbmV3IFRyYW5zaXRpb24oKTsK
LSAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbjsKKyAgICBBbmlt
YXRpb25MaXN0KiBsaXN0ID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNp
dGlvbnM7CisgICAgaWYgKCFsaXN0KQorICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS0+bV90cmFuc2l0aW9ucyA9IG5ldyBBbmltYXRpb25MaXN0KCk7CisgICAgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb25zOwogfQogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBlYmFiOGI2Li5lMTIxMjdmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTEyNTcsNjAgKzEyNTcsNzQgQEAgcHJpdmF0ZToK
ICAgICBkb3VibGUgbV95MjsKIH07CiAKLXN0cnVjdCBUcmFuc2l0aW9uIHsKK2NsYXNzIEFuaW1h
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlvbj4gewogcHVibGljOgotICAgIFRyYW5z
aXRpb24oKTsKLSAgICB+VHJhbnNpdGlvbigpOwotCi0gICAgVHJhbnNpdGlvbiogbmV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dDsgfQotICAgIFRyYW5zaXRpb24qIG5leHQoKSB7IHJldHVybiBt
X25leHQ7IH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFuaW1hdGlvbj4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFuaW1hdGlvbik7IH07CisgICAgCisgICAgYm9vbCBpc0RlbGF5
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheVNldDsgfQogICAgIGJvb2wgaXNEdXJhdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb25TZXQ7IH0KLSAgICBib29sIGlzUmVwZWF0Q291
bnRTZXQoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdENvdW50U2V0OyB9CiAgICAgYm9vbCBpc1Rp
bWluZ0Z1bmN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvblNldDsgfQog
ICAgIGJvb2wgaXNQcm9wZXJ0eVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlTZXQ7IH0K
LSAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9kdXJhdGlvblNldCAm
JiAhbV9yZXBlYXRDb3VudFNldCAmJiAhbV90aW1pbmdGdW5jdGlvblNldCAmJiAhbV9wcm9wZXJ0
eVNldDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAoIW1fZHVyYXRpb25TZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQg
JiYgIW1fcHJvcGVydHlTZXQpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eU9yWmVyb0R1cmF0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VtcHR5KCkgfHwgKG1fZHVyYXRp
b24gPT0gMCAmJiBtX2RlbGF5IDw9IDApOworICAgIH0KKworICAgIHZvaWQgY2xlYXJEZWxheSgp
IHsgbV9kZWxheVNldCA9IGZhbHNlOyB9CiAgICAgdm9pZCBjbGVhckR1cmF0aW9uKCkgeyBtX2R1
cmF0aW9uU2V0ID0gZmFsc2U7IH0KLSAgICB2b2lkIGNsZWFyUmVwZWF0Q291bnQoKSB7IG1fcmVw
ZWF0Q291bnRTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJUaW1pbmdGdW5jdGlvbigpIHsg
bV90aW1pbmdGdW5jdGlvblNldCA9IGZhbHNlOyB9CisKICAgICB2b2lkIGNsZWFyUHJvcGVydHko
KSB7IG1fcHJvcGVydHlTZXQgPSBmYWxzZTsgfQogCi0gICAgaW50IGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGludCByZXBlYXRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwZWF0Q291bnQ7IH0KKyAgICBkb3VibGUgZGVsYXkoKSBjb25zdCB7IHJldHVybiBt
X2RlbGF5OyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlv
bjsgfQogICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KICAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5OyB9Ci0gICAgCi0gICAgdm9pZCBzZXREdXJhdGlvbihpbnQgZCkgeyBt
X2R1cmF0aW9uID0gZDsgbV9kdXJhdGlvblNldCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFJlcGVh
dENvdW50KGludCBjKSB7IG1fcmVwZWF0Q291bnQgPSBjOyBtX3JlcGVhdENvdW50U2V0ID0gdHJ1
ZTsgfQorCisgICAgdm9pZCBzZXREZWxheShkb3VibGUgYykgeyBtX2RlbGF5ID0gYzsgbV9kZWxh
eVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldER1cmF0aW9uKGRvdWJsZSBkKSB7IEFTU0VSVChk
ID49IDApOyBtX2R1cmF0aW9uID0gZDsgbV9kdXJhdGlvblNldCA9IHRydWU7IH0KICAgICB2b2lk
IHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBmKSB7IG1fdGltaW5nRnVu
Y3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0UHJv
cGVydHkoaW50IHQpIHsgbV9wcm9wZXJ0eSA9IHQ7IG1fcHJvcGVydHlTZXQgPSB0cnVlOyB9CiAK
LSAgICB2b2lkIHNldE5leHQoVHJhbnNpdGlvbiogbikgeyBpZiAobV9uZXh0ICE9IG4pIHsgZGVs
ZXRlIG1fbmV4dDsgbV9uZXh0ID0gbjsgfSB9CisgICAgQW5pbWF0aW9uJiBvcGVyYXRvcj0oY29u
c3QgQW5pbWF0aW9uJiBvKTsKIAotICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBUcmFu
c2l0aW9uJiBvKTsgICAgCi0gICAgVHJhbnNpdGlvbihjb25zdCBUcmFuc2l0aW9uJiBvKTsKKyAg
ICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNs
dWRpbmcgbV9uZXh0KQorICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiog
dCkgY29uc3Q7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29u
c3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7Ci0gICAgfQorICAgIC8vIHJldHVybiB0cnVlIGV2
ZXJ5IEFuaW1hdGlvbiBpbiB0aGUgY2hhaW4gKGRlZmluZWQgYnkgbV9uZXh0KSBtYXRjaCAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBhbmlt
YXRpb25zTWF0Y2goJm8pOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFuaW1hdGlvbiYg
bykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogCi0gICAgdm9pZCBmaWxsVW5zZXRQ
cm9wZXJ0aWVzKCk7Ci0KLSAgICBpbnQgbV9kdXJhdGlvbjsKLSAgICBpbnQgbV9yZXBlYXRDb3Vu
dDsKK3ByaXZhdGU6CisgICAgQW5pbWF0aW9uKCk7CisgICAgQW5pbWF0aW9uKGNvbnN0IEFuaW1h
dGlvbiYgbyk7CisgICAgCisgICAgZG91YmxlIG1fZHVyYXRpb247CiAgICAgVGltaW5nRnVuY3Rp
b24gbV90aW1pbmdGdW5jdGlvbjsKKyAgICBkb3VibGUgbV9kZWxheTsKICAgICBpbnQgbV9wcm9w
ZXJ0eTsKIAotICAgIGJvb2wgbV9kdXJhdGlvblNldDsKLSAgICBib29sIG1fcmVwZWF0Q291bnRT
ZXQ7Ci0gICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0OwotICAgIGJvb2wgbV9wcm9wZXJ0eVNl
dDsKLQotICAgIFRyYW5zaXRpb24qIG1fbmV4dDsKKyAgICBib29sIG1fZHVyYXRpb25TZXQgICAg
ICAgOiAxOworICAgIGJvb2wgbV90aW1pbmdGdW5jdGlvblNldCA6IDE7CisgICAgYm9vbCBtX2Rl
bGF5U2V0ICAgICAgICAgIDogMTsKKyAgICBib29sIG1fcHJvcGVydHlTZXQgICAgICAgOiAxOwog
fTsKIAorY2xhc3MgQW5pbWF0aW9uTGlzdCA6IHB1YmxpYyBWZWN0b3I8UmVmUHRyPEFuaW1hdGlv
bj4gPgoreworcHVibGljOgorICAgIHZvaWQgZmlsbFVuc2V0UHJvcGVydGllcygpOworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBbmltYXRpb25MaXN0JiBvKSBjb25zdDsKK307ICAgIAorCisK
IGNsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlv
bj4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gY3Jl
YXRlKCkKQEAgLTEzODksNyArMTQwMyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBSZWZQdHI8U3R5
bGVSZWZsZWN0aW9uPiBtX2JveFJlZmxlY3Q7CiAKLSAgICBUcmFuc2l0aW9uKiBtX3RyYW5zaXRp
b247CisgICAgQW5pbWF0aW9uTGlzdCogbV90cmFuc2l0aW9uczsKIAogICAgIEZpbGxMYXllciBt
X21hc2s7CiAgICAgTmluZVBpZWNlSW1hZ2UgbV9tYXNrQm94SW1hZ2U7CkBAIC0yMDMwLDkgKzIw
NDQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLT5tX291dGxpbmUuX29m
ZnNldDsKICAgICB9CiAgICAgU2hhZG93RGF0YSogdGV4dFNoYWRvdygpIGNvbnN0IHsgcmV0dXJu
IHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2hhZG93OyB9Ci0gICAgQ29sb3IgdGV4dFN0cm9rZUNv
bG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsg
fQorICAgIGNvbnN0IENvbG9yJiB0ZXh0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJl
SW5oZXJpdGVkRGF0YS0+dGV4dFN0cm9rZUNvbG9yOyB9CiAgICAgZmxvYXQgdGV4dFN0cm9rZVdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VXaWR0aDsg
fQotICAgIENvbG9yIHRleHRGaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVk
RGF0YS0+dGV4dEZpbGxDb2xvcjsgfQorICAgIGNvbnN0IENvbG9yJiB0ZXh0RmlsbENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRGaWxsQ29sb3I7IH0KICAgICBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm9wYWNp
dHk7IH0KICAgICBFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8RUFwcGVhcmFuY2U+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FwcGVhcmFuY2UpOyB9
CiAgICAgRUJveEFsaWdubWVudCBib3hBbGlnbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEVCb3hBbGlnbm1lbnQ+KHJhcmVOb25Jbmhlcml0ZWREYXRhLT5mbGV4aWJsZUJveC0+YWxpZ24p
OyB9CkBAIC0yMDg3LDggKzIxMDEsMTAgQEAgcHVibGljOgogICAgIC8vIEVuZCBDU1MzIEdldHRl
cnMKIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IGdldHRlciBtZXRob2RzCi0gICAg
VHJhbnNpdGlvbiogYWNjZXNzVHJhbnNpdGlvbnMoKTsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiB0
cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5z
aXRpb247IH0KKyAgICBBbmltYXRpb25MaXN0KiBhY2Nlc3NUcmFuc2l0aW9ucygpOworICAgIGNv
bnN0IEFuaW1hdGlvbkxpc3QqIHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbnM7IH0KKyAgICBib29sIGhhc1RyYW5zaXRpb25zKCkg
Y29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbnMgJiYgcmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbnMtPnNpemUoKSA+IDA7IH0KKwogICAgIGlu
dCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bGluZUNs
YW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhl
cml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAgIEVUZXh0U2VjdXJpdHkgdGV4dFNlY3Vy
aXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRTZWN1cml0eT4ocmFyZUluaGVy
aXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIzNTAsMTAgKzIzNjYsMTcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VHJhbnNmb3JtT3JpZ2luWChMZW5ndGggbCkgeyBTRVRfVkFSKHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zZm9ybSwgbV94LCBsKTsgfQogICAgIHZv
aWQgc2V0VHJhbnNmb3JtT3JpZ2luWShMZW5ndGggbCkgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0
ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zZm9ybSwgbV95LCBsKTsgfQogICAgIC8vIEVuZCBDU1Mz
IFNldHRlcnMKLSAgIAorCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJvcGVydHkgc2V0dGVycwot
ICAgIHZvaWQgY2xlYXJUcmFuc2l0aW9ucygpIHsgZGVsZXRlIHJhcmVOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX3RyYW5zaXRpb247IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5t
X3RyYW5zaXRpb24gPSAwOyB9Ci0gICAgdm9pZCBpbmhlcml0VHJhbnNpdGlvbnMoY29uc3QgVHJh
bnNpdGlvbiogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5v
bkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpw
YXJlbnQpOyB9CisgICAgdm9pZCBjbGVhclRyYW5zaXRpb25zKCkKKyAgICB7CisgICAgICAgIGlm
IChyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9ucykgeworICAgICAg
ICAgICAgZGVsZXRlIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb25z
OworICAgICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlv
bnMgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBpbmhlcml0VHJhbnNpdGlvbnMo
Y29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYgKHBh
cmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbnMgPSBuZXcg
QW5pbWF0aW9uTGlzdCgqcGFyZW50KTsgfQogICAgIHZvaWQgYWRqdXN0VHJhbnNpdGlvbnMoKTsK
ICAgICB2b2lkIHNldExpbmVDbGFtcChpbnQgYykgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWRE
YXRhLCBsaW5lQ2xhbXAsIGMpOyB9CiAgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIp
IHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1c3QsIGIpOyB9CkBAIC0y
NTExLDEwICsyNTM0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxUcmFu
c2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQpOyB9CiAgICAgCiAg
ICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBpbnQgaW5pdGlhbFRyYW5z
aXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgaW50IGluaXRpYWxUcmFu
c2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGljIFRpbWluZ0Z1bmN0
aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVybiBUaW1pbmdGdW5j
dGlvbigpOyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkgeyBy
ZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbERlbGF5KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHN0YXRpYyBkb3VibGUgaW5pdGlhbER1cmF0aW9uKCkgeyByZXR1cm4g
MDsgfQorICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVGltaW5nRnVuY3Rpb24oKSB7
IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CisgICAgc3RhdGljIGludCBpbml0aWFsUHJvcGVy
dHkoKSB7IHJldHVybiBjQW5pbWF0ZUFsbDsgfQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbExpbmVD
bGFtcCgpIHsgcmV0dXJuIC0xOyB9CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFRleHRTaXplQWRq
dXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBFVGV4dFNlY3VyaXR5IGluaXRpYWxU
ZXh0U2VjdXJpdHkoKSB7IHJldHVybiBUU05PTkU7IH0K
</data>
<flag name="review"
          id="9966"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>